laravel 护照授权码授予 PKCE 需要范围

laravel passport authorization code grant PKCE requires scope

我正在尝试使用 Laravel Passport 和我的 SPA 应用程序实现授权码授予。我偶然发现了以下问题:

据我所知,OAuth 中的范围是可选的,我在请求代码时不必请求范围。甚至 HERE 它说范围是可选的。

事情是这样的:

/oauth/authorize?client_id=5&redirect_uri=http://localhost:3000/auth&response_type=code&scope=''&state=hdeqcsaeol7z8569pyl2gmrvl8bdaun4gjxhs78u&code_challenge=LuiQWey7K8Uu1w5Xj0vqOinf0YpXEaYK374PLnelh80=&code_challenge_method=S256 
/auth?error=invalid_scope&error_description=The%20requested%20scope%20is%20invalid,%20unknown,%20or%20malformed&hint=Check%20the%20%60%26%23039%3B%26%23039%3B%60%20scope&message=The%20requested%20scope%20is%20invalid,%20unknown,%20or%20malformed
{"error":"invalid_request","error_description":"The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.","hint":"Code challenge must follow the specifications of RFC-7636.","message":"The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed."}

所以问题是我不想使用范围,我不需要它们我只是想获得一些默认范围或 none。

我想我可以定义一个,但这对我来说似乎不合适。它应该是可选的。

这就是我为该流程创建所有代码的方式:

有人知道这是怎么回事吗?

此致, 罗布

在你的 URL 中有 scope=''& 而不是 scope=&

尝试使用 http_build_query() 作为 per docs 构建查询参数。

$query = http_build_query([
    'client_id' => 'client-id',
    'redirect_uri' => 'http://third-party-app.com/callback',
    'response_type' => 'code',
    'scope' => '',
    'state' => $state,
    'code_challenge' => $codeChallenge,
    'code_challenge_method' => 'S256',
]);

其次,您的 code_challenge= 结尾。

所以你可能应该:

  • 去掉this.challenge
  • 末尾的=
  • +替换为this.challenge-
  • /替换为this.challenge_

PHP 例子

$encoded = base64_encode(hash('sha256', $code_verifier, true));

$codeChallenge = strtr(rtrim($encoded, '='), '+/', '-_');

据我所知,您可以将作用域硬编码为“*”,这应该可行,我也这样做了。