Utilizzo di Windows CardSpace con Internet Explorer 7.0
CardSpace fornisce agli utenti la possibilità di gestire le proprie identità digitali e, con Internet Explorer 7.0, i siti Web possono richiedere all’utente un'identità digitale. Negli esercizi seguenti vengono illustrati i passaggi per accettare identità utilizzando CardSpace e Internet Explorer 7.0. La procedura comprende quattro esercizi:
Hello, World!
Attivare il selettore identità su richiesta
Accesso alle attestazioni nel token di protezione
Identificazione dell'utente in modo univoco
Per eseguire gli esercizi, è necessario configurare il sito Web. La configurazione viene eseguita utilizzando il file batch di installazione fornito nella cartella di esempio:
Setup.bat
Per ulteriori informazioni sull’installazione del sito Web e sulla risoluzione dei problemi, vedere Installazione dei certificati di esempio di CardSpace.
Hello World! Esempio
Nell’esempio Hello World viene illustrato il codice HTML richiesto per utilizzare il selettore di identità. Nell'esempio vengono utilizzati i file seguenti:
sample1.htm
login1.aspx
Il selettore di identità viene visualizzato utilizzando l'elemento <object>
o un oggetto di comportamento binario . La modalità più facile è includere l'elemento <object>
nel corpo dell’elemento <form>
che attiva il selettore di identità quando viene inviato il modulo. Di seguito viene riportato il file 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>
I risultati dell'elemento <object>
vengono inseriti direttamente nella pagina login1.aspx, dove si verifica l'elaborazione. Il selettore di identità viene visualizzato quando viene premuto il pulsante di invio.
I componenti importanti dell’elemento oggetto sono:
Elemento | Descrizione |
---|---|
|
Indica al browser di visualizzare l'oggetto Selettore di identità. |
|
Controlla il tipo di token generato dal selettore di identità; in questo caso, un token SAML 1.0. |
|
L'URL del Provider di identità che fornisce l'identità. In questo caso, si tratta di un URI cablato che richiama il provider incorporato, autocertificato. |
|
Il componente richiede all’utente per fornire un token dal Provider di identità (o dall’utente) con determinate attestazioni. Gli esempi di seguito riportati fanno parte dell’insieme predefinito per le schede autocertificate (personali). |
Premendo l’apposito pulsante, viene visualizzato il Selettore di identità CardSpace. Ciò consente all'utente di selezionare l’identità CardSpace da inviare.
Fare clic su Sì, scegli e invia una scheda. Se non sono presenti schede nel sistema, il Selettore di identità presenta la possibilità di creare o importare una scheda.
Facendo clic su Crea una nuova scheda personale verrà visualizzato lo schermo per la creazione di schede autocertificate.
Riempire i campi obbligatori, scegliere un'immagine, dare un nome alla scheda e fare clic su Salva. Una volta creata una Scheda personale che soddisfà le attestazioni elencate, inviare la scheda.
I dati della scheda crittografati vengono inviati alla pagina Login1.aspx seguente (mostrata di seguito in 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>
I dati della scheda crittografati vengono inviati alla pagina login1.aspx in VB.NET:
<%@ 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>
La pagina login1.aspx visualizza di nuovo il token crittografato sullo schermo.
Attivazione del Selettore di identità su richiesta
In questo esempio viene illustrato un metodo per visualizzare il Selettore di identità con maggiore flessibilità. Nell'esempio vengono utilizzati i file seguenti:
Sample2.htm
Login2.aspx
È possibile che gli sviluppatori desiderino maggiore flessibilità per quanto riguarda i tempi e la gestione della chiamata del Selettore di identità. Per visualizzare il Selettore di identità in un momento più indicato per una particolare applicazione, l'elemento <object>
utilizza uno script in grado di restituire il token crittografato su richiesta. Ciò viene illustrato nel file Sample2.htm riportato di seguito.
<!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>
L'elemento <object>
viene posizionato nell'intestazione del documento HTML e il Selettore di identità viene richiamato quando si accede alla proprietà del valore. Lo script di questo esempio posiziona il token XML nell'elemento <textarea>
che consente allo sviluppatore di visualizzare il contenuto prima dell’invio di <form>
.
Nota
Il testo del token nell'area di testo non corrisponde precisamente al testo del token nella pagina login2.aspx
dato che il browser sta eliminando la visualizzazione dei tag XML.
Accesso alle attestazioni
In questo esempio viene illustrato come utilizzare TokenProcessor.cs
per accedere alle attestazioni in una scheda inviata a un sito Web. Nell'esempio vengono utilizzati i file seguenti:
Sample3.htm
Login3.aspx
app_code\TokenProcessor.cs
Web.config
Per elaborare le attestazioni al di fuori dei dati crittografati, gli sviluppatori che utilizzano ASP.NET 2.0 possono utilizzare il codice di esempio TokenProcessor.cs
presentato in questo esercizio. La classe Token
gestisce interamente la decrittografia e la verifica del token, utilizzando le classi Windows Communication Foundation (WCF). La classe Token
viene utilizzata nella pagina di destinazione del post, in questo caso la pagina login3.aspx 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>
E 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>
Per ottenere i valori delle attestazioni dal token, utilizzare la proprietà Claims
. Quest’ultima prende l’URI della attestazione come parametro e restituisce il valore come string
. Gli URI per le schede autocertificate sono elencati più avanti in questo documento, ma per brevità, vengono predefiniti nella classe SelfIssued
.
Esistono dati di configurazione associati alla classe Token
. Nel file Web.config, possono essere individuati i seguenti elementi di configurazione:
<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>
Elemento | Valore | Descrizione |
---|---|---|
|
60 |
Facoltativo. Numero massimo di secondi in cui client e server possono essere sfalsati. |
|
<none> |
Facoltativo. Identificazione digitale del certificato da utilizzare per de crittografare i token. La classe del token ricerca automaticamente il certificato. |
|
My |
Facoltativo. Nome dell’Archivio del certificato SSL. In genere “My”. |
|
LocalMachine |
Facoltativo. Percorso dell'Archivio dei certificati SSL. In genere “LocalMachine”. |
|
PPID |
Facoltativo. URI per il tipo di attestazione utilizzato come tipo di attestazione che identifica l’utente in modo univoco. |
Quando il token è inserito alla pagina di accesso e viene decrittografato è possibile visualizzare i valori dell’attestazione.
Identificazione dell'utente in modo univoco
In questo esempio viene illustrato come utilizzare la classe Token
per identificare un utente in modo univoco. Nell'esempio vengono utilizzati i file seguenti:
Sample4.htm
Login4.aspx
app_code\TokenProcessor.cs
web.config
Dato che chiunque può creare una scheda con gli stessi valori per l’attestazione, è necessario poter identificare in modo univoco una particolare scheda, diversa dai valori dell’attestazione autocertificata. A tale fine, calcolare l’UniqueID
della scheda. UniqueID
è l’hash della chiave pubblica dell'autorità emittente e qualsiasi attestazione è univoca per l’autorità emittente in questione. Dato che le chiavi per la conversazione tra client e server vengono generate in modo casuale nella prima comunicazione, la chiave pubblica è univoca per ogni scheda; se si utilizza la stessa scheda autocertificata in più siti, viene creata una coppia di chiavi nuova ad ogni nuova associazione. Per l’attestazione univoca, l'Identificatore Personale Privato (PPID) della scheda è univoco per l'autorità emittente in questione. La proprietà UniqueID
calcola il valore hash per lo sviluppatore. Aggiunta del codice alla pagina login4.aspx 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[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>
E 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>
Il risultato è un valore hash di 20 caratteri, con codifica Base64, che può essere utilizzato in un database per identificare un visitatore in modo univoco.
Per modificare l’attestazione utilizzata per l'univocità, aggiungere la chiave seguente a Web.config e impostare il valore su un URI di attestazione diverso.
<add key="IdentityClaimType" value="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"/>
Informazioni sul token effettivo
Per ulteriori informazioni sul formato e utilizzo del token XML crittografato, consultare le risorse seguenti:
https://go.microsoft.com/fwlink/?LinkId=95951
Attestazioni in schede autocertificate
Nome = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname";
Indirizzo di posta elettronica = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";
Cognome = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname";
Indirizzo postale = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress";
Località = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality";
Stato/provincia = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress";
Codice postale = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode";
Paese = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/country";
Numero di telefono dell’abitazione = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone";
Altro telefono = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone";
Cellulare = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone";
Data di nascita = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth";
Sesso = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender";
PPID = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier";
Sito Web = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/website";
Glossario
Provider di Identità - L'agenzia (società, sito Web, organizzazione) che sta affermando attestazioni su un Soggetto (persona).
Selettore di identità – Il Selettore di identità è la finestra di dialogo che presenta le diverse identità digitali dell'utente e consente la selezione dell’identità digitale da inviare al Componente.
Componente - L'agenzia (sito Web, server o altra parte) che si basa sulle attestazioni presentate dal soggetto.
Soggetto - L'entità (l'utente) che ha effettuato attestazioni sulla propria identità. Il Soggetto mantiene sempre il controllo nel rilascio delle informazioni relative all’identità digitale personale al Componente.
Invia commenti su questo argomento a Microsoft.
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.