다음을 통해 공유


방법: WCF 인증 서비스에서 인증 쿠키 사용자 지정

업데이트: 2007년 11월

이 항목에서는 WCF(Windows Communication Foundation) 서비스로 사용되는 ASP.NET 인증 서비스에 대한 인증 쿠키(티켓)를 사용자 지정하는 방법을 보여 줍니다. 인증 작업을 수행하는 동안 쿠키에 사용자 관련 데이터를 저장하려는 경우 인증 쿠키를 사용자 지정합니다.

참고:

일반적으로는 쿠키에 데이터를 저장하는 것보다 ASP.NET 프로필 속성에 사용자 관련 데이터를 저장하는 것이 더 좋습니다. 프로필 속성 데이터는 하나의 컴퓨터에 바인딩되거나 쿠키의 수명에 제한되지 않습니다. 또한 사용자 데이터를 프로필 속성에 보다 안전하게 저장할 수 있습니다. 중요하지 않은 데이터의 양이 적거나 ASP.NET 프로필 기능을 원하지 않는 경우 쿠키의 내용을 사용자 지정하면 유용합니다.

사용자 자격 증명의 유효성을 검사한 후와 인증 쿠키를 설정하기 전에 인증 서비스에서 CreatingCookie 이벤트를 발생시킵니다. CreatingCookie에 대한 이벤트 처리기를 만들고 자체적으로 인증 쿠키를 관리하여 인증을 사용자 지정할 수 있습니다. 이벤트 처리기에 전달되는 CreatingCookieEventArgs 개체를 통해 사용자 이름, 암호 및 사용자 지정 자격 증명에 액세스할 수 있습니다.

Java 응용 프로그램 같이 SOAP 1.1 메시지를 보내고 사용할 수 있는 클라이언트 응용 프로그램의 사용자를 로그인하려면 인증 서비스의 WCF 구현을 사용합니다.

인증 쿠키를 사용자 지정하려면

  1. 웹 응용 프로그램의 Global.asax 파일에 CreatingCookie 이벤트의 이벤트 처리기를 만듭니다.

  2. 처리기에서 쿠키의 CustomCredential 속성에 정보를 추가합니다.

    다음 예제에서는 CustomCredential 속성의 값을 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. Global.asax 파일의 Application_Start 메서드에서 CreatingCookie 이벤트에 대해 이벤트 처리기를 바인딩합니다.

    다음 예제에서는 CreatingCookie 이벤트에 처리기를 바인딩하는 방법을 보여 줍니다.

    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. 웹 서비스의 SOAP 메시지를 사용할 수 있는 응용 프로그램에서 인증 서비스를 호출합니다.

코드 컴파일

이전 예제가 작동하려면 웹 서버에 인증 서비스를 설정해야 합니다. 자세한 내용은 방법: WCF 인증 서비스 활성화를 참조하십시오.

보안

인증 자격 증명과 같은 중요한 사용자 데이터를 전달하는 경우에는 항상 HTTPS 프로토콜을 사용하여 SSL(Secure Sockets Layer)을 통해 인증 서비스에 액세스하십시오. SSL을 설정하는 방법에 대한 자세한 내용은 Configuring Secure Sockets Layer (IIS 6.0 Operations Guide)를 참조하십시오.

참고 항목

개념

Windows Communication Foundation 인증 서비스 개요

참조

AuthenticationService

CreatingCookieEventArgs