我正在尝试使用授权码授予来登录第三方客户端并授予对我的API的访问权限。第一步是在/ oauth / authorize处使用所需参数请求权限。当我这样做时,我收到一个错误响应,提示“在null上调用成员函数getKey()”。我注意到即使没有参数,我也会遇到同样的错误。
authorization code grant permission request
这是我的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);
});
如果我尝试直接向http://127.0.0.1:8000/oauth/authorize发送请求,则会收到如下所示的错误响应。
答案 0 :(得分:0)
您在第1步中发送的请求无效,因为这不是oauth流程的工作方式。您实施的流程是一个三步过程,用户在浏览器或应用程序中完成该过程以登录到您的应用程序,并请求允许其所来自的应用程序或网站代表他们访问您的api。通过邮递员发布请求提出请求,您将无法访问登录流程,因此它将尝试为已通过身份验证的用户(没有人)返回密钥,因此$user->getKey()
不起作用,因为{{1 }} 一片空白。
第二个错误
/ oauth / authorize不接受该授权类型,因为它不返回授权。 oauth登录流程分3个步骤
第三方应用程序将用户重定向到您的服务器以登录,并传递回调网址以重定向回
用户登录后,您的应用将他们重定向回第三方站点,并传回第三方应用用来请求访问令牌的授权代码。
第三方应用使用他们在2中返回的授权代码向$user
发出请求,并请求一个实际的访问令牌,然后他们可以用来代表用户访问您的API。
因此您的Postman呼叫/oauth/authorize
失败的原因是类型不受支持,原因是您尝试对步骤2的URL执行步骤3。您需要在步骤2中获得授权代码,然后进行向/oauth/authorize
请求以获取访问令牌。
如果您尝试向第三方应用程序提供用户身份验证,则需要通过浏览器实施此流程,以便用户有机会通过服务器登录。在这种情况下,您的代码段中的“ redirect_uri”必须是您从请求中接受的内容,而不是硬编码的内容,因为该URL是用户在对您的应用程序进行身份验证之后将重定向到的URL。获得身份验证代码后,您就可以在后台进行REST调用以获取实际的访问令牌。
如果您尝试仅通过REST / API调用进行身份验证,则必须使用其他授权类型,最有可能是client credentials grants