通过app或web api进行OAuthorization

时间:2015-06-08 15:58:07

标签: android asp.net-web-api oauth

我的问题很简单,但我很确定这只是对我缺乏了解。

背景: 我有原型Android应用程序原型以及asp.net Web API,我想实现OAuthorization,以便用户可以通过谷歌+,Facebook或Twitter登录。

问题: 这个功能的设计模式是什么?我很困惑我是通过移动应用程序还是通过Web API实现OAuthorization。这可能是两者的结合。我已经阅读了很多博客和教程,但他们没有帮助我理解我的项目的这两个方面(应用程序和Web API)如何协同工作。

由于

1 个答案:

答案 0 :(得分:1)

在OAuth中有这些玩家:

  • 资源(例如您的Gmail联系人)这不是玩家本身
  • 资源的所有者(您是Gmail联系人的所有者)
  • 授权服务器(您登录gmail的地方)
  • 资源服务器(gmail,其中包含联系人)。
  • 客户:希望使用资源的应用程序

请注意,在大多数情况下,资源服务器和授权服务器是同一台服务器

OAuth允许您(资源的所有者:您的gmail contatcs)授权客户端(第三方应用)代表您从资源服务器(gmail本身)访问资源(您的gmail联系人)。

为此,典型的流程是:您打开第三方应用程序(客户端),当需要访问您的资源(gmail联系人)时,它会将您重定向到授权服务器(gmail),并且除了登录之外,如果您没有登录,授权服务器(gmail)会通知您您的应用程序(客户端)正在尝试访问资源(联系人),以便您可以批准或拒绝它。

如果您批准它,gmail会向您的应用程序(通过URL)发送一个令牌,该令牌可以换成“持票人令牌”。因此,您的应用程序会交换它,并接收berare令牌,该令牌可以呈现给资源服务器(gmail)以访问资源(联系人)。从那一刻开始,客户端(第三方应用程序)将向服务器提供承载令牌,并使其能够访问资源(联系人)。

因此,OAuth本身不是身份验证的最佳选择。您可以通过请求获取基本配置文件信息(名称,可能是电子邮件)的权限来使用它进行身份验证,一旦您有权访问该信息,您就知道该用户是谁。但是,这种简单的Auth广告验证服务器实现并不安全,因此您真正使用的是OpenID,这样更安全。这个流程类似于上面提到的流程,但它针对不同的提供商进行了标准化,更安全。

问题是您应该使用OpenID providers委派身份验证。

要了解如何使用OAuth身份验证,请阅读以下内容:Logging In Using External Sites in an ASP.NET Web Pages (Razor) Site和此:Code! MVC 5 App with Facebook, Twitter, LinkedIn and Google OAuth2 Sign-on

使用OpenID的一个选项是dotnetopenauth

注意:如果您使用OAuth,则需要在提供商(Google,Facebook ...)上注册您的应用程序,以便您可以使用它。 OAuth授权服务器必须具有预先配置的客户端(应用程序)列表,其中包含一些配置(例如回调URL,客户端ID和密码),这将允许此客户端(应用程序)请求代表其使用它们的权限。用户(资源所有者)。

注意:您的应用程序可以使用OAuth授权自己,即使用OWIN中间件生成和检查令牌。

了解了OAuth和OpenID的内部工作后,您可以将任何可用的库用于不同的语言:openid.net libraries list