Share via


Internet Explorer 7.0에서 Windows CardSpace를 사용하는 방법

Download sample

CardSpace에서는 Internet Explorer 7.0을 사용하여 웹 사이트에서 사용자에게 요청할 수 있는 디지털 ID를 관리하는 기능을 제공합니다. 다음 연습에서는 CardSpace와 Internet Explorer 7.0을 사용하여 ID를 받아들이는 단계를 보여 줍니다. 여기에는 네 가지 연습이 있습니다.

  • Hello, World!

  • 필요 시 ID 선택기 활성화

  • 보안 토큰의 클레임에 액세스

  • 고유하게 사용자 식별

연습을 진행하려면 웹 사이트 구성이 필요합니다. 샘플 폴더에 제공된 설치 배치 파일을 사용하여 구성이 수행됩니다.

Setup.bat

웹 사이트 설치에 대한 자세한 내용과 문제 해결 팁은 CardSpace 샘플 인증서 설치를 참조하십시오.

Hello World! 샘플

Hello World 샘플에서는 ID 선택기를 사용하는 데 필요한 HTML 코드를 보여 줍니다. 이 샘플은 다음과 같은 파일을 사용합니다.

sample1.htm

login1.aspx

ID 선택기는 <object> 요소나 이진 동작 개체를 사용하여 표시됩니다. 가장 쉬운 방법은 폼이 제출될 때 ID 선택기를 활성화하는 <form> 요소의 본문에 <object> 요소를 포함시키는 것입니다. 다음은 Sample1.htm 파일입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>Sample 1</title>
</head>
<body>
    <form id="form1" method="post" action="login1.aspx">
      <button type="submit">Click here to sign in with your Information Card</button>
      <object type="application/x-informationcard" name="xmlToken">
        <param name="tokenType" value="urn:oasis:names:tc:SAML:1.0:assertion" />
        <param name="issuer" 
               value="https://schemas.xmlsoap.org/ws/2005/05/identity/issuer/self" />
        <param name="requiredClaims" 
             value="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
                    https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname
                    https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
                    https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier" />
      </object>
    </form>
</body>
</html>

<object> 요소의 결과는 처리가 발생하는 login1.aspx 페이지에 직접 게시됩니다. ID 선택기는 제출 단추를 누르면 표시됩니다.

개체 요소의 중요 요소는 다음과 같습니다.

요소 설명

type="application/x-informationcard"

ID 선택기 개체를 표시하도록 브라우저에 지시합니다.

param name="tokenType"

ID 선택기가 내보내는 토큰 형식(이 경우에는 SAML 1.0 토큰)을 제어합니다.

param name="issuer"

ID를 제공하는 ID 공급자의 URL입니다. 이 경우에는 자체적으로 발급하는 기본 제공 공급자를 호출하는 직접 연결된 URI입니다.

param name="requiredClaims"

신뢰하는 상대는 ID 공급자(또는 사용자)에게 받은 토큰을 특정 클레임과 함께 제공하도록 사용자에게 요청합니다. 여기에 있는 예제는 자체 발급된 개인 카드에 대한 미리 정의된 집합의 일부입니다.

단추를 누르면 CardSpace ID 선택기가 표시됩니다. 사용자는 CardSpace ID 선택기를 사용하여 제출할 CardSpace ID를 선택할 수 있습니다.

Windows CardSpace 카드 선택

Yes, choose to send a card를 클릭합니다. 시스템에 카드가 없으면 ID 선택기에서 카드를 만들거나 가져올 수 있습니다.

Internet Explorer 7.0에서 Windows CardSpace 사용

Create a new Personal card를 클릭하면 자체 발급된 카드를 만들 수 있는 화면이 표시됩니다.

Windows CardSpace 카드 편집

필요한 필드에 입력하고 그림을 선택한 다음 카드에 이름을 지정하고 Save를 클릭합니다. 표시된 클레임을 충족하는 개인 카드가 만들어지면 카드를 보냅니다.

사이트에 Windows CardSpace 카드 보내기

