Freigeben über


So verwenden Sie Windows CardSpace mit Internet Explorer 7.0

Download sample

CardSpace bietet Benutzern die Möglichkeit, ihre digitalen Identitäten zu verwalten, und Websites können mithilfe von Internet Explorer 7.0 eine digitale Identität vom Benutzer anfordern. Die folgenden Ausübungen veranschaulichen die Schritte, um Identitäten mit CardSpace und Internet Explorer 7.0 zu akzeptieren. In dieser exemplarischen Vorgehensweise gibt es vier Übungen:

  • Hello, World!

  • Aktivieren der Identitätsauswahl bei Bedarf

  • Zugreifen auf die Ansprüche im Sicherheitstoken

  • Eindeutiges Identifizieren des Benutzers

Zum Durchführen dieser Übungen muss die Website konfiguriert werden. Die Website wird mithilfe der im Beispielordner enthaltenen Installationsbatchdatei konfiguriert:

Setup.bat

Weitere Informationen zur Installation der Website sowie Tipps für die Fehlerbehandlung finden Sie unter Installieren von CardSpace-Beispielzertifikaten.

Hello World! Beispiel

Hello World ist ein Beispiel für den HTML-Code, der für die Verwendung der Identitätsauswahl erforderlich ist. In diesem Beispiel werden die folgenden Dateien verwendet:

sample1.htm

login1.aspx

Sie können die Identitätsauswahl anzeigen, indem Sie entweder ein <object>-Element oder ein Binärverhaltensobjekt verwenden. Die einfachste Möglichkeit besteht darin, das <object>-Element in den Text eines <form>-Elements einzufügen. Auf diese Weise wird die Identitätsauswahl beim Senden des Formulars aktiviert. Das folgende Beispiel stellt die Datei Sample1.htm dar:

<!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>

Die Ergebnisse des <object>-Elements werden direkt an die Seite login1.aspx gesendet, wo sie verarbeitet werden. Die Identitätsauswahl zeigt an, wenn auf die Schaltfläche zum Senden geklickt wird.

Die folgenden Elemente sind wichtige Elemente des Objektelements:

Element Beschreibung

type="application/x-informationcard"

Weist den Browser an, das Identitätsauswahlobjekt anzuzeigen.

param name="tokenType"

Bestimmt den Tokentyp, den die Identitätsauswahl ausgibt; in diesem Fall, ein SAML 1.0-Token.

param name="issuer"

Die URL des Identitätsanbieters, die die Identität bereitstellt. In diesem Fall ein festverdrahteter URI, der den integrierten, selbst ausstellenden Anbieter aufruft.

param name="requiredClaims"

Die abhängige Seite fordert den Benutzer auf, ein Token vom Identitätsanbieter (oder Benutzer) mit bestimmten Ansprüchen bereitzustellen. Die hier aufgeführten Beispiele sind Teil des vordefinierten Satzes selbst ausgestellter (persönlicher) Karten.

Beim Klicken auf die Schaltfläche wird die CardSpace-Identitätsauswahl angezeigt. Auf diese Weise kann der Benutzer eine CardSpace-Identität zum Senden auswählen.

Auswählen einer Windows CardSpace-Karte

Klicken Sie auf Ja, Karte senden. Wenn im System keine Karten vorhanden sind, bietet die Identitätsauswahl die Möglichkeit, eine Karte zu erstellen oder zu importieren.

Verwenden von Windows CardSpace mit Internet Explorer 7.0

Klicken Sie auf Neue persönliche Karte erstellen. Daraufhin wird das Fenster zum Erstellen selbst ausgestellter Karten angezeigt.

Bearbeiten einer Windows CardSpace-Karte

Füllen Sie die Pflichtfelder aus, wählen Sie ein Bild aus, geben Sie der Karte einen Namen, und klicken Sie auf Speichern. Nach dem Erstellen einer persönlichen Karte, die die aufgelisteten Ansprüche erfüllt, senden Sie die Karte.

Senden einer Windows CardSpace-Karte an eine Site

