Cómo usar Windows CardSpace con Internet Explorer 7.0

Download sample

CardSpace proporciona a los usuarios la capacidad de administrar sus identidades digitales, y con Internet Explorer 7.0, los sitios Web pueden solicitar una identidad digital al usuario. Los ejercicios siguientes muestran los pasos para aceptar identidades mediante CardSpace e Internet Explorer 7.0. Hay cuatro ejercicios.

  • Hello, World!

  • Activar el selector de identidad a petición

  • Tener acceso a las notificaciones en el token de seguridad

  • Identificar al usuario de forma unívoca

Para realizar los ejercicios, es necesario configurar el sitio Web. La configuración se hace utilizando el archivo por lotes de instalación proporcionado en la carpeta de ejemplo:

Setup.bat

Para obtener más información sobre la instalación del sitio Web y la solución a algunos problemas, vea Instalación de certificados de ejemplo de CardSpace.

Hello World! Ejemplo

El ejemplo Hello World muestra el código HTML necesario para utilizar el selector de identidad. Este ejemplo utiliza los archivos siguientes:

sample1.htm

login1.aspx

El selector de identidad se muestra utilizando un elemento <object> o un objeto de comportamiento binario. La manera más fácil es incluir el elemento <object> en el cuerpo de un elemento <form>, que activa el selector de identidad cuando se envía el formulario. A continuación, se muestra el archivo 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>

Los resultados del elemento <object> se exponen directamente en la página login1.aspx, donde se produce el procesamiento. El selector de identidad muestra cuándo se presiona el botón de envío.

Los elementos importantes del elemento de objeto son:

Elemento Descripción

type="application/x-informationcard"

Indica al explorador que muestre el objeto del selector de identidad.

param name="tokenType"

Controla el tipo de token que el selector de identidad emite; en este caso, un token SAML 1.0.

param name="issuer"

La dirección URL del proveedor de identidad que proporciona la identidad. En este caso, un URI cableado que invoca el proveedor integrado, autoemisor.

param name="requiredClaims"

El usuario de confianza le pide al usuario que proporcione un token del proveedor de identidad (o el usuario) con ciertas notificaciones. Estos ejemplos forman parte del conjunto pre-definido para tarjetas autoemitidas (personal).

Cuando se presiona el botón, se muestra el selector de identidad CardSpace. Esto permite al usuario seleccionar una identidad CardSpace para enviar.

Elección de una tarjeta de Windows CardSpace

Haga clic en Sí, elegir enviar una tarjeta. Si no hay ninguna tarjeta en el sistema, el selector de identidad presenta la oportunidad de crear o importar una tarjeta.

Utilización de Windows CardSpace con Internet Explorer 7.0

Haga clic en Crear una nueva tarjeta personal y se mostrará la pantalla para crear tarjetas autoemitidas.

Edición de una tarjeta de Windows CardSpace

Rellene los campos obligatorios, elija una imagen, dé un nombre a la tarjeta y haga clic en Guardar. Cuando se ha creado una tarjeta personal que satisfaga las notificaciones enumeradas, envíe la tarjeta.

Envío de una tarjeta de Windows CardSpace a un sitio

