Laravel Passport 密码授予刷新令牌
Laravel Passport Password Grant Refresh Token
尝试在移动客户端上使用 Laravel 的 Passport。密码授予类型的身份验证似乎是可行的方法,我已经将它与我的 iOS 应用程序一起使用,但是我无法让令牌刷新工作。
进行身份验证时,我得到一个 token
和一个 refresh token
我存储的,但是当令牌过期时,调用 oauth/token/refresh
路由不起作用。该路由正在使用 web
中间件,这意味着我使用 api 路由的应用无法访问它。我不确定他们是否打算让移动客户端永不刷新,或者他们是否希望您自己进行刷新?如果有人知道这是如何工作的,那就太好了。
oauth/token/refresh
路由不用于刷新访问令牌。它用于刷新临时令牌,当您从 javascript.
消耗自己的 API 时使用这些令牌
要使用您的 refresh_token
刷新您的访问令牌,您需要使用 refresh_token
的 grant_type
调用 oauth/token
路由。
这是the documentation提供的例子:
$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);
关于范围的注意事项,当您刷新令牌时,您只能获得与原始访问令牌相同或更窄的范围。如果您尝试获取原始访问令牌未提供的范围,则会出现错误。
我做过类似的事情。
- 为授予刷新令牌创建了端点。
在我的控制器中,
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);
}
尝试在移动客户端上使用 Laravel 的 Passport。密码授予类型的身份验证似乎是可行的方法,我已经将它与我的 iOS 应用程序一起使用,但是我无法让令牌刷新工作。
进行身份验证时,我得到一个 token
和一个 refresh token
我存储的,但是当令牌过期时,调用 oauth/token/refresh
路由不起作用。该路由正在使用 web
中间件,这意味着我使用 api 路由的应用无法访问它。我不确定他们是否打算让移动客户端永不刷新,或者他们是否希望您自己进行刷新?如果有人知道这是如何工作的,那就太好了。
oauth/token/refresh
路由不用于刷新访问令牌。它用于刷新临时令牌,当您从 javascript.
要使用您的 refresh_token
刷新您的访问令牌,您需要使用 refresh_token
的 grant_type
调用 oauth/token
路由。
这是the documentation提供的例子:
$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);
关于范围的注意事项,当您刷新令牌时,您只能获得与原始访问令牌相同或更窄的范围。如果您尝试获取原始访问令牌未提供的范围,则会出现错误。
我做过类似的事情。
- 为授予刷新令牌创建了端点。
在我的控制器中,
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);
}