Проблема с токеном обновления Identity Server 3 при развертывании в Azure

У меня есть экземпляр Thinktecture Identity Server v3 в Azure, размещенный как WebApp. В целом, он работает должным образом, но у меня возникают некоторые проблемы при попытке использовать токен обновления через конечную точку identity / connect / token токена с типом предоставления refresh_token. У меня есть клиент, который использует поток кода авторизации, и это настройки, связанные с параметрами токена обновления для этого клиента:

// refresh token options
AccessTokenType = AccessTokenType.Jwt,
AccessTokenLifetime = 3600,
RefreshTokenUsage = TokenUsage.OneTimeOnly, // Every time generates new refresh token. Not only access token.
RefreshTokenExpiration = TokenExpiration.Sliding,
SlidingRefreshTokenLifetime = 1296000

для людей, которые работали с этим, ясно, что я использую токены JWT, и мой токен доступа действителен в течение 1 часа, а после этого, без необходимости повторного входа на сервер идентификации, я могу использовать токен обновления и получить новые токены доступа и обновления . Мой токен обновления должен быть действителен в течение 15 дней (1296000 секунд). На самом деле происходит то, что он работает не так, как ожидалось. По какой-то причине, когда я решаю позвонить своему REST API (проверяющей стороне Identity Server) через полтора часа после предыдущего, я получаю ответ invalid_grant.

Я решил немного протестировать его и сделал мой токен доступа истекающим через 2 минуты, а мой токен обновления через 10. Ну, затем я попытался сделать вызов через 1, 2, 3 ... минуты после истечения срока действия токена доступа, и он работал как положено. Я действительно не хочу проводить такого рода тестирование с 1-часовым токеном доступа, поэтому я решил спросить здесь, проходил ли кто-нибудь это раньше.


person user2128702    schedule 01.12.2016    source источник


Ответы (1)


Срок действия вашего токена доступа составляет 1 час, а срок действия токена обновления - 15 дней.

Токен, который вы используете при вызове API, - это токен доступа. Мне кажется нормальным, что вы получаете сообщение об ошибке, если звоните через 90 минут после последнего обновления токена доступа. В этом случае перед вызовом API вы должны проверить, действителен ли токен доступа, и, если нет, обновить его.

Что касается вашего тестирования, в стеке _ 1_ отвечает за проверку токена. По умолчанию параметры валидации позволяют несоответствие 5 минут, чтобы учесть различия во времени между системами. Изменение TokenValidationParameters.DefaultClockSkew на меньшее значение должно помочь в вашем случае.

person Mickaël Derriey    schedule 15.12.2016
comment
Я знаю на клиенте, когда истек срок действия моего токена доступа. Вот почему я использую свой токен обновления, чтобы получить новый токен доступа и использовать его. Я вызываю конечную точку токена обновления, но по какой-то причине этот подход в какой-то момент перестает работать. - person user2128702; 15.12.2016
comment
Что перестает работать? Нажатие на конечную точку токена на IdSrv с вашим текущим токеном обновления, чтобы получить как новый токен доступа, так и новый токен обновления? Или попадете в API своим токеном доступа? - person Mickaël Derriey; 15.12.2016
comment
Да, вызов конечной точки токена возвращает ошибку invalid_grant. Он больше не распознает мой токен обновления. - person user2128702; 16.12.2016
comment
В журналах написано что-нибудь полезное? Когда вы добавляете конечную точку токена с помощью токена обновления, вы заменяете его новым, который IdSrv отправляет с токеном доступа? - person Mickaël Derriey; 16.12.2016
comment
Да, я заменяю и токен обновления, и токен доступа при вызове IdSrv. Что касается логов, то там ничего особо полезного. - person user2128702; 19.12.2016
comment
Но, как вы можете видеть в моем сообщении, я не использую свойство AbsoluteRefreshTokenLifetime. - person user2128702; 21.12.2016