小编Jon*_*erg的帖子

OAuth2用于自定义API

我正在尝试将OAuth2用于我正在创建的API,但可以使用一些解释流程如何工作.我发现了类似的问题(例如:使用OAuth保护我的REST API,同时仍然允许通过第三方OAuth提供商进行身份验证(使用DotNetOpenAuth))但是他们并没有明确第三方登录.

我不希望使用OpenID(但是,无论如何),特别是当通过委派进行身份验证可能正常工作时.它似乎过于复杂,并没有很多支持良好的库.(我正在使用PHP + Laravel 4)

问题分为4个(ish)实体:

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

我想我已经找到了用户在我的auth服务器上创建帐户并使用该帐户登录时的流程:

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

我还没有测试过工作流程,但这看起来似乎有效.但是,第三方登录已证明更加困难.这是我到目前为止所得到的:

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

这可能有用,但感觉非常复杂.当然必须有一种方法可以跳过这些步骤中的一些步骤?我对第8-10步特别感兴趣.据我所知,用户永远不必使用第三方登录与我的Auth服务器进行交互.问题是如何最好地将Google/Facebook/LinkedIn中成功的id_token(或其他内容)连接到我的API上的"帐户"资源.

现在,我并不担心任何其他客户端连接到API,但它会在未来的某个时间发生.

php api rest oauth-2.0 laravel-4

5
推荐指数
1
解决办法
1320
查看次数

标签 统计

api ×1

laravel-4 ×1

oauth-2.0 ×1

php ×1

rest ×1