Partager via


CardSpace Federation

Cet exemple montre comment configurer une liaison personnalisée pour utiliser un CardSpace dans un service Web.

ms752259.note(fr-fr,VS.90).gifRemarque :
La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent en fin de rubrique.

Cet exemple définit un contrat ISecureCalculator pour illustrer l'utilisation de revendications d'identité personnelle représentées par une carte d'informations. CalculatorService définit et implémente un contrat de service nommé ISecureCalculator, tel qu'indiqué dans l'exemple de code suivant.

[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();
}

Le service est configuré pour exiger un jeton SAML fourni par CardSpace.

L'implémentation de service de l'opération GetIdentity extrait toutes les revendications demandées initialement par le service.

public string GetIdentity()
{
    string identity = String.Empty;

    AuthorizationContext ctx = OperationContext.Current.ServiceSecurityContext.AuthorizationContext;
    
    foreach (ClaimSet claimSet in ctx.ClaimSets)
    {
        foreach (Claim claim in claimSet)
        {
            identity += "[" + claim.Resource as string + "] ";
        }
    }
    return identity;
}

Le service expose un point de terminaison unique, défini dans le fichier de configuration (Web.config), qui requiert CardSpace auprès des demandeurs, tel qu'indiqué dans l'exemple de configuration suivant.

<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="wsFederationHttpBinding"
              bindingConfiguration="requireInfoCard"
              contract="Microsoft.ServiceModel.Samples.ISecureCalculator" >
      <identity>
        <certificateReference findValue="545c3b8e97d99fd75c75eb52c6908320088b4f50" 
                              x509FindType="FindByThumbprint" 
                              storeLocation="LocalMachine" 
                              storeName="My" />
      </identity>
    </endpoint>
    <!-- the mex endpoint is explosed at https://localhost/servicemodelsamples/service.svc/mex -->
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>
</services>

<bindings>
  <wsFederationHttpBinding>
    <binding name="requireInfoCard">
      <security mode="Message">
        <message issuedTokenType="urn:oasis:names:tc:SAML:1.0:assertion">
          <claimTypeRequirements>
            <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"/>
            <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"/>
            <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname"/>
            <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifer"/>
          </claimTypeRequirements>
          <issuer address="https://schemas.xmlsoap.org/ws/2005/05/identity/issuer/self"/>
        </message>
      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

Le service configure également un comportement pour spécifier le certificat de service, lequel est utilisé par le client pour authentifier les messages de services et sécurisés envoyés au service.

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

Le client est également configuré pour exiger un jeton SAML fourni par CardSpace, ce qui déclenche le lancement de l'interface utilisateur CardSpace lors de la première demande au service. L'utilisateur peut sélectionner une carte d'informations appropriée à présenter au service. Après avoir sélectionné une carte d'informations, la demande est sécurisée à l'aide d'un jeton SAML qui représente l'identité. L'opération GetIdentity sur le contrat ISecureCalculator extrait la revendication d'adresse de messagerie fournie dans le jeton SAML et la retourne à l'appelant.

Le client communique avec le service à l'aide d'une classe de client Windows Communication Foundation (WCF) typée qui est générée par Service Metadata Utility Tool (Svcutil.exe). Cette classe de client WCF typée est contenue dans le fichier GeneratedClient.cs.

La configuration du client peut également être générée à l'aide de Service Metadata Utility Tool (Svcutil.exe). Service Metadata Utility Tool (Svcutil.exe) crée la configuration de point de terminaison client en fonction des métadonnées publiées par le service. Dans cet exemple, la configuration du client est créée manuellement, en commençant par la configuration du service.

