2009-08-05 4 views
0

Ich habe ein ziemlich kompliziertes Projekt geerbt. Der ursprüngliche Designer hat einen "Cookie" erstellt, der eher serverseitig als clientbasiert zu sein scheint (obwohl ich in diesem Teil sehr falsch liegen könnte). Er benutzt es für das, was er "Least Privileges, Single Sign On" nannte. Ich habe den folgenden Code in all den Web-Service-Proxies gründete er:Server Cookies?

[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)); 
    } 
…. 

ich auch diesen Code haben ziemlich überall:

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)) 
…. 

In allen Fällen, wenn es geht zu erhalten der authCookie, es kommt Null oder der SecurityContext.UserName ist leer. Ich bin kein Cookie-Guru und viel Code dieses Kerls ist verschleiert - und keine Dokumentation.

Kann jemand Kopf oder Zahl aus der Absicht der Codeblöcke machen?

TIA

Antwort

1

FormsAuthentication für eine Web-Service-Methode? Authentifizierungsinformationen in einem Cookie speichern? Es gibt so viele Dinge, die mit dieser Geschichte nicht stimmen. (Hinweis: starke Verschleierung des Codes sollte als ein Zeichen genommen werden.)

Die Absicht der Code-Blöcke, wie es scheint, verwendet das Cookie-Framework für die Benutzeridentifikation während eines Methodenaufrufs. Es wird davon ausgegangen, dass der Benutzer bereits authentifiziert wurde und dass der Authentifizierungscookie in allen Anfragen vorhanden ist.


EDIT: ein bisschen mehr Informationen über „serverseitige Cookies“ - die Referenzen Sie System.Net.Cookie sehen und wie .NET Framework-Klassen für Cookies Handhabung. Cookies sind clientseitige Datenelemente, die sich entweder im Speicher des Clients befinden (normalerweise ein Webbrowser) und/oder als Textdateien irgendwo im lokalen Dateisystem des Clients gespeichert sind. Die meisten Webanwendungen, die clientseitige Cookies setzen, gehen davon aus, dass sie einen Webbrowser verwenden, da alle wichtigen Browseranbieter Cookies unterstützen.

Wenn ein Webbrowser verwendet wird, um eine Anfrage an eine URL zu senden, werden viele Informationen im Hintergrund gesendet, die vor dem Benutzer verborgen sind: IP-Adresse, Art des Browsers und Betriebssystems usw. In dieser Liste sind Cookies für diese angegebene URL-Domäne (es gibt HTTP-Regeln, denen Browser zustimmen). Der Code, den Sie betrachten, sind spezifische .NET Framework-Klassen für den strukturierten Umgang mit diesen Cookie-Werten.


meisten Anwendungen, die Web-Services vollständig staatenlos konsumieren sind - keine Cookies, keine Sitzungen, nichts. Es ist zwar möglich, dass ein Client für einen Web-Service Cookie-Unterstützung implementiert, aber die Annahme oder Anforderung von Cookie-Unterstützung für einen Web-Service ist Torheit.

In dem Codeszenario, das Sie für die Erkennung von Nullwerten getestet haben, unterstützt die aufrufende Anwendung höchstwahrscheinlich keine Cookies, wodurch der gesamte Codeblock effektiv ungültig wird. Dies ist ein gebrochenes Design.

Ich kann keinen sinnvollen Weg finden, diesen Codeblock zu verbessern, ohne dass die gesamte Struktur zerstört wird. Angesichts Ihrer empfohlenen Vertrautheit verbringen Sie ein wenig Zeit mit der Websicherheit 101. Machen Sie sich mit den Konzepten der Authentifizierung, Sitzungen (und auch Cookies) vertraut.) Sie werden wissen, dass Sie bereit sind fortzufahren, sobald Sie erkennen, dass Sicherheit etwas ist, das Sie nicht selbst erfinden.

0

Nun offensichtlich versucht er ein Sicherheits-/Autorisierungsanbieter zu schaffen, die anscheinend nicht gut funktioniert oder überhaupt nicht. Ich empfehle Ihnen, Enterprise Library für diese Funktionalität anzusehen. Security Application Block QuickStart. Sehen Sie sich dann das Sicherheits-Token an.