refresh_token работает только один раз - PullRequest
0 голосов
/ 17 декабря 2018

Я ломаю голову над этим.

Использование JdbcTokenStore:

Я могу войти в систему и получить access_token, а также refresh_token с конечной точки oauth/token.Веб-клиент хранит оба токена.После истечения срока действия access_token и отправки HTTP 401 клиент пытается получить новый access_token, представляя refresh_token.

. Новые access_token и refresh_token снова сохраняются.на стороне клиента.

Однако во второй раз, когда это делается, я получаю ошибку invalid_grant, сообщающую, что refresh_token будет неправильным.

Это журнал:

2018-12-17T20:24:42.193Z INFO [main.js:1033] Login success.

...

ngx-logger.js:250 2018-12-17T20:24:42.195Z INFO [main.js:1034] {
  "access_token": .72UGm5604uDyuY0eDSKE3s_Wr9GzhOFyYMsWoYKxdGs",
  "token_type": "bearer",
  "refresh_token": .5tucDhuMJciUufeosI-FG1lO5WaWQCq9_7G7kDPGmMc",
  "expires_in": 4,
  "scope": "read write",
  "jti": "495c03d9-c19d-4239-9d94-9e96c49844f5"
}
ngx-logger.js:256 2018-12-17T20:24:42.198Z DEBUG [main.js:748] User is logged in.!


...

ngx-logger.js:250 2018-12-17T20:24:54.438Z INFO [main.js:843] Handling 401 error
ngx-logger.js:250 2018-12-17T20:24:54.441Z INFO [main.js:845] Refreshing access token
ngx-logger.js:250 2018-12-17T20:24:54.443Z INFO [main.js:1044] Attempting to refresh access token
ngx-logger.js:250 2018-12-17T20:24:54.446Z INFO [main.js:1045] refresh_token: .5tucDhuMJciUufeosI-FG1lO5WaWQCq9_7G7kDPGmMc

...

ngx-logger.js:250 2018-12-17T20:24:54.643Z INFO [main.js:854] Access token refreshed.
ngx-logger.js:250 2018-12-17T20:24:54.651Z INFO [main.js:855] {
  "access_token": .gets297iCBDdNNK2C29PBTxRP1VdM9ok3ilo1g5Ow0A",
  "token_type": "bearer",
  "refresh_token": .NcJQOWDDo1q474LzvCeh37BjCn14I3E6e03JuWO208Y",
  "expires_in": 4,
  "scope": "read write",
  "jti": "0fa0c63e-2027-4780-9ce3-501608cdaee5"
}

... 

ngx-logger.js:247 2018-12-17T20:25:13.162Z ERROR [main.js:863] {
  "headers": {
    "normalizedNames": {},
    "lazyUpdate": null
  },
  "status": 400,
  "statusText": "OK",
  "url": "https://192.168.1.144:8443/oauth/token",
  "ok": false,
  "name": "HttpErrorResponse",
  "message": "Http failure response for https://192.168.1.144:8443/oauth/token: 400 OK",
  "error": {
    "error": "invalid_grant",
    "error_description": "Invalid refresh token: .NcJQOWDDo1q474LzvCeh37BjCn14I3E6e03JuWO208Y"
  }
}

Я понятия не имею, в чем здесь проблема.Я что-то пропустил?

1 Ответ

0 голосов
/ 18 декабря 2018

Оказывается, мне пришлось установить TokenEnhancerChain на , а не повторно использовать токены обновления.Это очевидно true по умолчанию, потому что именно поэтому мы используем refresh_tokens - они должны вести себя так же, как access_tokens (Если вы сейчас запутались: это был сарказм - я понятия не имею , почему по умолчанию будетбыть true, и я был бы рад, если бы кто-то мог уточнить это).

В любом случае.В вашей конфигурации вы хотите установить (что-то вроде):

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
    enhancerChain.setTokenEnhancers(Collections.singletonList(accessTokenConverter));
    endpoints.tokenStore(tokenStore)
            .accessTokenConverter(accessTokenConverter)
            .tokenEnhancer(enhancerChain)
            .reuseRefreshTokens(false)  // <-------------- Set to false
            .authenticationManager(authenticationManager);
}

Связанные проблемы на github: # 867

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...