我正在将Identityserver4与使用隐式流的Angular SPA应用程序配合使用。 现在,我的要求是从其登录的所有位置注销用户(或至少撤消令牌)。这在用户凭证或令牌被盗用或允许管理员撤消某些用户的访问权限时将非常有用。用户。
当前,我可以将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登录页面。
它仅重定向到已登录浏览器的登录页面。它不适用于所有设备/浏览器。