rob*_*oss 3 php oauth oauth-2.0 laravel laravel-passport
我正在尝试使用授权代码授予第三方客户端登录并授予对我的 API 的访问权限。第一步是使用所需的参数在 /oauth/authorize 请求权限。当我这样做时,我收到一条错误响应,显示“Call to a member function getKey() on null”。我注意到即使没有参数我也会遇到同样的错误。
这是我的 web.php 中处理 /redirect 路由的代码。
Route::get('/redirect', function (Request $request) {
$request->session()->put('state', $state = Str::random(40));
$query = http_build_query([
'client_id' => '6',
'redirect_uri' => 'http://127.0.0.1:8000/callback',
'response_type' => 'code',
'scope' => '',
'state' => $state,
]);
return redirect('http://127.0.0.1:8000/oauth/authorize?' . $query);
});
Run Code Online (Sandbox Code Playgroud)
如果我尝试直接向http://127.0.0.1:8000/oauth/authorize发出请求,我会收到如下所示的错误响应。
您在步骤 1 中发送的请求不起作用,因为这不是 oauth 流程的工作方式。您实现的流程是一个 3 步过程,用户在浏览器或应用程序中完成以登录您的应用程序,并请求允许他们来自的应用程序或网站代表他们访问您的 api。通过邮递员发布请求发出请求,您无法访问登录流程,因此它会尝试为已经经过身份验证的用户(没有人)返回密钥,因此$user->getKey()不起作用,因为$user为 null。
对于第二个错误
/oauth/authorize 不接受该授权类型,因为它不返回授权。oauth 登录流程有 3 个步骤
第三方应用程序将用户重定向到您的服务器进行登录,并传递回调 url 以重定向回
用户登录,您的应用程序将其重定向回第三方站点,并传回第三方应用程序用于请求访问令牌的授权代码。
第三方应用程序使用他们在 2 中返回的授权代码发出请求/oauth/token并请求实际的访问令牌,然后他们可以使用该令牌代表用户访问您的 API。
/oauth/authorize因此,您的 Postman 调用因类型不受支持而失败的原因是您尝试对步骤 2 的 URL 执行步骤 3。您需要在步骤 2 中获取授权代码,然后发出请求/oauth/token以获取访问令牌。
如果您尝试向第三方应用程序提供用户身份验证,那么您需要通过浏览器实现此流程,以便用户有机会通过您的服务器登录。在这种情况下,代码片段中的“redirect_uri”必须是您从请求中接受的内容,而不是硬编码的内容,因为该 URL 是用户在通过应用程序进行身份验证后将被重定向回的位置。获得授权码后,您可以在后台进行 REST 调用以获取实际的访问令牌。
如果您尝试纯粹在 REST/API 调用上进行身份验证,那么您必须使用不同的授予类型,很可能是客户端凭据授予
| 归档时间: |
|
| 查看次数: |
4379 次 |
| 最近记录: |