Partager via


Using CardSpace With wsHttpBinding

Cet exemple montre comment configurer wsHttpBinding pour utiliser CardSpace dans un service Web.

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

L'exemple définit un contrat ISecureCalculator pour illustrer l'utilisation de revendications d'identité personnelle représentées par CardSpace. CalculatorService définit et implémente un contrat de service appelé 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 la revendication PPID (Private-Personal-Identifier) et la retourne dans la réponse. PrivatePersonalIdentifier est une constante unique avec une fonctionnalité de confidentialité intégrée générée par l'émetteur du jeton. Le service peut utiliser cet identificateur pour l'authentification et la recherche de compte, ainsi que d'autres informations telles que la signature de l'émetteur, et autres revendications. Le PPID varie d'un service à un autre, même si la même carte est sélectionnée.

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

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

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 PrivatePersonalIdentifer fournie dans le jeton SAML et la retourne à l'appelant.

Le client communique avec le service à l'aide d'une classe de client WCF typée qui est générée par Service Metadata Utility Tool (Svcutil.exe). Cette classe de client Windows Communication Foundation (WCF) typée est contenue dans le fichier GeneratedProxy.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 affecter IssuedToken à clientCredentialType et 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="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>

Outre la fourniture du certificat de service dans le point de terminaison, le client doit spécifier les certificats des services qu'il approuve. Cela s'effectue en définissant un comportement permettant de référencer les certificats dans le magasin de certificats que le client approuve.

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

Lorsque vous exécutez ce client et appuyez sur ENTER, il 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.

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.

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 suivantes. En particulier, exécutez Setup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire d'installation de l'exemple.

    ms751504.note(fr-fr,VS.90).gifRemarque :
    Le fichier de commandes Setup.bat est conçu pour être exécuté à 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 sur 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 Windows SDK. Pour Windows Vista, vérifiez que la compatibilité IIS 6.0 est installée 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 Simple\SampleResources\Fabrikam-Contoso.pfx dans le magasin de certificats LocalMachine/My (Personal). Le mot de passe pour ce certificat est xyz.

    ms751504.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 Simple. Cette opération installe le certificat de 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.

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

    ms751504.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. Le fichier de commandes Setup.bat est conçu pour être exécuté à 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 sur 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 Windows SDK.

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

  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 de Simple\<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 Web :

    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\Simple vers celui-ci.

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

      ms751504.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 Simple.

      ms751504.note(fr-fr,VS.90).gifRemarque :
      Setup.bat installe le certificat requis par le client dans CurrentUser/TrustedPeople et copie les images de logo vers le répertoire virtuel ServiceModelSamples. Pour éviter cela, installez le certificat du service, au lieu d'exécuter Setup.bat.

    4. Générez le projet Simple\<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.

      ms751504.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 Simple.

  2. 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\Simple vers celui-ci.
    2. Exécutez Setup.bat à partir du répertoire correspondant à votre langue situé dans le répertoire Simple. Il n'est pas nécessaire d'installer le certificat de service contenu dans Fabrikam-Contoso.pfx.
    3. Générez le projet Simple\<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 Web.
  3. Exécutez client\bin\client.exe.

    ms751504.note(fr-fr,VS.90).gifRemarque :
    Après avoir exécuté l'exemple, exécutez Cleanup.bat.

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