Я использую Identityserver4 с приложением Angular SPA, использующим Implicit Flow.Теперь мое требование состоит в том, чтобы выйти из системы пользователя (или, по крайней мере, отозвать токен) из всех расположений, в которые он вошел. Это будет полезно в случае, если учетные данные пользователя или токен были скомпрометированы, или разрешить администратору аннулировать доступ определенного пользователя.user.
В настоящее время я могу отозвать access_token как;
var subjectId = User?.Claims.Where(t => t.Type == "sub").FirstOrDefault().Value;
var userGrants = await _persistedGrantService.GetAllGrantsAsync(subjectId);
foreach (var item in userGrants)
{
var clientId = item.ClientId;
if (User?.Identity.IsAuthenticated == true)
{
var result = _persistedGrantService.RemoveAllGrantsAsync(subjectId, clientId);
await _interaction.RevokeUserConsentAsync(clientId);
if (result.IsCompletedSuccessfully)
// delete local authentication cookie
await HttpContext.SignOutAsync();
// raise the logout event
await _events.RaiseAsync(new UserLogoutSuccessEvent(User.GetSubjectId(), User.GetDisplayName()));
}
}
хорошо работает, чтобы отозвать токен доступа из всех зарегистрированных сеансов во всех браузерах, пока не истек срок действия access_token.по истечении срока действия access_token он получает новый токен от IDP.в этом случае я хочу перенаправить его на страницу входа IDP.
Перенаправляет на страницу входа только для зарегистрированных в браузере.это не работает через устройства / браузеры.