【发布时间】:2021-06-08 03:51:54
【问题描述】:
情况
我必须处理使用 ASP.Net Identity (2.2.3) 的 MVC5 应用程序。在CookieAuthenticationProvider 的OnValidateIdentity 回调中,我不时检查(时间跨度是可配置的)用户的配置是否已更改,因此必须更新用户的身份(IIdentity)。要将更新后的身份(及其更改后的声明)写回用户的 cookie,我在 IAuthenticationManager 上调用 SignIn 并为其提供更新后的身份:
context.OwinContext.Authentication.SignIn(context.Properties, refreshedIdentity);
问题
一般来说,这很好用。但是,如果用户尝试在也用于更新身份的请求中注销,它会与注销混淆。
当使用基于简单密码的 cookie 身份验证时,结果是,我必须在注销操作中调用IAuthenticationManager.SignOut 操作,提供如下显式身份验证类型:
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie)
无参数SignOut-Operation 不再起作用。看看实现的 ms 源代码,我想,我明白了,为什么会这样,我可以完美地忍受它。
但是,如果我通过 IAppBuilder.UseWsFederationAuthentication() (Microsoft.Owin.Security.WsFederation 4.1.1) 激活了 WS Federation,则副作用会更加严重。每个尝试注销用户并更新同一请求中的身份(更新发生在注销之前)的请求都会导致 IDP 上的已注销用户,但是,仍然是登录用户在本地系统。我还没有找到规避这种行为的方法。
作为附加信息,ResponseSignOut 及其回调也永远不会在 CookieAuthenticationProvider 上调用,如果所描述的星座发生。
我尝试了各种其他方式来更新身份及其声明(例如,之前调用 SignOut、使用 ReplaceIdentity 等),但是我没有找到任何可行的方法。在互联网上搜索,似乎普遍认为,通过IAuthenticationManager.SignIn 重新登录是要走的路,更新用户 cookie 中的身份信息。
有没有人遇到过同样的问题并找到了解决方案或有任何想法,如何防止这种对 ws 联邦(或一般)的副作用发生?
【问题讨论】:
标签: asp.net asp.net-identity ws-federation