Насколько мне известно, ASOS "из коробки" поддерживает токены обновления. Чтобы получить токен обновления, мне нужно добавить область offline_access
к моему запросу токена. Но где они хранятся? Как я могу изменить срок действия токена или удалить его? Как я могу определить, для какого пользователя создан токен обновления?
AspNet.Security.OpenIdConnect.Server. Обновить токены
Ответы (1)
Но где они хранятся?
По умолчанию они нигде не хранятся: они самодостаточны. Пока ключи шифрования, используемые для защиты токенов обновления, все еще находятся в кольце ключей защиты данных ASP.NET, они могут быть расшифрованы ASOS и использованы для выпуска новых токенов доступа.
Как я могу изменить срок действия токена?
Срок действия по умолчанию может быть установлен глобально из опций с помощью свойства RefreshTokenLifetime
. Если вы не укажете свой срок жизни, они действительны в течение 14 дней.
Обратите внимание, что скользящее истечение срока действия также включено по умолчанию, что означает, что вы получаете новый токен обновления (действительный в течение 14 дней) каждый раз, когда делаете новый grant_type=refresh_token
запрос. Вы можете отключить скользящее истечение срока, установив UseSlidingExpiration
на false
.
... или удалить?
Поскольку токены обновления являются самодостаточными, вы не можете их удалить. Вы, конечно, можете рассмотреть возможность использования пользовательских токенов (например, уникальных строк, соответствующих записи в базе данных), переопределив события SerializeRefreshToken
и DeserializeRefreshToken
, но рекомендуемый подход состоит в том, чтобы просто рассматривать их как недействительные при получении запроса токена обновления.
Для этого вы можете переопределить событие HandleTokenRequest
и вызвать context.Reject()
, если считаете, что refresh_token
было отозвано и не может использоваться для выпуска новых токенов.
Как я могу определить, для какого пользователя создан токен обновления?
Маркеры обновления содержат все утверждения, которые вы добавляете при создании исходного билета аутентификации, поэтому, если вы добавите утверждение sub
, соответствующее идентификатору пользователя, вы можете использовать его для получения профиля пользователя из базы данных.
GrantRefreshTokenGrant
, и я буду очень рад, если вы покажете мне, как я могу забанить пользователя. Что такое manager.SupportsUserSecurityStamp
? Как я могу это использовать? На самом деле мне нужно дать пользователям токены и немедленно аннулировать токены (немедленно заблокировать пользователей).
- person Stalso; 02.03.2016
GrantRefreshTokenGrant
, чтобы добавить свою собственную логику, чтобы определить, действителен ли токен обновления. Вы можете позвонить context.Rejected()
, чтобы отклонить запрос на обновление токена, если пользователь заблокирован.
- person Kévin Chalet; 02.03.2016
Banned
в мою пользовательскую модель и проверить его в GrantRefreshTokenGrant
, а затем отклонить токен? Если я воспользуюсь таким подходом, я не смогу сразу заблокировать пользователя или добавить новые претензии. Есть ли способ проверять токены доступа для каждого запроса? Может в AuthorizationEndpoint
это сделать?
- person Stalso; 02.03.2016
app.UseJwtBearerAuthentication()
), поскольку это место, где токены доступа проверяются стеком.
- person Kévin Chalet; 02.03.2016
app.UseJwtBearerAuthentication()
. Вы можете посоветовать, где это делать?
- person Stalso; 02.03.2016
ValidatedToken
, чтобы добавить свою собственную процедуру проверки: github.com/aspnet/Security/blob/1.0.0-rc1/src/ . В качестве альтернативы вы также можете добавить проверку блокировки непосредственно на уровне авторизации в настраиваемой политике авторизации.
- person Kévin Chalet; 02.03.2016