单点登录&注销ASP.NET中的问题

时间:2010-07-01 06:21:37

标签: asp.net

使用单一登录的网站详情

1. http:\\webgate.abcltd.com
2. http:\\sales.abcltd.com
3. http:\\emp.abcltd.com

webgate应用程序执行身份验证和授权。其他(sales,emp)使用webgate应用程序。当任何人访问sales / emp网站的任何页面时,他们将被重定向到webgate的登录页面(这里我使用了表单身份验证。配置如下)

<authentication mode="Forms">
    <forms loginUrl="Login.aspx" 
           protection="All" 
           name="WebGateSecurity" 
           path="/" 
           domain="abcltd.com"
           defaultUrl="ApplicationList.aspx"
           enableCrossAppRedirects="true"/> 
</authentication> 
<authorization>   
<deny users="?" /> 
</authorization> 
<machineKey validationKey="2C0904BC344116CC6FFD3DD7087C942878C41B7F861555651E69C7B72F9A7DF6BC3B63BFF0F1438DFB863EE3EAC62CBFFECA7482D3758888E7CDACDBBAE136D5" decryptionKey="A60EC9E480CB3BBC48D1D2B7FFF9E945FBA46196AD3029187022ADE8F7B99B25" validation="SHA1" decryption="AES" />

针对数据存储验证用户凭据,并且正在创建身份验证票证/ cookie,如下所示

var authTicket=FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), false, userActions, FormsAuthentication.FormsCookiePath);
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(authCookie);

如果给定的凭据是正确的,我打算重定向到请求的URL,如下所示

if (Request.Params["ReturnURL"] == null || Request.Params["ReturnURL"].EndsWith("/Logout.aspx") || Request.Params["ReturnURL"].EndsWith("/Error.aspx"))
     Response.Redirect(FormsAuthentication.DefaultUrl);
else
{
     //Response.Redirect(FormsAuthentication.GetRedirectUrl(username, false));
      FormsAuthentication.RedirectFromLoginPage(username, false);
}

我使用了LoginStatus Control(放置在母版页面中),让用户可以从webgate应用程序执行登录/注销。当用户注销时,将执行以下代码以删除cookie。

protected void LoginStatus1_LoggingOut(object sender, LoginCancelEventArgs e)
{
    FormsAuthentication.SignOut();
    HttpCookie httpCookie = Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName];
    if (httpCookie != null)
    {
        httpCookie.Domain = "abcltd.com";
        httpCookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(httpCookie);
    }
}

其他应用程序(sales和emp)中的配置如下

<authentication mode="Forms">
  <forms loginUrl="http://webgate.abcltd.com/Login.aspx" name="WebGateSecurity" protection="All" path="/" domain="abcltd.com" />
</authentication>
<authorization>
  <deny users="?" />
</authorization>
<machineKey validationKey="2C0904BC344116CC6FFD3DD7087C942878C41B7F861555651E69C7B72F9A7DF6BC3B63BFF0F1438DFB863EE3EAC62CBFFECA7482D3758888E7CDACDBBAE136D5" decryptionKey="A60EC9E480CB3BBC48D1D2B7FFF9E945FBA46196AD3029187022ADE8F7B99B25" validation="SHA1" decryption="AES" />

我的问题是:退出无效。详情如果我说:退出后,我可以访问webgate,sales和emp应用程序中的任何页面。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

那是因为你在web.config中使用了不同的域名:

domain="vrxstudios.com"

domain="abcltd.com"

因此没有可能的单点登录。在您的退出方法中,您无法abcltd.com删除属于vrxstudios.com的Cookie:

if (httpCookie != null)
{
    httpCookie.Domain = "abcltd.com"; // this is not possible from vrxstudios.com
    httpCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(httpCookie);
}

您可以做的是重定向到abcltd.com上可以完成工作的退出页面。