2010-07-01 45 views
2

網站的詳細信息,它使用的單點登錄,單點登錄和註銷問題在ASP.NET

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

webgate應用程序執行身份驗證和授權。其他人(sales,emp)使用webgate應用程序。當任何一個接入的銷售/ 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控件(放置在母版頁中)讓用戶從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); 
    } 
} 

配置在其他應用程序(銷售和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

那是因爲你在web.config中使用不同的域名:上可能

domain="vrxstudios.com" 

domain="abcltd.com" 

所以沒有單點登錄。在你的星座了方法,你不能vrxstudios.com刪除上abcltd.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登出頁面,這將做的工作。

+0

對不起,我在發佈到這個網站時犯了一個錯誤。它不是vrxstudios.com,它只是abcltd。我將編輯我的帖子。 – Partha 2010-07-01 06:32:40

+0

嘗試只在'LoginStatus1_LoggingOut'中留下'FormsAuthentication.SignOut();'部分。使用FireBug檢查發生了什麼。查看cookie是否被刪除。 – 2010-07-01 06:53:46