Cet article fait partie d'une série d'articles en quatre parties sur la création d'un service Web prenant en charge les revendications et sa consommation à partir de SharePoint Business Connectivity Services (SharePoint BCS). Depuis peu que je travaille avec l'authentification basée sur les revendications, l'expérience que j'en fais est qu'il n'y a pas énormément d'étapes pour la faire fonctionner, mais si vous commettez la moindre erreur cela ne fonctionnera tout simplement pas et demandera un peu d'efforts afin de déterminer le problème. Mon approche dans les articles de cette série est de fournir certaines procédures avec des petites étapes, accompagnées d'instructions pour valider, tout au long du parcours, que ce que vous avez fait au fur et à mesure fonctionne correctement.

Langage/Outil/Technologie : SharePoint 2010, Business Connectivity Services, WCF, C#, Visual Studio 2010, WIF.

Commentez ce tutoriel : Commentez

- Titre : Création d'un service Web prenant en charge les revendications et sa consommation à partir de SharePoint BCS

- Auteurs : Eric White, Deepin Prayag

- Parution : 6 février 2013

- Mise à jour : 12 février 2013

- Licence : Copyright © 2013 Eric White. CDATA[Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC. Cette page est déposée à la SACD.

Sommaire

- Traduction

- Introduction

- Établissement de la confiance entre un service Web WCF et le Security Token Service de SharePoint 2010

- Créer un certificat auto-signé

- Lier le certificat à https

- Exporter le certificat auto-signé

- Établir la confiance entre le service Web et le serveur SharePoint

- Déterminer l'empreinte du certificat du Security Token Service de SharePoint

- Remplacer le Web.config pour le service Web

- Conclusion

- Remerciements

Traduction

Cet article est la traduction la plus fidèle possible de l'article original d'Eric White, Establishing Trust between a WCF Web Service and the SharePoint 2010 Security Token Service.

Introduction

Cet article est le troisième d'une série d'articles en quatre parties qui montre comment créer un service Web prenant en charge les revendications et comment le consommer à partir de SharePoint Business Connectivity Services. Dans le premier article de la série, nous avons vu comment créer un service Web, que nous avons compilé et que nous avons hébergé sous IIS. Dans le deuxième article de la série, nous avons amélioré le service Web WCF que nous avions créé dans la première partie, en ajoutant du code qui utilise WIF pour déterminer l'identité de l'appelant. Cette dernière a ensuite été écrite dans un fichier journal. Dans cet article, nous utiliserons Business Connectivity Services (BCS) pour nous connecter à et consommer ce service Web.

Vous pouvez consulter les autres articles de la série ici.

Prise en main de la création d'un service Web WCF

Montre comment créer un service Web très simple en utilisant WCF. Montre comment héberger ce service Web en utilisant IIS.

Détermination de l'identité de l'appelant au sein du service Web WCF

Améliore l'exemple développé dans l'article précédent de sorte que le service Web puisse rapporter sur l'identité de son appelant de manière rigoureuse.

Établissement de la confiance entre un service Web WCF et le Security Token Service de SharePoint 2010
(le présent article)

Configure l'exemple développé dans l'article précédent de sorte qu'il utilise un certificat auto-signé pour prendre en charge une connexion sécurisée.

Consommation d'un service Web WCF prenant en charge les revendications en tant que type de contenu externe SharePoint 2010

Examine pas à pas la procédure pour la consommation d'un service Web prenant en charge les revendications en tant que type de contenu externe SharePoint 2010.

Établissement de la confiance entre un service Web WCF et le Security Token Service de SharePoint 2010

Dans cet article nous allons activer la liaison fédérée avec HTTP pour le service Web et établir la confiance entre le service Web WCF et le Security Token Service de SharePoint 2010.

Chaque installation serveur de SharePoint possède son propre service d'émission de jeton de sécurité. Tandis qu'il est possible d'établir des relations de confiance avec des services d'émission de jeton de sécurité qui ne font pas partie d'une installation SharePoint, le scénario le plus courant est de loin celui dans lequel vous établissez une relation de confiance avec le Security Token Service (STS) de SharePoint, par conséquent, cet article se concentre sur ce scénario.

Pour suivre les procédures indiquées dans cet article, vous devez disposer de deux serveurs configurés. L'un des serveurs doit être en train d'exécuter le service Web WCF que vous avez développé dans les deux premiers articles de cette série. L'autre doit posséder une instance installée et en cours d'exécution de SharePoint Server 2010. J'ai testé ces procédures sur une instance de SharePoint Server 2010 nouvellement installée.

Le diagramme suivant indique les différents acteurs de ce scénario. L'utilisateur se connecte au « front end » Web (WFE), qui communique avec le Runtime BDC (Business Data Connectivity). Le runtime du BDC appelle le Security Token Service (STS) de SharePoint et le service Web.

Créer un certificat auto-signé

Si vous possédez déjà un certificat valide émis par une autorité de certification, vous pouvez alors utiliser ce certificat au lieu de créer un certificat auto-signé.

1. Démarrez le . Cliquez sur > > .

2. Sélectionnez la machine dans le volet . sur .

3. Cliquez sur .

4. L'Assistant vous demandera de spécifier un nom convivial. Il est utile de lui fournir un nom qui indique la machine d'où le certificat a été issu. Dans mon cas, je lui ai fourni le nom de l'ordinateur où est hébergé le service Web.

Lier le certificat à https

1. Dans le Gestionnaire Internet Information Services (IIS), faites un sur le site qui contient l'application de service Web, puis cliquez sur .

2. Si vous avez suivi les procédures indiquées dans cette série et que vous avez demarré avec un système d'exploitation nouvellement installé, vous allez constater qu'il n'y point de liaison https. Cliquez sur .

3. Dans la boîte de dialogue , sélectionnez dans la liste déroulante .

4. Ensuite, sélectionnez le certificat SSL que vous venez tout juste de créer.

5. Cliquez sur le bouton pour voir les détails à propos du certificat. En particulier, nous sommes intéressés par la propriété .

Notez la valeur du champ Objet, car vous en aurez besoin lorsque vous vous connecterez au service à l'aide de Microsoft SharePoint Designer 2010. Vous aurez besoin de cette valeur lors de la neuvième étape de la procédure indiquée dans le quatrième article de cette série.

6. Cliquez sur , puis sur .

Ensuite, vous devez établir la confiance entre l'ordinateur qui consomme le service Web (le serveur SharePoint 2010) et l'ordinateur qui héberge le service Web WCF. Pour ce faire, vous exportez le certificat que vous venez de créer, vous le copiez sur l'ordinateur qui consomme le service Web, puis vous importez le certificat en utilisant un cmdlet PowerShell.

Exporter le certificat auto-signé

1. Démarrez le Microsoft Management Console. La manière la plus facile est de saisir dans la zone de recherche du menu Démarrer.

2. Dans la console, sélectionnez >

3. Dans la boîte de dialogue , dans la liste , cliquez sur . Cliquez, ensuite, sur le bouton .

4. Lorsque vous effectuez l'ajout, le vous demande d'indiquer le compte pour lequel vous allez gérer les certificats. Cliquez sur , puis cliquez sur .

5. Cliquez sur , puis cliquez sur .

6. Maintenant, recherchez le certificat que vous venez de créer. Développez , puis , ensuite cliquez sur . Vous devrez trouver un certificat émis pour l'ordinateur sur lequel vous êtes, et émis par ce même ordinateur.

7. Faites un sur le certificat, cliquez sur , puis cliquez sur . Cela démarre l'Assistant .

8. Dans la boîte de dialogue de Bienvenue, cliquez sur Suivant.

9. Dans la boîte de dialogue suivante, sélectionnez « Non, ne pas exporter la clé privée », puis cliquez sur Suivant.

10. Dans la boîte de dialogue suivante, le paramètre par défaut est Binaire codé DER X.509 (.cer). Ne modifiez pas ce paramètre, et cliquez sur Suivant.

11. Dans la boîte de dialogue suivante, spécifiez le chemin d'accès et le nom du fichier de certificat. Dans mon cas, le nom de l'ordinateur étant ericwhit209, j'ai nommé le certificat ericwhit209.cer. Cliquez sur Suivant.

12. Cliquez sur Terminer. L'Assistant vous indiquera si l'exportation s'est effectuée avec succès ou non.

Maintenant que vous avez exporté le certificat auto-signé, vous devez copier ce certificat sur l'ordinateur qui exécute SharePoint Server 2010, et l'importer dans SharePoint.

Établir la confiance entre le service Web et le serveur SharePoint

Vous ne devez effectuer cette procédure que si vous utilisez un certificat auto-signé. Si vous utilisez un certificat émis par une autorité de certification, vous n'avez pas besoin de suivre les étapes indiquées dans cette procédure. Celle-ci active la validation du certificat lorsque BCS appelle le service Web en utilisant Https.

1. Copiez le fichier de certificat depuis l'ordinateur qui héberge le service Web vers l'ordinateur qui héberge SharePoint Server 2010.

Les étapes suivantes doivent être réalisées sur l'ordinateur qui héberge le serveur SharePoint.

2. Démarrez . Exécutez l'outil en tant qu'administrateur.

3. Accédez au répertoire dans lequel vous avez déposé le certificat lorsque vous l'avez copié depuis l'ordinateur qui héberge le service Web vers l'ordinateur qui heberge le serveur SharePoint.

4. Placez le certificat dans une variable PowerShell, puis envoyez le certificat à l'autorité de certification racine approuvée SharePoint. Saisissez le code suivant dans la console PowerShell, en remplaçant par le nom que vous avez attribué au certificat lorsque vous l'avez exporté et copié.

$cert = Get-PfxCertificate .\ericwhit209.cer
New-SPTrustedRootAuthority -Certificate $cert -Name ericwhit209

Une fois le certificat soumis, le cmdlet renverra quelque chose qui ressemble à ceci :

Vous pouvez y voir le nom de l'émetteur, sa plage de validité, et diverses autres informations.

Maintenant que https a été lié, vous pouvez mettre à jour le Web.config afin que le service Web WCF puisse l'utiliser. Toutefois, avant de pouvoir mettre à jour le Web.config, vous devez déterminer l'empreinte du certificat du Security Token Service (STS) de SharePoint sur l'ordinateur qui héberge le serveur SharePoint.

Déterminer l'empreinte du certificat du Security Token Service de SharePoint

Cette procédure et la procédure suivant celle-ci sont en fait celles qui établissent la confiance entre le STS SharePoint et le service Web.

1. Sur la machine serveur qui est en train d'exécuter SharePoint Server 2010, démarrez le Microsoft Management Console, et ajoutez le composant logiciel enfichable du certificat.

2. Développez , puis . Cliquez sur le nœud .

3. Le certificat qui nous intéresse est le premier de la liste émis pour le . dessus.

4. À la prochaine étape, vous devez copier l'empreinte du certificat dans le presse-papiers. Cette étape comporte une petite difficulté. Si vous copiez le premier espace qui apparaît dans la zone de texte, vous allez copier une marque d'ordre d'octet (BOM) invisible dans le presse-papiers à cet emplacement au sein de la chaîne. Vous devez veiller à sélectionner la chaîne de chiffres hexadécimaux sans sélectionner ce premier caractère.

Copiez l'empreinte depuis la boîte de dialogue Certificat dans le presse-papiers.

5. Supprimez les espaces du texte de l'empreinte. Le texte copié à partir du gestionnaire de Certificat est le suivant, avec des espaces séparant les octets hexadécimaux :

dd be 98 f4 c2 db e6 d7 8c ec 14 d0 d0 0a b8 90 d1 53 08 f6

Démarrez le Bloc-notes, collez-y le texte, puis supprimez les espaces afin que la chaîne soit comme suit :

ddbe98f4c2dbe6d78cec14d0d00ab890d15308f6

Il s'agit de l'une des empreintes dont vous aurez besoin à l'étape suivante.

Vous pouvez vérifier que vous n'avez pas copié la marque d'ordre d'octet en essayant d'enregistrer le fichier avec le codage ANSI. Dans le Bloc-notes, sur le menu cliquez sur Fichier > Enregistrer sous, spécifiez un nom de fichier, puis cliquez sur Enregistrer.

Si, comme il se doit, vous n'avez pas sélectionné le caractère qui contient la marque d'ordre d'octet (BOM), le fichier s'enregistrera correctement. Par contre, si vous avez à tort sélectionné la marque d'ordre d'octet (BOM), le Bloc-notes vous indiquera que le fichier contient des caractères au format Unicode qui seront perdus si vous enregistrez le fichier en tant que texte au codage ANSI.

Copiez et enregistrez cette empreinte de manière a pouvoir la coller dans le Web.config pour le service Web.

Remplacer le Web.config pour le service Web

Ouvrez le projet pour le service Web dans Visual Studio. Remplacez Web.config par le contenu du listing suivant. Il y a quatre valeurs que vous allez devoir mettre à jour dans ce Web.config.

1. Mettez à jour l'URL du point de terminaison pour le Security Token Service de SharePoint. Vous ne devez mettre à jour que le nom de l'ordinateur. Étant donné le nom de l'ordinateur, l'URL du point de terminaison pour le Security Token Service de SharePoint est bien connue.

2. Mettez à jour l'URL de découverte de métadonnées pour le Security Token Service de SharePoint. Comme dans le cas de l'URL du point de terminaison, vous ne devez mettre à jour que le nom de l'ordinateur.

3. Mettez à jour l'empreinte pour le Security Token Service de SharePoint avec la valeur que vous aviez déterminée plus tot dans cet article.

4. Mettez à jour le nom du jeton de l'émetteur. Ce nom doit être unique parmi les émetteurs approuvés au sein du registre des noms d'émetteurs. Aux fins du présent article, utilisez le nom de serveur de l'ordinateur qui est en train d'héberger le service Web WCF.

À ce stade, le service Web est configuré correctement.

Web.config

<?xml version="1.0"?> <configuration>
<configSections>
<section name="microsoft.identityModel"
type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtTransportLevel="true" />
</diagnostics>
<services>
<service behaviorConfiguration="CustomersService.Service1Behavior"
name="CustomersService.Customers">
<endpoint address=""
binding="ws2007FederationHttpBinding"
contract="CustomersService.ICustomers"
bindingConfiguration="Customers_ws2007FedHttpBinding">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CustomersService.Service1Behavior">
<federatedServiceHostConfiguration name="CustomersService.Customers"/>
<!-- To avoid disclosing metadata information, set the value below to false and
remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value
below to true.  Set to false before deployment to avoid disclosing exception
information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="AsymmetricWindowsHttpBinding">
<security defaultAlgorithmSuite="Basic256Sha256"
authenticationMode="SspiNegotiated"
requireDerivedKeys="true"
securityHeaderLayout="Strict"
includeTimestamp="true"
keyEntropyMode="CombinedEntropy"
messageProtectionOrder="SignBeforeEncryptAndEncryptSignature"
messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10"
requireSecurityContextCancellation="true"
requireSignatureConfirmation="false">
<localClientSettings cacheCookies="true"
detectReplays="true"
replayCacheSize="900000"
maxClockSkew="00:05:00"
maxCookieCachingTime="Infinite"
replayWindow="00:05:00"
sessionKeyRenewalInterval="10:00:00"
sessionKeyRolloverInterval="00:05:00"
reconnectTransportOnFailure="true"
timestampValidityDuration="00:05:00"
cookieRenewalThresholdPercentage="60" />
<localServiceSettings detectReplays="true"
issuedCookieLifetime="10:00:00"
maxStatefulNegotiations="128"
replayCacheSize="900000"
maxClockSkew="00:05:00"
negotiationTimeout="00:01:00"
replayWindow="00:05:00"
inactivityTimeout="00:02:00"
sessionKeyRenewalInterval="15:00:00"
sessionKeyRolloverInterval="00:05:00"
reconnectTransportOnFailure="true"
maxPendingSessions="128"
maxCachedCookies="1000"
timestampValidityDuration="00:05:00" />
<secureConversationBootstrap />
</security>
<binaryMessageEncoding maxReadPoolSize="64"
maxWritePoolSize="16"
maxSessionSize="2048">
<readerQuotas maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
</binaryMessageEncoding>
<httpTransport manualAddressing="false"
maxBufferPoolSize="524288"
maxReceivedMessageSize="65536"
allowCookies="false"
authenticationScheme="Anonymous"
bypassProxyOnLocal="false"
decompressionEnabled="true"
hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true"
maxBufferSize="65536"
proxyAuthenticationScheme="Anonymous"
realm=""
transferMode="Buffered"
unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
<binding name="AsymmetricCookieHttpsBinding">
<security authenticationMode="IssuedTokenOverTransport"
defaultAlgorithmSuite="Basic256Sha256"
messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12"/>
<binaryMessageEncoding>
<readerQuotas maxStringContentLength="1048576"
maxArrayLength="2097152"/>
</binaryMessageEncoding>
<httpsTransport maxReceivedMessageSize="2162688"
authenticationScheme="Anonymous"
useDefaultWebProxy="false"/>
</binding>
</customBinding>
<ws2007FederationHttpBinding>
<binding name="Customers_ws2007FedHttpBinding">
<security mode="TransportWithMessageCredential">
<message issuedKeyType="AsymmetricKey">
<!-- UPDATE: the URL for the SharePoint security service -->
<issuer address="http://ericwhit210/_vti_bin/sts/spsecuritytokenservice.svc/windows"
binding="customBinding"
bindingConfiguration="AsymmetricWindowsHttpBinding"/>
<!-- UPDATE: the metadata URL for the SharePoint security service -->
<issuerMetadata address="http://ericwhit210/_vti_bin/sts/spsecuritytokenservice.svc?wsdl"/>
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
</bindings>
<extensions>
<behaviorExtensions>
<add name="federatedServiceHostConfiguration"
type="Microsoft.IdentityModel.Configuration.ConfigureServiceHostBehaviorExtensionElement, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
<microsoft.identityModel>
<service name="CustomersService.Customers">
<certificateValidation certificateValidationMode="None"/>
<audienceUris mode="Never"/>
<issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<trustedIssuers>
<!-- UPDATE: the thumbprint that was issued by SharePoint Security Token Service -->
<!-- UPDATE: the name of the issuer token -->
<add thumbprint="ddbe98f4c2dbe6d78cec14d0d00ab890d15308f6"
name="ericwhit210 "/>
</trustedIssuers>
</issuerNameRegistry>
</service>
</microsoft.identityModel>
</configuration>

Conclusion

Dans cet troisième article de la série, nous avons configuré le service Web afin qu'il approuve le Security Token Service de SharePoint et nous avons configuré le STS de SharePoint afin qu'il approuve le service Web. Dans l'article suivant, vous utiliserez SharePoint Designer 2010 pour consommer le service Web en tant que type de contenu externe.

Remerciements

Je tiens ici à remercier Eric White de m'avoir autorisé à traduire son article.
Je remercie xyz pour sa relecture technique et ses propositions.
Je remercie également abc pour sa relecture orthographique et ses propositions.

Création d'un service Web prenant en charge les revendications et sa consommation à partir de SharePoint BCS

Partie 3 : Établissement de la confiance entre un service Web WCF et le Security Token Service de SharePoint 2010

Auteurs

| Eric White | Deepin Prayag |