Los datos de tarjeta cifrados se envían a la página Login1.aspx siguiente (que se muestra abajo en 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>

Los datos de tarjeta cifrados se envían a la página login1.aspx en 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 página login1.aspx muestra el token cifrado de nuevo en la pantalla.

Utilización de Windows CardSpace con Internet Explorer 7.0

Activar el selector de identidad a petición

Este ejemplo muestra un método para mostrar el selector de identidad con más flexibilidad. El ejemplo utiliza los archivos siguientes:

Sample2.htm

Login2.aspx

Los programadores pueden desear más flexibilidad en cuanto a los tiempos y la administración de la invocación del selector de identidad. Para mostrar el selector de identidad a una hora más apta para una aplicación determinada, se crean scripts del elemento <object> para devolver el token cifrado a petición. Esto se muestra en el archivo Sample2.htm siguiente.

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

El elemento <object> se coloca en el encabezado del documento HTML y se invoca el selector de identidad cuando se tiene acceso a la propiedad de valor. El script de este ejemplo coloca el token XML en un elemento <textarea> que permite al programador ver el contenido antes de que se envíe <form>.

Nota

El texto del token en el área de texto no coincide exactamente con el texto del token en la página login2.aspx porque el explorador está suprimiendo la presentación de las etiquetas XML.

Obtener acceso a las notificaciones

Este ejemplo muestra cómo utilizar TokenProcessor.cs para tener acceso a las notificaciones en una tarjeta enviada a un sitio Web. El ejemplo utiliza los archivos siguientes:

Sample3.htm

Login3.aspx

app_code\TokenProcessor.cs

Web.config

Para procesar las notificaciones fuera de los datos cifrados, los programadores que utilizan ASP.NET 2.0 pueden utilizar el código muestra TokenProcessor.cs presentado en este ejercicio. La clase Token administra todo el descifrado y comprobación del token, utilizando las clases Windows Communication Foundation (WCF). La clase Token se utiliza en la página de destino del envío, en este caso la página login3.aspx en 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>

Y en 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>

Para obtener los valores de las notificaciones del token, utilice la propiedad Claims. Esto toma el URI de la notificación como un parámetro y devuelve el valor como string. Los URI para tarjetas autoemitidas se listan más adelante en este documento pero, para ahorrar tiempo, están definidos en la clase SelfIssued.

Existen datos de configuración que acompañan a la clase Token. En el archivo Web.config, los elementos de configuración se pueden encontrar:

<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 Valor Descripción

MaximumClockSkew

60

Opcional. El número máximo de segundos que el cliente y el servidor pueden estar fuera del sesgo.

CertificateThumbprint

<none>

Opcional. La huella digital del certificado que se debe utilizar para descifrar los tokens. La clase de token busca automáticamente en el certificado.

StoreName

My

Opcional. El nombre de almacén del certificado SSL. Normalmente "My".

StoreLocation

LocalMachine

Opcional. La ubicación del almacén del certificado SSL. Normalmente "LocalMachine".

IdentityClaimType

PPID

Opcional. El URI para el tipo de notificación utilizado como la notificación que identifica unívocamente al usuario.

Cuando el token se envía a la página de inicio de sesión y se descifra, podemos ver los valores de notificación.

Utilización de Windows CardSpace con Internet Explorer 7.0

Identificar al usuario de forma unívoca

Este ejemplo muestra cómo utilizar la clase Token para identificar a un usuario de forma unívoca. Este ejemplo utiliza los archivos siguientes:

Sample4.htm

Login4.aspx

app_code\TokenProcessor.cs

web.config

Teniendo en cuenta que cualquiera puede crear una tarjeta con los mismos valores para la notificación, es necesario poder identificar de forma unívoca una tarjeta determinada, diferente de los valores de notificación de emisión propia. Esto se hace calculando UniqueID de la tarjeta. UniqueID es el hash de la clave pública del emisor y cualquier notificación única para ese emisor. Puesto que las claves para la conversación entre el cliente y el servidor se generan de forma aleatoria en la primera comunicación, la clave pública es única de la tarjeta –si utiliza la misma tarjeta autoemitida en varios sitios, se genera un nuevo par de claves con cada nueva asociación. Para la notificación única, el Identificador personal privado (PPID) de la tarjeta es único para ese emisor. La propiedad UniqueID calcula el valor con hash para el programador. Agregar el código a la página login4.aspx en 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>

Y en 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>

El resultado es un valor hash de 20 caracteres, codificado por base64, que se puede utilizar en una base de datos para identificar de manera unívoca a un visitante.

Utilización de Windows CardSpace con Internet Explorer 7.0

Para cambiar la notificación utilizada para la univocidad, agregue la clave siguiente a Web.config y cambie el valor a un URI de notificación diferente.

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

Acerca del token actual

Para obtener más información sobre el formato y la utilización del token XML, consulte los recursos siguientes:

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

Notificaciones en tarjetas de emisión propia

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

  • Dirección de correo electrónico = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";

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

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

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

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

  • Código postal = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode";

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

  • Teléfono fijo = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone";

  • Otro teléfono = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone";

  • Teléfono móvil = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone";

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

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

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

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

Glosario

  • Proveedor de identidad - La agencia (compañía, sitio Web, organización, usted mismo) que está validando las notificaciones sobre un sujeto (persona).

  • Selector de identidad - El selector de identidad es el diálogo que presenta las diferentes identidades digitales del usuario y permite la selección de una identidad pertinente para su envío al usuario de confianza.

  • Usuario de confianza - La agencia (sitio Web, servidor u otra parte) que confía en las notificaciones presentada por el sujeto.

  • Sujeto - La entidad (el usuario) que tiene notificaciones sobre su identidad. El sujeto siempre controla el lanzamiento de su información de identidad digital al usuario de confianza.

Footer image

Enviar comentarios sobre este tema a Microsoft.

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.