Partilhar via


Como: Personalizar o cookie de autenticação do serviço de autenticação do WCF

Este tópico mostra como personalizar o cookie de autenticação (permissão) para o serviço de autenticação do ASP.NET quando ele é usado como um serviço Windows Communication Foundation (WCF).Você personaliza o cookie de autenticação quando você deseja armazenar dados específicos do usuário no cookie durante a autenticação.

Observação:

Em geral, o armazenamento de dados específicos do usuário em propriedades de perfil do ASP.NET é uma opção melhor que armazenar dados no cookie.Dados de propriedade do perfil não são vinculados a um computador ou limitados à vida útil do cookie.Além disso, você pode armazenar os dados do usuário de forma mais segura nas propriedades de perfil.Personalizar o conteúdo do cookie é útil se você tem uma pequena quantidade de dados não confidenciais e não deseja usar o recurso de perfil do ASP.NET.

O serviço de autenticação gera o evento CreatingCookie após as credenciais do usuário serem validadas e antes do cookie de autenticação ser definido.Você pode personalizar o cookie, criando um manipulador de eventos para CreatingCookie e gerenciando o cookie de autenticação você mesmo.Você pode acessar o nome de usuário, senha e credenciais personalizadas através do objeto CreatingCookieEventArgs que é passado para o manipulador de eventos.

You use the WCF implementation of the authentication service when you want to log a user in from a client application that can send and consume a SOAP 1.1 message, such as a Java application.

  1. In the Global.asax file of the Web application, create an event handler for the CreatingCookie event.

  2. No manipulador, adicione informações à propriedade CustomCredential do cookie.

    O exemplo a seguir mostra como personalizar o cookie de autenticação, adicionando o valor da propriedade CustomCredential para a propriedade UserData.

    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. In the Application_Start method of the Global.asax file, bind the event handler for the CreatingCookie event.

    The following example shows how to bind a handler to the CreatingCookie event.

    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. Chame o serviço de autenticação a partir de um aplicativo que possa receber uma mensagem SOAP de um serviço Web.

Compilando o código

You must set up the authentication service on a Web server for the previous examples to work.Para obter mais informações, consulte Como: Habilitar o serviço de autenticação do WCF.

Segurança

Se você estiver passando dados confidenciais do usuário, como credenciais de autenticação, sempre acesse o serviço de autenticação sobre a camada de soquetes seguros (SSL, usando protocolo HTTPS).Para obter informações sobre como configurar a protocolo SSL, consulte Configurando Secure Sockets camada (guia de operações de IIS 6.0).

Consulte também

Conceitos

Visão geral do serviço de autenticação Windows Communication Foundation

Referência

AuthenticationService

CreatingCookieEventArgs