Die verschlüsselten Kartendaten werden an die folgende Login1.aspx-Seite gesendet (im Folgenden in C# dargestellt).

<%@ 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>

Die verschlüsselten Kartendaten werden in VB.NET an die Seite login1.aspx gesendet:

<%@ 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>

Die Seite login1.aspx sendet das verschlüsselte Token an das Fenster zurück.

Verwenden von Windows CardSpace mit Internet Explorer 7.0

Aktivieren der Identitätsauswahl bei Bedarf

In diesem Beispiel wird eine Methode zur flexibleren Anzeige der Identitätsauswahl veranschaulicht. Im Beispiel werden die folgenden Dateien verwendet:

Sample2.htm

Login2.aspx

Entwickler möchten möglicherweise mehr Flexibilität bei der zeitlichen Steuerung und Behandlung beim Aufrufen der Identitätsauswahl. Um die Identitätsauswahl zu einer Zeit anzuzeigen, die für eine bestimmte Anwendung besser geeignet ist, wird für das <object>-Element im Skript festgelegt, dass das verschlüsselte Token auf Anfrage zurückgegeben wird. Dies wird in der folgenden Beispieldatei Sample2.htm dargestellt.

<!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>

Das <object>-Element wird in den Header des HTML-Dokuments eingefügt, und die Identitätsauswahl wird beim Zugriff auf die Werteigenschaft aufgerufen. Mit dem Skript in diesem Beispiel wird die XML-Darstellung des Tokens in ein <textarea>-Element eingefügt, sodass der Entwickler den Inhalt vor dem Senden von <form> anzeigen kann.

Tipp

Der Tokentext im Textbereich stimmt nicht exakt mit dem Tokentext auf der Seite login2.aspx überein, da der Browser die Anzeige der XML-Tags unterdrückt.

Erhalten des Zugriffs auf die Ansprüche

In diesem Beispiel wird die Verwendung von TokenProcessor.cs für den Zugriff auf die Ansprüche in einer Karte veranschaulicht, die an eine Website gesendet wurde. Im Beispiel werden die folgenden Dateien verwendet:

Sample3.htm

Login3.aspx

app_code\TokenProcessor.cs

Web.config

Um die Ansprüche aus den verschlüsselten Daten zu extrahieren, können Entwickler, die ASP.NET 2.0 verwenden, das in dieser Übung enthaltene TokenProcessor.cs-Beispiel verwenden. Die Token-Klasse behandelt die gesamte Entschlüsselung und Überprüfung des Tokens mithilfe der Windows Communication Foundation (WCF)-Klassen. Die Token-Klasse wird in der Zielseite der Sendung verwendet, in diesem Fall die login3.aspx-Seite in C#:

<%@ 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>

Und in Visual Basic .NET:

<%@ 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>

Um die Werte der Ansprüche aus dem Token zu extrahieren, verwenden Sie die Claims-Eigenschaft. Dabei wird der URI des Anspruchs als Parameter verwendet und der Wert als string zurückgegeben. Die URIs für selbst ausgestellte Karten werden weiter hinten in diesem Dokument aufgeführt. Um Zeit zu sparen, sind sie in der SelfIssued-Klasse vordefiniert.

Es gibt Konfigurationsdaten, die zusammen mit der Token-Klasse verwendet werden. Die Konfigurationselemente befinden sich in der Datei 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>
Element Wert Beschreibung

MaximumClockSkew

60

Optional. Die maximale Anzahl an Sekunden, die der Client und der Server nicht synchron sein dürfen.

CertificateThumbprint

<Keiner>

Optional. Der Fingerabdruck des Zertifikats, das zum Entschlüsseln des Tokens verwendet wird. Die Tokenklasse sucht automatisch nach dem Zertifikat.

StoreName

My

Optional. Der Speichername des SSL-Zertifikats. In der Regel "My".

StoreLocation

LocalMachine

Optional. Der Speicherort des SSL-Zertifikats. In der Regel "LocalMachine".

IdentityClaimType

PPID

Optional. Der URI für den Anspruchstyp, der als der Anspruch verwendet wird, mit dem der Benutzer eindeutig identifiziert wird.

Wenn das Token an die Anmeldeseite gesendet und entschlüsselt wird, werden die Anspruchswerte angezeigt.

Verwenden von Windows CardSpace mit Internet Explorer 7.0

Eindeutiges Identifizieren des Benutzers

In diesem Beispiel wird gezeigt, wie mit der Token-Klasse ein Benutzer eindeutig identifiziert wird. In diesem Beispiel werden die folgenden Dateien verwendet:

Sample4.htm

Login4.aspx

app_code\TokenProcessor.cs

web.config

Angesichts der Tatsache, dass jeder eine Karte mit denselben Werten für den Anspruch erstellen kann, muss es möglich sein, mit Ausnahme der selbst ausgestellten Anspruchswerte eine bestimmte Karte eindeutig zu identifizieren. Hierzu wird die UniqueID der Karte berechnet. Bei dieser UniqueID handelt es sich um den Hashcode des öffentlichen Schlüssels des Ausstellers sowie um Ansprüche, die sich eindeutig diesem Aussteller zuordnen lassen. Da die Schlüssel für die Kommunikation zwischen dem Client und dem Server bei der ersten Kommunikation zufällig generiert werden, kann der öffentliche Schlüssel der Karte eindeutig zugeordnet werden. Wenn dieselbe selbst ausgestellte Karte für mehrere Websites verwendet wird, wird mit jeder neuen Zuordnung ein neues Schlüsselpaar generiert. Beim eindeutigen Anspruch kann die PPID (Private Personal Identifier, privater persönlicher Bezeichner) der Karte diesem Aussteller eindeutig zugeordnet werden. Die UniqueID-Eigenschaft berechnet für den Entwickler den Hashwert. So fügen Sie den Code der Seite login4.aspx in C# hinzu:

<%@ 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>

Und in Visual Basic .NET:

<%@ 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>

Das Ergebnis ist ein aus 20 Zeichen bestehender base64-codierter Hashwert, der in einer Datenbank verwendet werden kann, um einen Besucher eindeutig zu identifizieren.

Verwenden von Windows CardSpace mit Internet Explorer 7.0

Um den für Eindeutigkeit verwendeten Anspruch zu ändern, fügen Sie der Datei Web.config den folgenden Schlüssel hinzu und ändern den Wert in einen anderen Anspruchs-URI.

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

Informationen zum eigentlichen Token

Weitere Informationen zum Format sowie zur Verwendung des verschlüsselten XML-Tokens finden Sie in den folgenden Ressourcen:

https://go.microsoft.com/fwlink/?LinkId=95951 (Seite ist möglicherweise nur in englischer Sprache verfügbar)

Ansprüche in selbst ausgestellten Karten

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

  • E-Mail-Adresse = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";

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

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

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

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

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

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

  • Telefon (privat) = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone";

  • Telefon (weitere) = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone";

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

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

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

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

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

Glossar

  • Identitätsanbieter: Die Stelle (Unternehmen, Website, Organisation, Sie selbst), die Ansprüche eines Inhabers (Person) bestätigt.

  • Identitätsauswahl: Bei der Identitätsauswahl handelt es sich um ein Dialogfeld, mit dem die unterschiedlichen digitalen Identitäten des Benutzers angezeigt werden und mit dem die zum Senden an die abhängige Seite relevante Identität ausgewählt werden kann.

  • Abhängige Seite: Die Stelle (Website, Server oder andere Seite), die von den Ansprüchen abhängt, die vom Inhaber angegeben werden.

  • Inhaber: Die Entität (der Benutzer), zu deren Identität Ansprüche erhoben wurden. Der Inhaber hat immer die Kontrolle über die Freigabe seiner digitalen Identitätsinformationen an die abhängige Seite.

Footer image

Senden Sie Kommentare zu diesem Thema an Microsoft.

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.