【发布时间】:2017-05-06 22:13:39
【问题描述】:
我已经按照官方文档 (https://laravel.com/docs/5.3/passport#introduction) 中的描述为 Laravel 5.3 设置了 Laravel Passport 包。
我希望 API 被移动应用程序使用,因此我正在尝试实现 密码授予令牌。我已经创建了一个密码授予客户端,以及令牌请求过程......
$response = $http->post('http://my-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'my@email.com',
'password' => 'my-password',
'scope' => '',
],
]);
...按预期工作,为我的一位用户返回 access-token 和 refresh-token。
但是现在我想定义一些范围,这样我就可以限制用户的访问...再次按照文档,我在 AuthServiceProvider.php 的 boot 方法中定义了它们 em> 喜欢:
Passport::tokensCan([
'admin' => 'Perform every action',
'user' => 'Perform only normal user actions',
]);
在这种情况下,如果“恶意”普通用户请求一个指定'scope' => 'admin' 的令牌(使用上述 POST 调用),他或她将获得一个“管理员”令牌......这不是我想要的。
因此,我想知道这种情况下的工作流程如何有效地限制对普通用户的访问,以及我必须在哪里实现 范围验证逻辑.
提前致谢。
【问题讨论】:
-
没人知道吗?
-
我对此也有同样的担忧。关于:blogs.oracle.com/OracleIDM/entry/… 请求的范围可以或应该被授权与令牌绑定,以便没有用户可以访问范围:“*”只是默认令牌请求。我很期待看到答案。我也想知道,为什么通过护照授予访问权限不提供这种功能。也许我们正在考虑这种错误的方式?
-
这看起来是一种聪明的做法 :) 但这里的关键是不要在每个 'oauth/token 中公开 client_id 和 client_secret ' 称呼。因此,调用 'api/login' 路由只需要用户名/密码,并且 'oauth/token' 路由总是安全的 :)
标签: php laravel oauth-2.0 laravel-5.3 laravel-passport