Le client doit configurer certificateReference afin de permettre à CardSpace d'authentifier le service, tel qu'indiqué dans l'exemple de configuration suivant.

   <client>
      <endpoint address="https://localhost/ServiceModelSamples/service.svc/"
                bindingConfiguration="requireInfoCard" 
                binding="wsFederationHttpBinding"
                contract="Microsoft.ServiceModel.Samples.ISecureCalculator"
                behaviorConfiguration="ClientCredentials">
        <identity>
          <certificateReference
          findValue="545c3b8e97d99fd75c75eb52c6908320088b4f50" 
          x509FindType="FindByThumbprint"
          storeLocation="CurrentUser" 
          storeName="TrustedPeople" />
        </identity>
      </endpoint>
    </client>

    <bindings>
      <wsFederationHttpBinding>
        <binding name="requireInfoCard">
          <security mode="Message">
            <message issuedTokenType="urn:oasis:names:tc:SAML:1.0:assertion">
              <claimTypeRequirements>
                <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"/>
                <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"/>
                <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname"/>
                <add claimType  ="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"/>
              </claimTypeRequirements>
              <issuer address="https://schemas.xmlsoap.org/ws/2005/05/identity/issuer/self"/>
            </message>
          </security>
        </binding>
      </wsFederationHttpBinding>
    </bindings>

Outre la fourniture du certificat de service dans le point de terminaison, le client doit spécifier les certificats des services qu'il approuve. Pour ce faire, il faut définir un comportement permettant de référencer les certificats dans le magasin de certificats que le client approuve.

    <behaviors>
      <endpointBehaviors>
        <behavior name="ClientCredentials" >
          <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>

Lorsque vous exécutez ce client et que vous appuyez sur ENTRÉE, le client appelle l'opération GetIdentity et l'interface utilisateur CardSpace démarre.

  • Sélectionnez un carte existante dans CardSpace ou créez une nouvelle carte.
  • Cliquez sur Send pour soumettre la carte.

La ou les revendications de votre CardSpace sont envoyées au service sous forme d'une sérialisation de jeton SAML de votre CardSpace. L'opération GetIdentity du service répond avec la revendication extraite du jeton SAML. Le client appelle ensuite les opérations de calculatrice du service et les réponses s'affichent dans la fenêtre de console.

claims requested by the service = [System.Byte[]] [someone@example.com] [Someone] [Example] [IdjUW0O7xWVaga5AODCOuM070Ll9SfsPtYYfo8pKi7s=]
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.

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d'avoir effectué la procédure indiquée dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.

  2. Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions fournies dans les procédures ci-dessous. En particulier, exécutez Setup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'installation de l'exemple.

    ms752259.note(fr-fr,VS.90).gifRemarque :
    Le fichier de commandes Setup.bat est conçu pour s'exécuter à partir d'une invite de commandes du Kit de développement Windows SDK. La variable d'environnement du Kit de développement MS SDK doit pointer vers le répertoire d'installation du Kit de développement SDK. Cette variable est définie automatiquement dans une invite de commandes du Kit de développement logiciel Windows. Pour Windows Vista, assurez-vous que le support de compatibilité IIS 6.0 est installé avec IIS 7.0.

  3. Pour générer l'édition C# ou Visual Basic de la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.

  4. Une fois l'exemple terminé, exécutez Cleanup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'installation de l'exemple.

Pour exécuter l'exemple sur le même ordinateur

  1. Importez le certificat <CS,VB>\SampleResources\Fabrikam-Contoso.pfx dans le magasin de certificats LocalMachine/My (Personal). Le mot de passe pour ce certificat est xyz.

    ms752259.note(fr-fr,VS.90).gifRemarque :
    N'importez pas le fichier Fabrikam-Contoso-Public.cer au lieu du fichier Fabrikam-Contoso.pfx.

  2. Exécutez Setup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'exemples. Cette opération installe le certificat Fabrikam-Contoso-Public.cer dans le magasin de certificats CurrentUser/TrustedPeople pour que le client l'utilise. Elle autorise également le service Web hébergé par IIS à lire la clé privée du certificat Fabrikam installé à l'étape précédente.

    ms752259.note(fr-fr,VS.90).gifRemarque :
    Sur Windows Vista, importez manuellement le certificat, puis exécutez Setup.bat. Si vous ne le faites pas, une erreur "le jeu de clés n'existe pas" risque d'être générée.

    ms752259.note(fr-fr,VS.90).gifRemarque :
    Assurez-vous de supprimer les certificats en exécutant Cleanup.bat une fois les exemples CardSpace terminés. D'autres exemples CardSpace utilisent ces mêmes certificats.

  3. Générez l'exemple de fichier solution Visual Studio CardSpace.sln situé dans le dossier correspondant à votre langue du dossier d'exemples.

  4. Pour vérifier que le service s'exécute, ouvrez dans un navigateur Web l'adresse suivante qui affiche un résumé du service : https://localhost/servicemodelsamples/service.svc.

  5. Lancez client.exe à partir du répertoire <CS,VB>\Client\Bin.

  6. Si le client et le service ne parviennent pas à communiquer, consultez Conseils de dépannage.

