首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Laravel的授权代码授权中获取授权代码?

如何从Laravel的授权代码授权中获取授权代码?
EN

Stack Overflow用户
提问于 2019-10-31 11:18:28
回答 1查看 3.3K关注 0票数 3

我正在尝试使用授权代码授权来登录第三方客户端并访问我的API。第一步是使用所需的参数请求/oauth/authorize的权限。当我这样做时,我会得到一个错误响应,上面写着“调用null上的成员函数getKey()”。我注意到即使没有参数,也会出现同样的错误。

授权代码授予许可请求

这是我的web.php中处理/redirect路由的代码。

代码语言:javascript
复制
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发出请求,我将得到如下所示的错误响应。

不支持的赠款类型

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-31 14:10:55

您在步骤1中发送的请求不起作用,因为oauth流不是这样工作的。您的实现流程是一个3步流程,用户可以在浏览器或应用程序中完成该流程,以登录到您的应用程序,并请求允许他们来自的应用程序或站点代表他们访问您的api。通过通过postman post请求进行请求,您无法访问登录流,因此它试图为已经创建的用户(没有人)返回一个键,因此$user->getKey()无法工作,因为$user为null。

对于第二个错误

/oauth/authorize不接受该授予类型,因为它不返回授权。oauth登录流有3个步骤

  1. 第三方应用程序将用户重定向到您的服务器以登录,并传递要重定向回的回调url。
  2. 用户登录后,应用程序将其重定向回第三方站点,将第三方应用程序用于请求访问令牌的授权代码传回。
  3. 第三方应用程序使用他们在2中获得的授权代码向/oauth/token发出请求并请求一个实际的访问令牌,然后他们可以使用该令牌代表用户访问您的API。

因此,您的邮递员调用/oauth/authorize失败的原因是,您试图在步骤2的URL上执行步骤3。您需要在步骤2中获得授权代码,然后向/oauth/token发出请求以获得访问令牌。

如果您试图向第三方应用程序提供用户身份验证,那么您需要通过浏览器实现这个流程,这样用户就有机会通过您的服务器登录。在这种情况下,代码段中的“redirect_uri”必须是从请求中获取的东西,而不是硬编码的东西,因为在通过应用程序进行身份验证后,用户将被重定向到那里。一旦有了auth代码,就可以在幕后进行REST调用,以获得实际的访问令牌。

如果您试图完全在REST/API调用上进行身份验证,那么您必须使用不同的授予类型,很可能是客户凭据授予

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58642227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档