如何解决Microsoft SSO OpenID-强制注销
当前将旧的MVC.NET v3应用程序升级到v5,同时从窗体身份验证切换到Microsoft的SSO解决方案。我们希望保留的要求是,如果用户闲置30分钟,则由于该应用程序中显示的机密信息,就像银行应用程序一样,强制注销。我们已经在旧版应用程序中成功实现了此功能,但是我在退出机制上遇到了麻烦。
public void SignOut()
{
HttpContext.GetOwinContext().Authentication.SignOut(
OpenIdConnectAuthenticationDefaults.AuthenticationType,CookieAuthenticationDefaults.AuthenticationType);
}
当用户单击“退出”按钮时,无需更改任何内容-它将重定向到Microsoft的帐户选择器以选择要注销的帐户-即使只有一个选择。但是,如果用户单击“后退”按钮,则他们将返回到应用程序中,该应用程序允许授权用户查看机密信息。我需要强行退出当前帐户以防止这种情况,但我不知道如何解决。
我尝试过:
- 清除cookie。失败,因为如果坏演员再次单击登录,则当前会话会记住他并自动将其重新登录。
- 覆盖HttpContext.User-看起来不错。但是再次单击登录将自动刷新旧会话,因为令牌提供者会记住状态。
我该怎么做?
谢谢
解决方法
我发现此链接允许OWIN使用会话变量: Can OWIN middleware use the http session?
您需要查看以下链接,以允许系统Web Cookie与OWIN一起使用: ASP.NET_SessionId + OWIN Cookies do not send to browser
我创建了另一个方法来注销用户并创建会话变量。
public void ForceSignOut()
{
SignOut();
HttpContext.Session.Add("IsSignoutRequested",true);
}
如果用户单击“后退”按钮并返回到应用程序,我会强制将其重定向回挑战。
在启动类中,我设置了PostLogoutRedirectUri
,这使我可以在成功注销后创建另一种方法来放弃会话。
public ActionResult CompleteSignOut()
{
Session.Abandon();
Request.GetOwinContext().Authentication.SignOut();
Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
this.HttpContext.GetOwinContext().Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);
return new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "User",action = "Index"
}));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。