繁体   English   中英

Oauth密码授予和客户端网站

[英]Oauth Password Grant and client website

我正在使用这些出色的工具,Laravel 5,thephpleague / oauth2-server,lucadegasperi / oauth2-server-laravel和AngularJS。

我同时具有域api.dev的api和授权服务器。

我有一个域为client.dev的客户端网站。

客户网站上有管理员和成员区域。

我正在使用OAuth 2资源所有者密码授予类型来访问api。

现在,我在客户网站管理区域上有一个登录表单。 用户输入他/她的用户名和密码并提交表格。 客户端网站随后使用密码授予向auth服务器发出卷曲请求,将用户名和密码附加到客户端id和密码等。然后,它处理来自auth服务器的响应,并在成功后进行相应的重定向(管理员信息中心)(不是,请登录并显示错误消息)。

这很好。

我的问题是,在用户获得访问令牌之前,客户网站目前不知道用户是谁(管理员或成员)。 当它向api请求资源时,才可以使用Authorizer :: getResourceOwnerId()之类的方法来检查用户是谁。

这是如上所述的场景。 成员可以登录到管理区域,获取访问令牌并重定向到仪表板。 然后触发一个有角的$ http.get,以获取要显示在仪表板上的资源(由oauth过滤)。 客户端网站检查并发现该用户实际上不是管理员(通过Authorizer :: getResourceOwnerId()),因此注销并将该用户重定向回登录表单。

首先,用户不应该能够成功登录。

我的设置错了吗? 否则,我该如何正确处理?

我是否应该在客户端和api / auth服务器上都具有相同的用户表,以便我可以立即检查在客户端上登录的用户是否为admin。

感谢您抽出时间来阅读。

我最终扩展了这两个类和方法:

League \\ OAuth2 \\ Server \\ Grant \\ PasswordGrant :: completeFlow()-我已经包含要设置的user_id并传递给下面的Bearer类。

League \\ OAuth2 \\ Server \\ TokenType \\ Bearer :: generateResponse()-检查user_id是否存在并将其包含在响应中。

当然,现在在lucadegasperi / oauth2-server-laravel的配置中使用了子类来代替其父类。

本质上,密码授予现在返回此数据:

array (
  'access_token' => 'P9d4ChYm4UGMMqMuuhI250inNiD3NKlIM7cFuVB2',
  'token_type' => 'Bearer',
  'expires_in' => 10,
  'refresh_token' => 'G6WgBEWKakl9vc6jJesFGDUc1wlja8SwuOV7kg8y',
  'user_id' => 2,
)  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM