【发布时间】:2018-06-19 08:04:54
【问题描述】:
我想通过 angularjs 构建一个水疗中心,并使用 laravel 作为水疗中心的 api。通过阅读 laravel 护照的文档,我发现我需要为此目的使用隐式授权。但我不确定它应该如何从前到后工作。我只想能够使用用户名和密码登录用户,然后使用它,我需要对该过程进行一些说明。这就是我想要的:
- 使用用户名和密码通过 html/javascript 通过 ajax 请求登录到 laravel (Angular)。
- 获取访问令牌以与 api 通信
- 在 spa 中执行一些操作,使用访问令牌触发对 api 的请求
- 从 api 获取数据以响应该请求。
但是我现在看到的隐式授权与我所期望的有点不同。
- 通过默认刀片登录表单登录 laravel(尚未使用 ajax 创建表单)
-
像这样重定向到 oauth/autorize
Route::get('/redirect', function () { $query = http_build_query([ 'client_id' => 'client-id', 'response_type' => 'token', 'scope' => '', ]); return redirect('http://your-app.com/oauth/authorize?'.$query);});
重定向显示批准或拒绝授权请求屏幕(这不是我所期望的)
- 当我批准请求时,浏览器会将我重定向到在 oAuth 客户端数据库条目中指定的重定向 uri,并带有访问令牌。我应该可以。
更让我困惑的是,我似乎需要为每个 laravel 用户创建一个新客户端。我希望有 1 个代表我的水疗中心的 oauth 客户端可以访问 laravel 用户。你能澄清一下吗?
【问题讨论】:
-
- 我认为您应该使用密码授权类型,因为我们一直使用密码授权类型进行此类身份验证和授权。
-
但这会被认为是危险的,因为密码授予类型将返回一个刷新令牌,您需要将其安全地存储在客户端(浏览器)上。那是不可能的,对吧?
-
是的,你可以在客户端存储在cookies或storage中,你也可以返回自定义的东西。
-
不,你不能。因为如果您将其放入 cookie 或存储中,您计算机的其他用户可以根据需要检索刷新令牌并代表您采取行动。还有,如果我正确的话,另一个站点可能会读取您的 cookie 或本地存储并通过这种方式窃取您的刷新令牌所涉及的风险。简而言之:在客户端安全地存储刷新和访问令牌是不安全的。因此我认为,密码授予不是 SPA 的选项。
标签: laravel oauth-2.0 authorization