首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义API的OAuth2

自定义API的OAuth2
EN

Stack Overflow用户
提问于 2013-07-25 09:32:09
回答 2查看 1.8K关注 0票数 6

我正在尝试为我正在创建的API使用OAuth2,但可能需要对流程的工作方式进行一些解释。我也发现了类似的问题(例如:使用OAuth保护REST,同时仍然允许通过第三方OAuth提供程序进行身份验证(使用DotNetOpenAuth)),但它们并没有清楚地说明关于第三方登录的问题。

我不希望使用OpenID (无论如何),特别是当委托身份验证工作得很好的时候。它看起来过于复杂,并且没有很多支持良好的库。(我使用PHP + Laravel 4)

这个问题被分成4个实体:

  • 资源所有者-最终用户
  • 客户端浏览器(我的网站),移动应用,或类似的
  • 授权服务器-我的OAuth2服务器
  • 资源服务器-我的API。服务用户数据。

我想我已经知道了当用户在我的auth服务器上创建一个帐户并使用该帐户登录时的流程:

  1. 用户在客户端上填写用户名/密码。
  2. 客户端使用资源所有者流连接到Auth Server,对用户进行身份验证,并自动授权客户端。
  3. 用户被从AUth服务器重定向回客户端,其中包含一个用户ID的令牌+签名的JWT。
  4. 客户端将令牌保存在会话中。
  5. 客户端使用令牌+签名的JWT用户id从资源服务器请求数据。
  6. Resource验证JWT并根据令牌作用域返回数据。

我还没有测试工作流,但这似乎是可行的。然而,事实证明,第三方登录更加困难。到目前为止,这就是我所得到的:

  1. 用户点击Google/Facebook/LinkedIn登录。
  2. 用户被从客户端重定向到Google的Auth Server (不是我的)。
  3. 用户登录使用user/pass并授权客户端获取某些受保护的资源(userinfo.email) --这将通过委托对用户进行身份验证。
  4. 用户被重定向回客户端,并带有一个包含Google用户id的令牌+签名JWT。
  5. 客户端验证JWT。
  6. 客户端使用客户端凭据流连接到资源服务器。收到一个新的记号。
  7. 客户端将令牌保存在会话中。
  8. 客户端请求将Google用户id转换为应用程序用户id。(此连接是在注册过程中建立的。)
  9. 资源服务器返回应用程序用户id。(签署JWT)
  10. 客户端使用令牌+签名的JWT用户id从资源服务器请求数据。
  11. Resource验证JWT并根据令牌作用域返回数据。

这可能有效,但感觉非常复杂。肯定有办法跳过这些步骤吗?我对第8-10步特别感兴趣。据我所知,用户根本不必使用第三方登录与我的Auth Server交互。问题是如何最好地将一个成功的id_token (或其他什么)从Google/Facebook/LinkedIn连接到my上的“帐户”资源。

现在,我并不担心任何其他客户端连接到API,但这是将来某个时候会发生的事情。

EN

回答 2

Stack Overflow用户

发布于 2014-10-28 12:56:28

“据我所知,用户根本不必使用第三方登录与我的Auth Server交互。”这只是部分事实。理论上,您可以使用第三方登录的令牌作为自己的令牌。因此,正常的资源请求是:

  1. 客户端请求资源-发送令牌(从第三方)和登录类型(facebook/google/etc)
  2. 服务器通过使用第三方授权服务器检查令牌来验证请求,并返回数据。

这样做的缺点是,每次发出请求时,API服务器都必须与第三方服务器对话(不管是否需要来自它们的数据)。相反,当您生成自己的令牌时,您有更多的控制,并且验证请求更简单。

不过,我还是坚持你的工作流程。我曾经做过类似的事情,我的脚步也差不多。当“数”步骤时,你也必须考虑,对于第2-4步,你基本上不需要做任何事情,因为谷歌、Facebook和其他公司已经做得很好了;)

票数 0
EN

Stack Overflow用户

发布于 2016-02-09 12:54:44

对你问题的迟交。

找到解释使用OAuth2:OAuth2分8步的资源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17854156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档