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

时间:2008-09-10 23:44:04

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

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

4 个答案:

答案 0 :(得分:5)

您要做的事情称为单点登录和单点登录。根据您设置应用程序的方式存在差异。我将尝试澄清这些差异发挥作用的地方。

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

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

接下来,您需要添加机器密钥,它们在所有应用程序之间必须相同。

<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);
}

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

答案 1 :(得分:0)

如果您拥有适用于所有应用程序的中央会话存储,可能会更容易。然后,您可以在一个位置将会话设置为null。

答案 2 :(得分:0)

这对我有用:

在Logout事件中,不使用FormsAuthentication.GetAuthCookie方法,而是在Request对象中使用Cookies集合,如下所示:

HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName);
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);

当然,这需要您知道您希望用户注销的网站的Cookie名称 - 如果您在所有网络应用中使用相同的Cookie,则不会出现问题。

答案 3 :(得分:0)

我更喜欢使用web.config

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>