使用REST和ASP.NET Web Api在跨平台移动应用程序中进行身份验证和授权

7
我正在编写一个使用ASP.NET Web Api 模板的服务器,并实现REST服务。该服务器将成为移动游戏的后端,存储用户的高分、进度和其他信息。我已经审查了许多方法(这里, 这里, 和这里),但仍然难以决定采用哪种方式。在我的情况下,我主要想防止欺诈行为,因为每个用户帐户将只包含有限的信息(除了他们的电子邮件地址)。以下是理想情况:
  1. 用户首次打开应用程序
  2. 用户被给予自定义用户名的选项,并由服务器检查,以避免出现重复
  3. 用户获得由服务器生成的六位随机PIN码(这样他们可以在不同的手机上使用同一账户)
  4. 用户输入电子邮件地址
  5. 在服务器上创建新用户(服务器验证该帐户是否由我的客户端应用程序的有效实例创建)
  6. 用户玩游戏,上传结果(通过基本身份验证?)
  7. 用户可以查看全球结果(GET方法不包含特定于用户的安全性)
我难以确定使用什么类型的身份验证和授权方法(无浏览器登录屏幕等)。非常感谢您的帮助。
-Tamas

也许在这种情况下基本身份验证就足够了?但我仍然不确定如何确保某人是通过有效的客户端访问rest api。 - tamaslnagy
2个回答

5
即使您使用基本身份验证,也应该使用HTTPS。如果您使用HTTPS,则可以使用客户端证书来验证客户端。只有拥有有效证书的客户端才能获得访问权限。如果您不打算将此API公开给其他消费者,并且它只能由您开发的客户端使用,您可能需要考虑使用WS-Security和WCF。这里有一个妙趣横生的比喻,介绍了裸露骑摩托车与全副武装骑行之间的区别。(传送门)

我将使用多种语言(Java、Obj-C 和 C#/.NET),因此我不知道 ws-security/wcf 方法是否可行。客户端证书方法是否跨平台? - tamaslnagy
如果它是跨平台的,我建议坚持使用REST。客户端证书是跨平台的。 - Kevin Junghans
服务器应该返回HTTP 401错误代码,意思是“未经授权”。 - Kevin Junghans
确实,但我该如何实际授权一个想要加入我的服务的新用户呢? - tamaslnagy
您需要向您的HTTP配置添加一个消息处理程序,该处理程序实现自定义身份验证处理程序。在此开源项目http://identitymodel.codeplex.com/中,有示例和源代码可供使用。 - Kevin Junghans
显示剩余2条评论

1
如果来自不同的客户端/设备,则类似令牌(token)的身份验证可能适合您。
思路很简单,您的 Web 服务中有身份验证方法。该方法负责检查凭据并发出“令牌”。一些简单的结构,例如 SHA1 或 MD5 字符串,所有后续客户端调用都使用它们。
如果客户端经过身份验证,则在整个会话期间存储令牌。其他 Web 服务方法(如 SaveScore)只接受令牌作为参数。然后,它们负责检查是否有效。如果令牌无效,则不提供服务。

如果可能的话,我更倾向于基本身份验证而不是令牌式方法。 - tamaslnagy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接