阅读(405) (10)

Laravel 8 将授权码转换为访问令牌

2021-07-09 12:59:38 更新

如果用户批准授权请求,他们将被重定向回接入的应用程序。就像授权码许可规定的那样,接入方应首先根据重定向之前存储的值验证 state 参数。

如果 state 参数匹配,接入方应该向你的应用程序发出一个 POST 请求来获得访问令牌。该请求应该包含用户批准授权时从你的应用程序颁发的授权码和之前生成的 code verifier:

Route::get('/callback', function (Request $request) {
    $state = $request->session()->pull('state');

    $codeVerifier = $request->session()->pull('code_verifier');

    throw_unless(
        strlen($state) > 0 && $state === $request->state,
        InvalidArgumentException::class
    );

    $response = (new GuzzleHttp\Client)->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => 'client-id',
            'redirect_uri' => 'http://example.com/callback',
            'code_verifier' => $codeVerifier,
            'code' => $request->code,
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});