Utilizar CardSpace con wsHttpBinding
Este ejemplo muestra cómo configurar un wsHttpBindingpara utilizar unCardSpace en un servicio web.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
El ejemplo define un contrato ISecureCalculator
para mostrar el uso de demandas de identidad personales representado por CardSpace. CalculatorService
define e implementa un contrato de servicios denominado ISecureCalculator
como se muestra en el código muestra siguiente:
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ISecureCalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
[OperationContract]
string GetIdentity();
}
El servicio se configura para requerir un token de SAML proporcionado por CardSpace.
La implementación del servicio de la operación GetIdentity
extrae la notificación de Private-Personal-Identifier (PPID) y la devuelve en la respuesta. PrivatePersonalIdentifier
es una constante única con una característica de privacidad integrada generada por el emisor del token. El servicio puede utilizar este identificador para la búsqueda de la cuenta y autenticación, junto con otra información como la firma de emisor, y otras notificaciones. El PPID varía de un servicio a otro, aun cuando la misma tarjeta está seleccionada.
const string ppidClaimType =
"https://schemas.xmlsoap.org/ws/2005/05/identity/claims/ privatepersonalidentifier";
public string GetIdentity()
{
string identity=String.Empty;
AuthorizationContext ctx = OperationContext.Current.ServiceSecurityContext.AuthorizationContext;
foreach (ClaimSet claimSet in ctx.ClaimSets)
{
foreach (Claim claim in claimSet.FindClaims(ppidClaimType, null))
{
identity += claim.Resource as string;
}
}
return identity;
}
El servicio expone un extremo único, definido en el archivo de configuración (Web.config), que requiere CardSpace de los solicitantes, como se muestra en la configuración del ejemplo siguiente:
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="ServiceCredentials">
<!-- This endpoint is exposed at the base address provided by host: https://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="requireInfoCard"
contract="Microsoft.ServiceModel.Samples.ISecureCalculator" >
<identity>
<certificateReference
findValue="545c3b8e97d99fd75c75eb52c6908320088b4f50"
x509FindType="FindByThumbprint"
storeLocation="LocalMachine"
storeName="My" />
</identity>
</endpoint>
<!-- The mex endpoint is exposed at https://localhost/servicemodelsamples/service.svc/mex. -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="requireInfoCard">
<security mode="Message">
<message clientCredentialType="IssuedToken" />
</security>
</binding>
</wsHttpBinding>
</bindings>
El servicio también configura un comportamiento para especificar el certificado del servicio, que es utilizado por el cliente para autenticar el servicio y los mensajes seguros enviados al servicio.
<behaviors>
<serviceBehaviors>
<behavior name="ServiceCredentials">
<serviceMetadata httpGetEnabled="True"/>
<serviceCredentials>
<serviceCertificate
findValue="545c3b8e97d99fd75c75eb52c6908320088b4f50"
x509FindType="FindByThumbprint"
storeLocation="LocalMachine"
storeName="My" />
<issuedTokenAuthentication allowUntrustedRsaIssuers="true" />
</serviceCredentials>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
El cliente también se configura para requerir un token de SAML proporcionado por CardSpace, que produce que la interfaz de usuario CardSpace se inicie al realizar la primera solicitud al servicio. El usuario puede seleccionar una tarjeta de información adecuada para presentar al servicio. Después de seleccionar una tarjeta de la información, la solicitud se protege utilizando un token de SAML que representa la identidad. La operación GetIdentity
en el contrato ISecureCalculator
extrae la notificación PrivatePersonalIdentifer que se proporcionó en el token de SAML y lo devuelve al llamador.
El cliente comunica con el servicio utilizando una clase de cliente especificadaWCF generada por Service Metadata Utility Tool (Svcutil.exe). El archivo GeneratedProxy.cs contiene la clase de cliente Windows Communication Foundation (WCF) especificada.
La configuración para el cliente también se puede generar utilizando Service Metadata Utility Tool (Svcutil.exe). Service Metadata Utility Tool (Svcutil.exe) crea la configuración de extremo de cliente basada en los metadatos publicados por el servicio. En este ejemplo, la configuración del cliente se crea manualmente iniciándose con la configuración de servicio.
Se exige al cliente establecer clientCredentialType para IssuedToken y configurar certificateReference para permitir a CardSpace autenticar el servicio, como se muestra en la configuración del ejemplo siguiente:
<client>
<endpoint
address="https://localhost/ServiceModelSamples/service.svc/"
bindingConfiguration="requireInfoCard"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ISecureCalculator"
behaviorConfiguration="ClientCredentials">
<identity>
<certificateReference
findValue="545c3b8e97d99fd75c75eb52c6908320088b4f50"
x509FindType="FindByThumbprint"
storeLocation="CurrentUser"
storeName="TrustedPeople" />
</identity>
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="requireInfoCard">
<security mode="Message">
<message clientCredentialType="IssuedToken" />
</security>
</binding>
</wsHttpBinding>
</bindings>
Además de proporcionar el certificado del servicio en el extremo, el cliente debe especificar los certificados de los servicios en los que confía. Esto se logra definiendo un comportamiento para hacer referencia a los certificados en el almacén de certificados en el que el cliente confía.
<behaviors>
<endpointBehaviors>
<behavior name="ClientCredentials"
includeExceptionDetailInFaults="true">
<clientCredentials>
<serviceCertificate>
<defaultCertificate
findValue="545c3b8e97d99fd75c75eb52c6908320088b4f50"
x509FindType="FindByThumbprint"
storeLocation="CurrentUser"
storeName="TrustedPeople" />
<!--
Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
is in the user's Trusted People store, then it will be trusted without performing a
validation of the certificate's issuer chain. This setting is used here for convenience so that the
sample can be run without having to have certificates issued by a certificate authority (CA).
This setting is less secure than the default, ChainTrust. The security implications of this
setting should be carefully considered before using PeerOrChainTrust in production code.
-->
<authentication
revocationMode="NoCheck"
certificateValidationMode="PeerOrChainTrust" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
Al ejecutar ese cliente y presionar ENTRAR, el cliente llama a la operación GetIdentity
y la interfaz de usuario CardSpace se inicia.
Seleccione una tarjeta ya existente de CardSpace o cree una nueva tarjeta
Envíe la tarjeta haciendo clic en Enviar.
La notificación o notificaciones en CardSpace se envían al servicio como una serialización de token de SAML de CardSpace. La operación de servicio GetIdentity
responde con la notificación que se extrajo del token de SAML. El cliente llama a continuación las operaciones de la calculadora del servicio y las respuestas se muestran en la ventana de la consola.
Identity - (Private Personal ID) = LGGjXshcVQE1kFMnxccopDBGvYu6gVs2Aexx+4bMlbk=
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Para configurar, generar y ejecutar el ejemplo
Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración de equipos única o cruzada, utilice las instrucciones siguientes. En particular, ejecute Setup.bat desde el directorio específico del lenguaje bajo el directorio de instalación del ejemplo.
Nota
El archivo por lotes Setup.bat está diseñado para ejecutarse desde el símbolo del sistema de Windows SDK. Requiere que el punto de variable de entorno de MSSDK apunte al directorio donde está instalado el SDK. Esta variable de entorno se establece automáticamente dentro de un símbolo del sistema de Windows SDK. Para Windows Vista, asegúrese de que el soporte de compatibilidad de IIS 6.0 está instalado con IIS 7.0.
Para generar el código C#, o la edición Visual Basic de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Al terminar con el ejemplo, ejecute Cleanup.bat. desde el directorio específico del lenguaje bajo el directorio de instalación del ejemplo.
Para ejecutar el ejemplo en el mismo equipo
Importe el certificado Simple\SampleResources\Fabrikam-Contoso.pfx en el almacén de certificados LocalMachine/My (Personal). La contraseña para este certificado es xyz.
Nota
No importe el archivo Fabrikam-Contoso-Public.cer en lugar del archivo Fabrikam Contoso.pfx.
Ejecute Setup.bat desde el directorio específico del lenguaje bajo el directorio Simple. Esto instala el certificado Fabrikam-Contoso-Public.cer en el almacén de certificados de CurrentUser/TrustedPeople para el uso por el cliente. También proporciona el permiso de Servicio Web hospedado en IIS para leer la clave privada del certificado de Fabrikam instalada en el paso anterior.
Nota
En Windows Vista, importe manualmente el certificado y, a continuación, ejecute Setup.bat. No hacerlo puede producir el error "el conjunto de claves no existe".
Nota
Asegúrese de quitar los certificados ejecutando Cleanup.bat cuando termine con los ejemplos CardSpace. Otros ejemplos CardSpaceusan los mismos certificados. El archivo por lotes Setup.bat está diseñado para ejecutarse desde el símbolo del sistema de Windows SDK. Requiere que el punto de variable de entorno de MSSDK señale el directorio donde está instalado el SDK. Esta variable de entorno se establece automáticamente dentro de un símbolo del sistema de Windows SDK.
Genere el archivo de solución del ejemplo Visual Studio CardSpace.sln situado en la carpeta específica del lenguaje en la carpeta Simple .
Para comprobar que el servicio se está ejecutando, abra en la dirección siguiente en un explorador web: https://localhost/servicemodelsamples/service.svc, el cual muestra un resumen del servicio.
Iniciar client.exe desde Simple \<CS, VB>\client\bin.
Si el cliente y el servicio no se pueden comunicar, vea Sugerencias para la solución de problemas.
Para ejecutar el ejemplo en varios equipos
En el servidor que hospeda el servicio web:
Si el directorio de origen del ejemplo aún no existe en el servidor, copie el directorio TechnologySamples\Basic\Binding\WS\CardSpace\Simple en el servidor.
Importe el certificado Simple\SampleResources\Fabrikam-Contoso.pfx en el almacén de certificados LocalMachine/My (Personal). La contraseña para este certificado es xyz.
Nota
No importe el archivo Fabrikam-Contoso-Public.cer en lugar del archivo Fabrikam Contoso.pfx.
Ejecute Setup.bat desde el directorio específico del lenguaje bajo el directorio Simple.
Nota
Setup.bat instala el certificado requerido por el cliente en CurrentUser/TrustedPeople y copia las imágenes del logotipo en el directorio virtual ServiceModelSamples. Para evitar esto, instale el certificado del servicio, en lugar de ejecutar Setup.bat.
Genere el proyecto Simple\<CS,VB>\service\service.csproj.
Para comprobar que el servicio se está ejecutando, abra la dirección siguiente en un explorador web: https://localhost/servicemodelsamples/service.svc, el cual muestra un resumen del servicio.
Nota
Cuando haya terminado de ejecutar el ejemplo en el servidor, ejecute Cleanup.bat desde el directorio específico del lenguaje en la carpeta Simple.
En el equipo que hospeda el cliente:
Si el directorio de origen del ejemplo aún no existe en el equipo, copie el directorio TechnologySamples\Basic\Binding\WS\CardSpace\Simple en el equipo.
Ejecute Setup.bat desde el directorio específico del lenguaje bajo el directorio Simple. No necesita instalar el certificado del servicio contenido en Fabrikam-Contoso.pfx
Genere el proyecto Simple\<CS,VB>\client\client.csproj.
En el archivo client\bin\client.exe.config, cambie la dirección en
<endpoint address="
https://localhost/ServiceModelSamples/service.svc" .../>
para que coincida con la nueva dirección del servicio web.
Ejecute client\bin\client.exe.
Nota
Cuando haya terminado de ejecutar el ejemplo, ejecute Cleanup.bat.
Si el cliente y el servicio no se pueden comunicar, vea Sugerencias para la solución de problemas.
Para limpiar después del ejemplo
- Desde el directorio específico del lenguaje en el directorio de instalación del ejemplo, ejecute Cleanup.bat.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.