암호화된 카드 데이터가 다음 Login1.aspx 페이지(아래에 C#으로 작성됨)로 전송됩니다.

<%@ Page Language="C#"  Debug="true" ValidateRequest="false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e) {
        Label1.Text = Request.Params["xmlToken"];
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        The value of the token is:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
    </form>
</body>
</html>

암호화된 카드 데이터가 VB.NET으로 작성된 login1.aspx 페이지로 전송됩니다.

<%@ Page Language="VB"  Debug="true" ValidateRequest="false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
   Label1.Text = Request.Params("xmlToken");
End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        The value of the token is:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
    </form>
</body>
</html>

login1.aspx 페이지에서는 암호화된 토큰을 화면에 표시합니다.

Internet Explorer 7.0에서 Windows CardSpace 사용

필요 시 ID 선택기 활성화

이 샘플에서는 더욱 융통성 있게 ID 선택기를 표시하는 방법을 보여 줍니다. 이 샘플은 다음과 같은 파일을 사용합니다.

Sample2.htm

Login2.aspx

개발자는 ID 선택기 호출의 시기 및 처리와 관련하여 더 많은 융통성을 원할 수 있습니다. 특정 응용 프로그램에 더 적합한 시기에 ID 선택기를 표시하기 위해 <object> 요소는 요청 시 암호화된 토큰을 반환하도록 스크립팅됩니다. 이 과정은 다음 Sample2.htm 파일에 나와 있습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>Sample 2</title>
  <object type="application/x-informationcard" name="_xmlToken">
    <param name="tokenType" value="urn:oasis:names:tc:SAML:1.0:assertion" />
    <param name="requiredClaims" 
        value="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
        https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname
        https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
        https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier" />
  </object>
  <script language="javascript">
    function GoGetIt(){
      var xmltkn=document.getElementById("_xmltoken");
      var thetextarea = document.getElementById("xmltoken");
      thetextarea.value = xmltkn.value ;
    }
  </script>
</head>
<body>
  <form id="form1" method="post" action="login2.aspx">
    <button name="go" id="go" onclick="javascript:GoGetIt();">Click here to get the token.</button>
    <button type="submit">Click here to send the card to the server</button>
    <textarea cols=100 rows=20 id="xmltoken" name="xmlToken" ></textarea>
  </form>
</body>
</html>

<object> 요소가 HTML 문서의 헤더에 배치되고 값 속성에 액세스할 때 ID 선택기가 호출됩니다. 이 예제의 스크립트에서는 개발자가 <form>이 제출되기 전에 내용을 볼 수 있도록 하는 <textarea> 요소에 토큰 XML을 배치합니다.

참고

브라우저에서 XML 태그를 표시하지 않기 때문에 텍스트 영역의 토큰 텍스트는 login2.aspx 페이지의 토큰 텍스트와 정확히 일치하지 않습니다.

클레임에 액세스하기

이 샘플에서는 TokenProcessor.cs를 사용하여 웹 사이트에 전송되는 카드의 클레임에 액세스하는 방법을 보여 줍니다. 이 샘플은 다음과 같은 파일을 사용합니다.

Sample3.htm

Login3.aspx

app_code\TokenProcessor.cs

Web.config

암호화된 데이터에서 클레임을 처리하기 위해 ASP.NET 2.0을 사용하는 개발자는 이 연습에 제공된 TokenProcessor.cs 샘플 코드를 사용할 수 있습니다. Token 클래스는 WCF(Windows Communication Foundation) 클래스를 사용하여 토큰의 해독과 확인을 모두 처리합니다. Token 클래스는 게시의 대상 페이지(이 경우에는 C#으로 작성된 login3.aspx 페이지)에서 사용됩니다.

<%@ Page Language="C#"  Debug="true" ValidateRequest="false" %>
<%@ Import Namespace="System.IdentityModel.Claims" %>
<%@ Import Namespace="Microsoft.IdentityModel.TokenProcessor" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void ShowError(string text) {
        fields.Visible = false;
        errors.Visible = true;
        errtext.Text = text;
    }
    protected void Page_Load(object sender, EventArgs e)
        string xmlToken;
        xmlToken = Request.Params["xmlToken"];
        if (xmlToken == null || xmlToken.Equals("")){
            ShowError("Token presented was null");
        }
        else {
            Token token= new Token(xmlToken);
            givenname.Text = token.Claims[ClaimTypes.GivenName];
            surname.Text = token.Claims[ClaimTypes.Surname];
            email.Text = token.Claims[ClaimTypes.Email];
        }
        
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Login Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="fields">
        Given Name:<asp:Label ID="givenname" runat="server" Text=""></asp:Label><br/>
        Surname:<asp:Label ID="surname" runat="server" Text=""></asp:Label><br/>
        Email Address:<asp:Label ID="email" runat="server" Text=""></asp:Label><br/>
    </div>
    <div runat="server" id="errors" visible="false">
        Error:<asp:Label ID="errtext" runat="server" Text=""></asp:Label><br/>
    </div>
        
    </form>
</body>
</html>

Visual Basic .NET으로 작성된 login3.aspx 페이지:

<%@ Page Language="VB"  Debug="true" ValidateRequest="false" %>
<%@ Import Namespace="System.IdentityModel.Claims" %>
<%@ Import Namespace="Microsoft.IdentityModel.TokenProcessor" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected  Sub ShowError(ByVal text As String) 
   fields.Visible = False 
   errors.Visible = True 
   errtext.Text = text 
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
   Dim xmlToken As String
   xmlToken = Request.Params("xmlToken")
   If xmlToken = Nothing Or xmlToken.Equals("") Then
      ShowError("Token presented was null")
   Else
      Dim token As New Token(xmlToken)
      givenname.Text = token.Claims(ClaimTypes.GivenName)
      surname.Text = token.Claims(ClaimTypes.Surname)
      email.Text = token.Claims(ClaimTypes.Email)
   End If
End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Login Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="fields">
        Given Name:<asp:Label ID="givenname" runat="server" Text=""></asp:Label><br/>
        Surname:<asp:Label ID="surname" runat="server" Text=""></asp:Label><br/>
        Email Address:<asp:Label ID="email" runat="server" Text=""></asp:Label><br/>
    </div>
    <div runat="server" id="errors" visible="false">
        Error:<asp:Label ID="errtext" runat="server" Text=""></asp:Label><br/>
    </div>
        
    </form>
</body>
</html>

토큰에서 클레임의 값을 가져오려면 Claims 속성을 사용합니다. 이 속성은 클레임의 URI를 매개 변수로 사용하고 값을 string으로 반환합니다. 자체 발급된 카드의 URI는 이 문서에서 나중에 표시되지만 시간을 절약하기 위해 SelfIssued 클래스에 미리 정의되어 있습니다.

Token 클래스와 함께 사용되는 구성 데이터가 있습니다. Web.config 파일에서 구성 항목을 찾을 수 있습니다.

<configuration>
  <appSettings>
    <add key="MaximumClockSkew" value="60"/>
    <add key="CertifcateThumbprint" value="01234567890ABCDEFEDCBA01234567890ABCDEFEDCBA"/>
    <add key="StoreName" value="My"/>
    <add key="StoreLocation" value="LocalMachine"/>
    <add key="IdentityClaimType" 
         value="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"/>
  </appSettings>
<configuration>
요소 설명

MaximumClockSkew

60

선택적 요소입니다. 클라이언트와 서버의 가능한 최대 클럭 오차를 나타내는 초 수입니다.

CertificateThumbprint

<none>

선택적 요소입니다. 토큰을 해독하는 데 사용할 인증서의 지문입니다. 토큰 클래스는 인증서를 자동으로 조회합니다.

StoreName

My

선택적 요소입니다. SSL 인증서의 저장소 이름입니다. 일반적으로 "My"입니다.

StoreLocation

LocalMachine

선택적 요소입니다. SSL 인증서의 저장소 위치입니다. 일반적으로 "LocalMachine"입니다.

IdentityClaimType

PPID

선택적 요소입니다. 사용자를 고유하게 식별하는 클레임으로 사용되는 클레임 형식에 대한 URI입니다.

토큰이 로그인 페이지에 게시되고 해독되면 이제 클레임 값을 볼 수 있습니다.

Internet Explorer 7.0에서 Windows CardSpace 사용

고유하게 사용자 식별

이 샘플에서는 Token 클래스를 사용하여 사용자를 고유하게 식별하는 방법을 보여 줍니다. 이 샘플은 다음과 같은 파일을 사용합니다.

Sample4.htm

Login4.aspx

app_code\TokenProcessor.cs

web.config

누구든지 자체 발급된 클레임 값이 아니라 동일한 클레임 값을 사용하여 카드를 만들 수 있는 경우 특정 카드를 고유하게 식별할 수 있어야 합니다. 이 작업은 카드의 UniqueID를 계산하여 수행됩니다. 이 UniqueID는 발급자의 공개 키와 해당 발급자에게 고유한 클레임의 해시입니다. 클라이언트와 서버 간의 대화에 대한 키가 처음 통신에서 무작위로 생성되기 때문에 공개 키는 카드에 고유합니다. 여러 사이트에서 동일한 자체 발급된 카드를 사용하는 경우 새 키 쌍이 새로운 각 연결에서 생성됩니다. 고유 클레임의 경우 카드의 *PPID(Private Personal Identifier)*가 해당 발급자에게 고유합니다. UniqueID 속성은 개발자를 위해 해시된 값을 계산합니다. 코드가 추가된 C#으로 작성된 login4.aspx 페이지는 다음과 같습니다.

<%@ Page Language="C#"  Debug="true" ValidateRequest="false" %>
<%@ Import Namespace="System.IdentityModel.Claims" %>
<%@ Import Namespace="Microsoft.IdentityModel.TokenProcessor" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void ShowError(string text) {
        fields.Visible = false;
        errors.Visible = true;
        errtext.Text = text;
    }
    protected void Page_Load(object sender, EventArgs e) {
        string xmlToken;
        xmlToken = Request.Params["xmlToken"];
        if (xmlToken == null || xmlToken.Equals(""))
            ShowError("Token presented was null");
        else
        {
                Token token = new Token (xmlToken);
                givenname.Text = token.Claims[SelfIssued.GivenName];
                surname.Text = token.Claims[SelfIssued.Surname];
                email.Text = token.Claims[SelfIssued.EmailAddress];
                uid.Text = token.UniqueID;
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Login Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="fields">
        Given Name:<asp:Label ID="givenname" runat="server" Text=""></asp:Label><br/>
        Surname:<asp:Label ID="surname" runat="server" Text=""></asp:Label><br/>
        Email Address:<asp:Label ID="email" runat="server" Text=""></asp:Label><br/>
        Unique ID:<asp:Label ID="uid" runat="server" Text=""></asp:Label><br/>
    </div>
    <div runat="server" id="errors" visible="false">
        Error:<asp:Label ID="errtext" runat="server" Text=""></asp:Label><br/>
    </div>
        
    </form>
</body>
</html>

Visual Basic .NET으로 작성된 login4.aspx 페이지:

<%@ Page Language="VB"  Debug="true" ValidateRequest="false" %>
<%@ Import Namespace="System.IdentityModel.Claims" %>
<%@ Import Namespace="Microsoft.IdentityModel.TokenProcessor" %>

<script runat="server">
Protected  Sub ShowError(ByVal text As String) 
   fields.Visible = False 
   errors.Visible = True 
   errtext.Text = text 
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
   Dim xmlToken As String
   xmlToken = Request.Params("xmlToken")
   If xmlToken = Nothing Or xmlToken.Equals("") Then
      ShowError("Token presented was null")
   Else
      Dim token As New Token(xmlToken)
      givenname.Text = token.Claims(ClaimTypes.GivenName)
      surname.Text = token.Claims(ClaimTypes.Surname)
      email.Text = token.Claims(ClaimTypes.Email)
      uid.Text = token.UniqueID
   End If
End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Login Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="fields">
        Given Name:<asp:Label ID="givenname" runat="server" Text=""></asp:Label><br/>
        Surname:<asp:Label ID="surname" runat="server" Text=""></asp:Label><br/>
        Email Address:<asp:Label ID="email" runat="server" Text=""></asp:Label><br/>
        Unique ID:<asp:Label ID="uid" runat="server" Text=""></asp:Label><br/>
    </div>
    <div runat="server" id="errors" visible="false">
        Error:<asp:Label ID="errtext" runat="server" Text=""></asp:Label><br/>
    </div>
        
    </form>
</body>
</html>

결과는 데이터베이스에서 방문자를 고유하게 식별하는 데 사용할 수 있는 base64로 인코딩된 20자 길이의 해시 값입니다.

Internet Explorer 7.0에서 Windows CardSpace 사용

고유성을 위해 사용되는 클레임을 변경하려면 다음 키를 Web.config에 추가하고 값을 다른 클레임 URI로 변경합니다.

<add key="IdentityClaimType" value="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"/>

실제 토큰 정보

암호화된 XML 토큰의 형식과 사용에 대한 자세한 내용은 다음 리소스를 참조하십시오.

https://go.microsoft.com/fwlink/?LinkId=95951

자체 발급된 카드의 클레임

  • 이름 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname";

  • 전자 메일 주소 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";

  • 성 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname";

  • 주소 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress";

  • 지역 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality";

  • 시/도 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/stateorprovince";

  • 우편 번호 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode";

  • 국가 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/country";

  • 집 전화 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone";

  • 다른 전화 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone";

  • 휴대폰 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone";

  • 생년월일 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth";

  • 성별 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender";

  • PPID = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier";

  • 웹 사이트 = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/website";

용어

  • ID 공급자 - 주체(사람)에 대한 클레임을 어설션하는 기관(회사, 웹 사이트, 조직, 사용자 자신)입니다.

  • ID 선택기 - ID 선택기는 사용자의 여러 디지털 ID를 제공하고 신뢰하는 상대에게 제출할 관련 ID를 선택할 수 있도록 하는 대화 상자입니다.

  • 신뢰하는 상대 - 주체가 제공하는 클레임을 사용하는 기관(웹 사이트, 서버 또는 다른 상대)입니다.

  • 주체 - ID에 대한 클레임을 만든 엔터티(사용자)입니다. 주체는 디지털 ID 정보를 신뢰하는 상대에 보내는 것을 항상 제어합니다.

Footer image

이 항목에 대한 의견을 Microsoft에 보내 주십시오.

Copyright © 2007 by Microsoft Corporation. All rights reserved.