Pour exécuter l'exemple sur plusieurs ordinateurs

  1. Sur le serveur hébergeant le service :

    1. Si le répertoire source de l'exemple n'existe pas encore sur le serveur, copiez le répertoire TechnologySamples\Basic\Binding\ws\CardSpace\UsingWsFederation vers celui-ci.

    2. Importez le certificat <CS,VB>\SampleResources\Fabrikam-Contoso.pfx dans le magasin de certificats LocalMachine/My (Personal). Le mot de passe pour ce certificat est xyz.

      ms752259.note(fr-fr,VS.90).gifRemarque :
      N'importez pas le fichier Fabrikam-Contoso-Public.cer au lieu du fichier Fabrikam-Contoso.pfx.

    3. Exécutez Setup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'exemples.

      ms752259.note(fr-fr,VS.90).gifRemarque :
      Setup.bat installe le certificat requis par le client dans CurrentUser/TrustedPeople et copie les images de logo dans le répertoire virtuel ServiceModelSamples. Pour éviter cela, installez le certificat du service, au lieu d'exécuter Setup.bat. Le fichier de commandes Setup.bat est conçu pour s'exécuter à partir d'une invite de commandes du Kit de développement Windows SDK. La variable d'environnement du Kit de développement MS SDK doit pointer vers le répertoire d'installation du Kit de développement SDK. Cette variable est définie automatiquement dans une invite de commandes du Kit de développement logiciel Windows.

    4. Générez le projet <CS,VB>\Service\Service.csproj.

    5. Pour vérifier que le service s'exécute, ouvrez dans un navigateur Web l'adresse suivante qui affiche un résumé du service : https://localhost/servicemodelsamples/service.svc.

ms752259.note(fr-fr,VS.90).gifRemarque :
Après avoir exécuté l'exemple sur le serveur, exécutez Cleanup.bat à partir du répertoire correspondant à votre langue situé dans le dossier d'exemples.

  1. Sur l'ordinateur hébergeant le client :
    1. Si le répertoire source de l'exemple n'existe pas encore sur l'ordinateur, copiez le répertoire TechnologySamples\Basic\Binding\ws\CardSpace\UsingWsFederation sur celui-ci.
    2. Exécutez Setup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'exemples. Il n'est pas nécessaire d'installer le certificat de service contenu dans Fabrikam-Contoso.pfx.
    3. Générez le projet <CS,VB>\Client\Client.csproj.
    4. Dans le fichier client\bin\client.exe.config, modifiez l'adresse dans <endpoint address=" https://localhost/ServiceModelSamples/service.svc" .../> afin qu'elle corresponde à la nouvelle adresse du service.
  2. Exécutez Client\Bin\Client.exe.
ms752259.note(fr-fr,VS.90).gifRemarque :
Après avoir exécuté l'exemple, exécutez Cleanup.bat.

  1. Si le client et le service ne parviennent pas à communiquer, consultez la rubrique Conseils de dépannage.

Pour procéder au nettoyage après exécution de l'exemple

  1. Exécutez Cleanup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'installation de l'exemple.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.