В настоящее время я реализую OAuth2 с помощью thephpleague/oauth2. Я уже добавил реестр токенов обновления, и ответ маркера доступа уже содержит токен обновления. Тем не менее, я не знаю, как использовать этот токен обновления, чтобы получить новый токен доступа.Получить токен доступа с помощью токена обновления
Я проверил документацию, но я ничего не вижу об этом. В библиотеке oauth2-client есть методы для этого, но я не буду использовать это.
Моего код для маркеров гранта обновления:
$server->setRefreshTokenStorage(new RefreshTokenStorage);
$refreshTokenGrant = new \League\OAuth2\Server\Grant\RefreshTokenGrant();
$authCodeGrant = new \League\OAuth2\Server\Grant\AuthCodeGrant();
$server->addGrantType($authCodeGrant);
$server->addGrantType($refreshTokenGrant);
$response = $server->issueAccessToken();
Моего вопрос, как я могу проверить, что с помощью токена обновления, я могу получить новый маркер доступа? Должен ли я реализовывать новую конечную точку, отличную от той, которая используется в разрешении кода авторизации?
Вот мой код для получения токена. Любые комментарии?
public function actionToken(){
$authCodeModel = new \app\models\OAuth_Auth_Codes;
if(!isset($_POST['code'])){
throw new \yii\web\HttpException(400,"Required parameter \'code\' is missing or invalid.");
}
$result = $authCodeModel->find()->where(['authorization_code' => trim($_POST['code'])])->one();
if(!empty($result)){
$user_id = $result->user_id;
$session2 = new Session();
$session2->open();
$server = new AuthorizationServer;
$server->setSessionStorage(new SessionStorage);
$server->setAccessTokenStorage(new AccessTokenStorage);
$server->setClientStorage(new ClientStorage);
$server->setScopeStorage(new ScopeStorage);
$server->setAuthCodeStorage(new AuthCodeStorage);
$server->setRefreshTokenStorage(new RefreshTokenStorage);
$refreshTokenGrant = new \League\OAuth2\Server\Grant\RefreshTokenGrant();
$authCodeGrant = new \League\OAuth2\Server\Grant\AuthCodeGrant();
$server->addGrantType($authCodeGrant);
$server->addGrantType($refreshTokenGrant);
$response = $server->issueAccessToken();
$model = new \app\models\OAuth_Access_Tokens();
$accessTokenModel = $model->find()->where(['access_token' => $response['access_token']])->one();
$accessTokenModel->setAttribute('user_id',''.$user_id);
$accessTokenModel->save(FALSE);
return json_encode($response);
}
else{
throw new \yii\web\UnauthorizedHttpException("You have provided an invalid authorization code.");
}
}
спасибо Ганса. В моей реализации конечная точка маркера была специально сделана для принятия типа разрешения кода авторизации. Я последовал примеру, приведенному в библиотеке. Есть ли пример принятия типа типа refresh_token. Мне интересно о части, где генерируется токен. В гранте authorization_code существует вызов метода issueToken(). – jackeblagare
, если вы имеете в виду код на стороне сервера, см. Edit –
Я отредактировал мой оригинальный вопрос. – jackeblagare