Freigeben über


Gewusst wie: Anpassen des Authentifizierungscookies über den WCF-Authentifizierungsdienst

Aktualisiert: November 2007

In diesem Thema wird die Anpassung des Authentifizierungscookies (Ticket) für den ASP.NET-Authentifizierungsdienst beschrieben, wenn dieser als Windows Communication Foundation (WCF)-Dienst verwendet wird. Eine Anpassung des Authentifizierungscookies erfolgt, wenn Sie während der Authentifizierung benutzerspezifische Daten im Cookie speichern möchten.

Hinweis:

Im Allgemeinen stellt das Speichern benutzerspezifischer Daten in den Eigenschaften des ASP.NET-Profils eine bessere Lösung dar als das Speichern von Daten im Cookie. Profileigenschaftendaten sind nicht an einen Computer gebunden oder auf die Lebensdauer des Cookies beschränkt. Darüber hinaus ist das Speichern von Benutzerdaten in Profileigenschaften sicherer. Die Anpassung des Cookieinhalts empfiehlt sich bei kleinen Mengen nicht-sensibler Daten, für die Sie nicht das ASP.NET-Profilfeature verwenden möchten.

Das CreatingCookie-Ereignis wird durch den Authentifizierungsdienst nach Überprüfung der Anmeldeinformationen des Benutzers und vor Festlegen des Authentifizierungscookies ausgelöst. Sie können das Cookie anpassen, indem Sie einen Ereignishandler für CreatingCookie erstellen und das Authentifizierungscookie selbst verwalten. Über das an den Ereignishandler übergebene CreatingCookieEventArgs-Objekt können Sie auf Benutzernamen, Kennwort und benutzerdefinierte Anmeldeinformationen zugreifen.

Sie verwenden die WCF-Implementierung für Authentifizierungsdienste, wenn Sie einen Benutzer von einer Clientanwendung aus anmelden möchten, die SOAP 1.1-Nachrichten senden und empfangen kann, wie z. B. eine Java-Anwendung.

So passen Sie das Authentifizierungscookie an

  1. Erstellen Sie in der Datei Global.asax der Webanwendung einen Ereignishandler für das CreatingCookie-Ereignis.

  2. Fügen Sie der CustomCredential-Eigenschaft des Cookies Informationen im Handler hinzu.

    Das folgende Beispiel veranschaulicht, wie das Authentifizierungscookie durch einen Ereignishandler angepasst wird, indem dieser den Wert der CustomCredential-Eigenschaft zur UserData-Eigenschaft hinzufügt.

    Sub AuthenticationService_CreatingCookie(ByVal sender As Object, _
                     ByVal e As System.Web.ApplicationServices.CreatingCookieEventArgs)
        Dim ticket As FormsAuthenticationTicket = New _
           FormsAuthenticationTicket _
            (1, _
             e.Username, _
             DateTime.Now, _
             DateTime.Now.AddMinutes(30), _
             e.IsPersistent, _
             e.CustomCredential, _
             FormsAuthentication.FormsCookiePath)
    
        Dim encryptedTicket As String = FormsAuthentication.Encrypt(ticket)
    
        Dim cookie As HttpCookie = New _
            HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
        cookie.Expires = DateTime.Now.AddMinutes(30)
    
        HttpContext.Current.Response.Cookies.Add(cookie)
        e.CookieIsSet = True
    End Sub
    
    void AuthenticationService_CreatingCookie(object sender, 
        System.Web.ApplicationServices.CreatingCookieEventArgs e)
    {
        FormsAuthenticationTicket ticket = new
              FormsAuthenticationTicket
                (1,
                 e.UserName,
                 DateTime.Now,
                 DateTime.Now.AddMinutes(30),
                 e.IsPersistent,
                 e.CustomCredential,
                 FormsAuthentication.FormsCookiePath);
    
        string encryptedTicket =
             FormsAuthentication.Encrypt(ticket);
    
        HttpCookie cookie = new HttpCookie
             (FormsAuthentication.FormsCookieName,
              encryptedTicket);
        cookie.Expires = DateTime.Now.AddMinutes(30);
    
        HttpContext.Current.Response.Cookies.Add(cookie);
        e.CookieIsSet = true;
    }
    
  3. Binden Sie in der Application_Start-Methode der Datei Global.asax den Ereignishandler für das CreatingCookie-Ereignis ein.

    Das folgende Beispiel veranschaulicht die Bindung eines Handlers an das CreatingCookie-Ereignis.

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        AddHandler System.Web.ApplicationServices.AuthenticationService.CreatingCookie, _
            AddressOf Me.AuthenticationService_CreatingCookie
    End Sub
    
    void Application_Start(object sender, EventArgs e)
    {
        System.Web.ApplicationServices.AuthenticationService.CreatingCookie 
            += new EventHandler<System.Web.ApplicationServices.CreatingCookieEventArgs>
            (AuthenticationService_CreatingCookie);
    }
    
  4. Rufen Sie den Authentifizierungsdienst aus einer Anwendung auf, die SOAP-Nachrichten aus einem Webdienst empfangen kann.

Kompilieren des Codes

Sie müssen den Authentifizierungsdienst auf einem Webserver einrichten, damit die vorherigen Beispiele funktionieren. Weitere Informationen finden Sie unter Gewusst wie: Aktivieren des WCF-Authentifizierungsdiensts.

Sicherheit

Greifen Sie auf den Authentifizierungsdienst stets unter Verwendung von SSL (Secure Sockets Layer, unter Verwendung des HTTPS-Protokolls) zu, wenn Sie vertrauliche Benutzerdaten wie Authentifizierungsinformationen übermitteln. Informationen zum Verwenden von SSL finden Sie unter Configuring Secure Sockets Layer (IIS 6.0 Operations Guide).

Siehe auch

Konzepte

Übersicht über den Windows Communication Foundation-Authentifizierungsdienst

Referenz

AuthenticationService

CreatingCookieEventArgs