2009-08-05 81 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。然后看看缓存安全令牌。

相关问题