【问题标题】:How to get an authorization code from the Authorization Code Grant in Laravel Passport?如何从 Laravel Passport 中的授权码授予中获取授权码?
【发布时间】:2020-02-26 17:56:06
【问题描述】:

我正在尝试使用授权代码授权来登录第三方客户端并授予对我的 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 发出请求,我会收到如下所示的错误响应。

Unsupported grant type

【问题讨论】:

    标签: php laravel oauth oauth-2.0 laravel-passport


    【解决方案1】:

    您在第 1 步中发送的请求不起作用,因为这不是 oauth 流程的工作方式。您实施的流程是一个 3 步过程,用户在浏览器或应用程序中完成以登录到您的应用程序并请求允许他们来自的应用程序或站点代表他们访问您的 api。通过邮递员发布请求发出请求,您将无法访问登录流程,因此它会尝试为已通过身份验证的用户(没有人)返回密钥,因此 $user->getKey() 不起作用,因为 $user 为空.

    第二个错误

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

    1. 第三方应用程序将用户重定向到您的服务器进行登录,并通过回调 url 重定向回

    2. 用户登录后,您的应用会将他们重定向回第三方站点,并传回第三方应用用于请求访问令牌的授权代码。

    3. 第三方应用程序使用他们在 2 中返回的授权代码向/oauth/token 发出请求并请求实际的访问令牌,然后他们可以使用该令牌代表用户访问您的 API。

    因此,您对 /oauth/authorize 的 Postman 调用因类型不受支持而失败的原因是您正试图对第 2 步的 URL 执行第 3 步。您需要在第 2 步中获取授权码,然后发出请求到/oauth/token 获取访问令牌。

    如果您尝试向第三方应用程序提供用户身份验证,那么您需要通过浏览器实现此流程,以便用户有机会通过您的服务器登录。在这种情况下,您的代码 sn-p 中的“redirect_uri”必须是您从请求中接受的东西,而不是硬编码的东西,因为该 URL 是用户在通过您的应用程序进行身份验证后将被重定向回的位置。获得授权代码后,您可以在后台进行 REST 调用以获取实际的访问令牌。

    如果您尝试纯粹基于 REST/API 调用进行身份验证,那么您必须使用不同的授权类型,很可能是 client credentials grants

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 2020-04-28
      • 2018-10-25
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2022-08-16
      • 2019-03-21
      相关资源
      最近更新 更多