2009-08-05 100 views
0

我繼承了一個相當複雜的項目。原始設計師創建了一個「cookie」,似乎是服務器端而不是基於客戶端(儘管我可能在該部分非常錯誤)。他將它用於他所謂的「最低特權,單一登錄」。我有下面的代碼在所有的Web服務代理的他成立了:服務器Cookie?

[WebServiceBinding(Name = "ISecurityManager", Namespace = "urn:riv:apis:security:forms:ver1")] 
public partial class SecurityManager : SoapHttpClientProtocol, ISecurityManager 
{ 
    public SecurityManager() 
    { 
     //Url = CookieManager.WebServiceUrl(String.Empty, ref CookieContainer); 
     // I’d like to replace the following code with a call like this... 

     CookieContainer = new System.Net.CookieContainer(); 
     string urlSetting = ConfigurationManager.AppSettings["SecurityManager"]; 

     if (urlSetting != null) 
      Url = urlSetting; 
     else 
      Trace.TraceWarning("No URL was found in application configuration file"); 

     string cookieName = FormsAuthentication.FormsCookieName; 
     string cookiePath = FormsAuthentication.FormsCookiePath; 
     string cookieDomain = Properties.Settings.Default.CookieDomain; 
     HttpCookie authCookie = HttpContext.Current.Request.Cookies[cookieName]; 

     if (null != authCookie) 
      CookieContainer.Add(new Uri(urlSetting), new System.Net.Cookie(cookieName, authCookie.Value, cookiePath, cookieDomain)); 
    } 
…. 

我也有這樣的代碼非常到處

string cookieName = FormsAuthentication.FormsCookieName; 
string SecurityContext.ApplicationName = HttpContext.Current.Request.Cookies[cookieName].Path; 
string SecurityContext.UserName = HttpContext.Current.User.Identity.Name; 

if (!string.IsNullOrEmpty(SecurityContext.UserName)) 
…. 

在所有情況下,當它獲得authCookie,它出現null或SecurityContext.UserName爲空。我不是一個cookie大師,這個人的代碼很多都是混淆的 - 而且文檔也是零。

任何人都可以使頭或尾出於代碼塊的意圖嗎?

TIA

回答

1

FormsAuthentication爲Web服務方法?將認證憑證存儲在cookie中?這個故事有很多錯誤。 (注意:代碼繁重混淆應該作爲一個符號。)

代碼塊的意圖,就像在調用方法期間使用cookie框架進行用戶標識一樣。它假定用戶已經通過身份驗證,並且身份驗證Cookie存在於所有請求中。


編輯:在「服務器端的cookie」更多的信息 - 你看到System.Net.Cookie和如.NET Framework類爲處理Cookie的引用。 Cookies是爲客戶端(通常是網頁瀏覽器)駐留在內存中的客戶端數據片段,和/或作爲文本文件保存在客戶端本地文件系統的某處。大多數設置客戶端Cookie的Web應用程序都假定他們正在處理Web瀏覽器,因爲所有主要的瀏覽器提供程序都支持Cookie。

當使用Web瀏覽器向URL發出請求時,會在後臺發送大量信息,這些信息對用戶是隱藏的:IP地址,瀏覽器和OS的類型等。給定URL域的cookie(有瀏覽器同意的HTTP規則)。您正在查看的代碼是特定的.Net Framework類,以結構化的方式處理這些cookie值。


大多數使用Web服務的應用程序都是完全無狀態的 - 沒有cookie,沒有會話,什麼都沒有。雖然客戶端到Web服務可能會實現Cookie支持,但假設或要求Cookie支持Web服務是愚蠢的。

在代碼場景中,您已經調試過檢測空值,很可能調用應用程序不支持cookie,從而無法有效渲染整個代碼塊。這是打破設計的。

我找不到一個明智的方法來改進這個代碼塊,不涉及拆卸整個結構。考慮到您的熟悉程度,請花一點時間在Web安全101上。熟悉身份驗證,會話(和cookie)的概念。)當你意識到安全性不是你自己發明的時候,你就會知道你已經準備好了。

0

嗯,顯然他試圖創建一個安全/授權供應商,顯然不能很好地或在所有工作。我建議你看看Enterprise Library的這個功能。 Security Application Block QuickStart。然後看看緩存安全令牌。