Laravel Passport密码授予刷新令牌

Chr*_*ris 7 php authentication ios laravel laravel-passport

尝试使用Laravel的Passport与移动客户端相处.密码授权类型的身份验证似乎是要走的路,我让它与我的iOS应用程序一起工作,但是我无法让令牌刷新工作.

在进行身份验证时,我会获得一个tokenrefresh token我存储的内容,但是当令牌过期时,调用该oauth/token/refresh路由不起作用.该路由使用web中间件,这意味着我的app使用api路由无法访问它.我不确定他们是否打算让移动客户永远不刷新,或者他们是否希望你自己刷新?如果有人了解这应该如何工作,那就太好了.

pat*_*cus 14

oauth/token/refresh路由不用于刷新访问令牌.它用于刷新瞬态令牌,当您从JavaScript使用自己的API时使用.

要使用您refresh_token刷新访问令牌,您需要oauth/token使用grant_typeof 来调用路由refresh_token.

这是文档提供的示例:

$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'refresh_token',
        'refresh_token' => 'the-refresh-token',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'scope' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);
Run Code Online (Sandbox Code Playgroud)

关于范围的一个注释,当您刷新令牌时,您只能获得与原始访问令牌相同或更窄的范围.如果您尝试获取原始访问令牌未提供的作用域,则会出现错误.


Usa*_*nir 5

我做过类似的事情。

  1. 创建了授予刷新令牌的端点。

在我的控制器中,

public function userRefreshToken(Request $request)
{
    $client = DB::table('oauth_clients')
        ->where('password_client', true)
        ->first();

    $data = [
        'grant_type' => 'refresh_token',
        'refresh_token' => $request->refresh_token,
        'client_id' => $client->id,
        'client_secret' => $client->secret,
        'scope' => ''
    ];
    $request = Request::create('/oauth/token', 'POST', $data);
    $content = json_decode(app()->handle($request)->getContent());

    return response()->json([
        'error' => false,
        'data' => [
            'meta' => [
                'token' => $content->access_token,
                'refresh_token' => $content->refresh_token,
                'type' => 'Bearer'
            ]
        ]
    ], Response::HTTP_OK);
}
Run Code Online (Sandbox Code Playgroud)