Utilizzo di Windows CardSpace con Internet Explorer 7.0

Download sample

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

type="application/x-informationcard"

Indica al browser di visualizzare l'oggetto Selettore di identità.

param name="tokenType"

Controlla il tipo di token generato dal selettore di identità; in questo caso, un token SAML 1.0.

param name="issuer"

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.

param name="requiredClaims"

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.

Scelta di una scheda di Windows CardSpace

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.

Utilizzo di Windows CardSpace con Internet Explorer 7.0

Facendo clic su Crea una nuova scheda personale verrà visualizzato lo schermo per la creazione di schede autocertificate.

Modifica di una scheda di Windows CardSpace

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.

Invio di una scheda di Windows CardSpace a un sito

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.

Utilizzo di Windows CardSpace con Internet Explorer 7.0

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

MaximumClockSkew

60

Facoltativo. Numero massimo di secondi in cui client e server possono essere sfalsati.

CertificateThumbprint

<none>

Facoltativo. Identificazione digitale del certificato da utilizzare per de crittografare i token. La classe del token ricerca automaticamente il certificato.

StoreName

My

Facoltativo. Nome dell’Archivio del certificato SSL. In genere “My”.

StoreLocation

LocalMachine

Facoltativo. Percorso dell'Archivio dei certificati SSL. In genere “LocalMachine”.

IdentityClaimType

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.

Utilizzo di Windows CardSpace con Internet Explorer 7.0

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.

Utilizzo di Windows CardSpace con Internet Explorer 7.0

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.

Footer image

Invia commenti su questo argomento a Microsoft.

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.