我已经安装了 Laravel Passport。
这是我生成验证码的方法:
public function auth(Request $request)
{
$request->session()->put('state', $state = Str::random(40));
$request->session()->put(
'code_verifier', $code_verifier = Str::random(128)
);
$codeChallenge = strtr(rtrim(
base64_encode(hash('sha256', $code_verifier, true))
, '='), '+/', '-_');
$query = http_build_query([
'client_id' => '1',
'redirect_uri' => 'http://127.0.0.1:8000/authorize/response',
'response_type' => 'code',
'scope' => '',
'state' => $state,
'code_challenge' => $codeChallenge,
'code_challenge_method' => 'S256',
]);
return redirect('http://127.0.0.1:9000/oauth/authorize?'.$query);
}
以上请求都通过了。 这是我尝试生成访问令牌的方法:
public function authResponse(Request $request)
{
$state = $request->session()->pull('state');
throw_unless(
strlen($state) > 0 && $state === $request->state,
InvalidArgumentException::class
);
$response = Http::asForm()->post('http://127.0.0.1:9000/oauth/token', [
'grant_type' => 'authorization_code',
'client_id' => '1',
'client_secret' => 'hYMELQ1VKAWrG0TwrkM3JxUuoICSCWCzCztClZZi',
'redirect_uri' => 'http://127.0.0.1:8000/authorize/response',
'code' => $request->code,
]);
return $response->json();
}
当我执行生成访问令牌的代码时,出现以下错误:
<块引用>{"error":"invalid_client","error_description":"客户端认证 failed","message":"客户端认证失败"}
知道这个错误的原因是什么吗?我已从数据库中取出 client_secret
。
知道可能是什么问题以及如何解决吗?
答案 0 :(得分:0)
您没有从会话中提取 code_verifier
方法中的 authResponse()
。
$codeVerifier = $request->session()->pull('code_verifier');
然后在将授权代码转换为访问令牌时将 $codeVerifier
添加到 post 方法中的 'code_verifier'
。
$response = Http::asForm()->post('http://127.0.0.1:9000/oauth/token', [
'grant_type' => 'authorization_code',
'client_id' => '1',
'client_secret' => 'hYMELQ1VKAWrG0TwrkM3JxUuoICSCWCzCztClZZi',
'redirect_uri' => 'http://127.0.0.1:8000/authorize/response',
'code' => $request->code,
]);
查看关于此的 docs。