重置Cookie并使用ASP.NET Core Identity强制重新登录
本文探讨了在使用Duende Identity Server联合Entra ID的ASP.NET Core应用程序中实现Cookie重置的方法。有时由于Cookie大小问题或未知的远程认证服务器错误,需要为最终用户重置Cookie。可以清除Cookie并强制重新登录。
代码:https://github.com/damienbod/DuendeProfileServiceAspNetCoreIdentity
设置
ASP.NET Core Web应用程序设置为使用通过ASP.NET Core Identity和Duende IdentityServer实现的身份服务器进行身份验证。身份提供程序使用OpenID Connect联合到Entra ID。在我们的用例中,Microsoft帐户作为访客被邀请到Entra ID租户中,并使用login.live.com对Microsoft帐户用户进行身份验证。我们希望为两个ASP.NET Core应用程序提供Cookie重置功能,并强制重新登录流程。用户可能仍在Entra ID或Live中通过身份验证,系统将自动重新对用户进行身份验证。这只是清理应用程序中的Cookie。如果需要注销,可以使用带有正确所需方案的标准SignOut方法。
重置
使用ASP.NET Core Razor Page发送Cookie重置POST请求。
|
|
POST请求删除身份提供程序应用程序的所有Cookie,并使用HTTP重定向重定向到OpenID Connect客户端。
|
|
HTTP GET重定向删除OpenID Connect客户端应用程序上的所有Cookie,并重定向到需要已认证用户的默认页面。默认的质询机制启动并开始身份验证流程。如果用户在Entra ID上已通过身份验证,系统将静默重新验证身份。
|
|
处理远程错误
Cookie重置可用于处理未知的OpenID Connect远程身份验证错误,这些错误有时会因未知原因失败,用户不重置本地Cookie无法恢复。
|
|
注意事项
通常这不应该需要。如果需要注销,应使用默认的注销逻辑。此逻辑仅用于本地重置,不会注销用户。也不建议在HTTP GET上更改状态,但这是使其工作所必需的。
为什么不直接注销?
使用SignOut方法是注销ASP.NET Core应用程序的正确方式。使用不同的方案,可以注销每个方案。从浏览器中删除Cookie不会注销用户。这只是清理本地Cookie及其后面保存的内容。
关于缓存?
如果会话存储在服务器会话或服务器缓存中,那么您需要清理这些内容,而不仅仅是Cookie。
外部身份提供程序会发生什么?
我们无法直接控制这一点,也无法控制此处的会话。要删除会话,您需要向OpenID Connect服务器发送endsession请求。
链接
- https://docs.duendesoftware.com/identityserver/reference/services/profile-service
- https://duendesoftware.com/products/identityserver
- https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity
- https://learn.microsoft.com/en-us/aspnet/core/security/authentication/claims
- https://github.com/damienbod/MulitipleClientClaimsMapping
- https://learn.microsoft.com/en-us/aspnet/core/security/authentication/social/