asp.net - 如何注销多个 asp.net 应用程序?

标签 asp.net authentication forms-authentication asp.net-1.1

我有一个主要的 asp.net 应用程序,它是用 asp.net 1.1 编写的。该应用程序下面运行的是几个 2.0 应用程序。要完全注销用户,我可以使用 FormsAuthentication.SignOut 注销 1.1 应用程序还是比这更复杂?

最佳答案

您想要做的事情称为“单点登录”和“单点登录”。根据您设置应用程序的方式不同,存在差异。我将尽力澄清这些差异在哪里发挥作用。

要实现单点登录和单点注销,您需要使所有应用程序之间的 cookie 名称、保护和路径属性相同。

<authentication mode="Forms">
    <forms name=".cookiename"
           loginUrl="~/Login.aspx" 
           timeout="30" 
           path="/" />
</authentication>

接下来您需要添加机器 key ,并且所有应用程序之间的 key 必须相同。

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
            encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
            validation="SHA1" />

您的应用程序使用二级或三级域名吗?如果是这样,您需要做更多的事情,将域添加到 cookie:

protected void Login(string userName, string password)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(30);
    Response.AppendCookie(cookie);
}

现在要进行单点注销,调用 FormsAuthentication.SignOut 可能还不够。下一个最好的办法是将 cookie 过期时间设置为过去的日期。这将确保 cookie 不会再次用于身份验证。

protected void Logout(string userName)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(-1);
    Response.AppendCookie(cookie);
}

我考虑到您对所有应用程序使用相同的数据库。如果应用程序使用单独的数据库进行注册和身份验证,那么我们将需要做更多的事情。如果是这种情况,请告诉我。否则这应该适合你。

关于asp.net - 如何注销多个 asp.net 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55503/

相关文章:

reactjs - 使用 Oauth2、React、Node.js 和 Passport.js 通过 Google 登录按钮对用户进行身份验证的最佳实践是什么?

ReactJS 如何从获取请求到后端设置 Cookie

c# - 从本土表单例份验证转移到 AD 的策略是什么?

javascript - 在 javascript datepicker (asp.net) 中禁用过去的日期

asp.net - 如何在 ASP.NET 上启用/禁用日志记录

php - 我的登录无法正常工作,我不明白为什么? [请帮忙]

c# - 缺少 ASP.net MVC FormsAuthentication cookie

C# Forms Authentication .ASPXAUTH Cookie for SSO

asp.net - 通过在 DotNetNuke 布局编辑器上拖放来移动模块?

c# - 从字符串中获取第二次出现