记住授权

时间:2016-09-23 20:22:39

标签: oauth-2.0 laravel-5.3

我正在使用新的laravel/passport软件包,考虑将其用作SSO服务,并且我已关注laracast中的视频(如果您使用该链接可能不起作用没有帐户。如果没有,它只是引导您完成示例项目)。该网站按预期工作;我能够从客户端应用程序验证用户,并使用返回的API令牌对api执行调用。

但是,即使我已授权客户端访问受保护资源,每次登录客户端时都必须重新授权客户端。如果我所说的没有意义,那就是流程:

  1. 访问my-client.app
  2. 重定向到sso.app \ oauth \ authorization(授权服务器)以获取authorization_code
  3. 登录sso.app
  4. 授权my-client.app访问sso.app资源
  5. 使用authorization_code重定向到my-client.app
  6. 使用authorization_code向sso.app \ oauth \ token发出POST请求以获取令牌
  7. 使用令牌向sso.app受保护资源发出请求
  8. 退出my-client.app
  9. 重定向到sso.app/logged-out(页面说你退出了my-client.app)
  10. 访问my-client.app
  11. 重定向到sso.app \ oauth \ authorization以获取authorization_code

此时,客户端已登录sso.app,并且已授权my-client.app访问sso.app的受保护资源。目前,sso.app要求我再次授权,然后才会给我authorization_code。我希望sso.app能够意识到用户已经为客户端授予了授权,因此它应该只发出authorization_code而不再请求授权。

例如,我使用Google登录SO,但每次都不会要求我授权。

编辑:

似乎我想要做的事情laravel/passport无法开箱即用。

我的想法是创建一个表client_user_authorizations,用于跟踪用户授权哪些客户端。然后我会添加一个触发器(我宁愿与[{1}}类的completeAuthorizationRequest方法绑定GrantTypeInterface Authorization Grant,但这似乎是一个很大的痛苦。{{1}将在insert上插入oauth_auth_codes表的表。

然后我会创建自己的控制器来代替护照client_user_authorizations(句柄AuthorizationController),它将调用一种方法来查看资源所有者是否已经授权客户并调用如果是这种情况,则发布GET:/oauth/authorization的必要方法。否则,将发生当前流动。

您可以通过我的想法看到哪些问题?

0 个答案:

没有答案