我正在使用新的laravel/passport软件包,考虑将其用作SSO服务,并且我已关注laracast中的视频(如果您使用该链接可能不起作用没有帐户。如果没有,它只是引导您完成示例项目)。该网站按预期工作;我能够从客户端应用程序验证用户,并使用返回的API令牌对api执行调用。
但是,即使我已授权客户端访问受保护资源,每次登录客户端时都必须重新授权客户端。如果我所说的没有意义,那就是流程:
此时,客户端已登录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
的必要方法。否则,将发生当前流动。
您可以通过我的想法看到哪些问题?