Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |
|---|---|
|
Weist den Browser an, das Identitätsauswahlobjekt anzuzeigen. |
|
Bestimmt den Tokentyp, den die Identitätsauswahl ausgibt; in diesem Fall, ein SAML 1.0-Token. |
|
Die URL des Identitätsanbieters, die die Identität bereitstellt. In diesem Fall ein festverdrahteter URI, der den integrierten, selbst ausstellenden Anbieter aufruft. |
|
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.
.gif)
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.
.gif)
Klicken Sie auf Neue persönliche Karte erstellen. Daraufhin wird das Fenster zum Erstellen selbst ausgestellter Karten angezeigt.
.gif)
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.
.gif)
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.
.gif)
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 |
|---|---|---|
|
60 |
Optional. Die maximale Anzahl an Sekunden, die der Client und der Server nicht synchron sein dürfen. |
|
<Keiner> |
Optional. Der Fingerabdruck des Zertifikats, das zum Entschlüsseln des Tokens verwendet wird. Die Tokenklasse sucht automatisch nach dem Zertifikat. |
|
My |
Optional. Der Speichername des SSL-Zertifikats. In der Regel "My". |
|
LocalMachine |
Optional. Der Speicherort des SSL-Zertifikats. In der Regel "LocalMachine". |
|
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.
.gif)
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.
.gif)
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.
.gif)
Senden Sie Kommentare zu diesem Thema an Microsoft.
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.