Le compte à rebours est lancé pour Keyfactor Tech Days - réservez votre place dès aujourd'hui !

  • Accueil
  • Blog
  • Authentification et autorisation basées sur des réclamations avec ADFS 2.0 et SharePoint 2010

Authentification et autorisation basées sur des réclamations avec ADFS 2.0 et SharePoint 2010

Beaucoup de notes techniques et d'articles web parlent de différents aspects de la fédération basée sur les revendications entre ADFS 2.0 et SharePoint 2010. Dans ce blog, nous nous concentrerons principalement sur le mappage des réclamations, la configuration du processus d'authentification et d'autorisation.

Voici un scénario de bout en bout :

1. L'utilisateur tente d'accéder à l'application web SharePoint 2010 basée sur les réclamations.

2. SharePoint redirige la demande d'accès vers l'ADFS sur la base de la configuration du fournisseur de jetons d'identité de confiance de SharePoint et de l'établissement d'une relation de confiance de fédération avec l'ADFS.

$Name = New-SPClaimTypeMapping "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" -IncomingClaimTypeDisplayName "Nom d'affichage" -LocalClaimType "https://schemas.contoco.com/identity/claims/name

$Role = New-SPClaimTypeMapping "https://schemas.microsoft.com/ws/2008/06/identity/claims/role" -IncomingClaimTypeDisplayName "Role" -SameAsIncoming

$ap = New-SPTrustedIdentityTokenIssuer -Name "ADFSv2" -Description "Active Directory Federation Services 2.0" -Realm $realm -ImportTrustCertificate $cert -ClaimsMappings $Name, $Role -SignInUrl $signInURL -IdentifierClaim $Name.InputClaimType

Notez que le type de revendication Name https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name est réservé par SharePoint. Dans cet exemple, nous utilisons -LocalClaimType pour effectuer le mappage du type de revendication vers https://schemas.contoso.com /identity/claims/name. Nous en verrons la raison plus tard. En termes de SharePoint, ce type de réclamation mappé https://schemas.contoso.com/identity/claims/name est ce qu'on appelle un type de réclamation personnalisé (type de réclamation non prédéfini).

3. L'ADFS authentifie l'utilisateur, génère le jeton de sécurité avec 2 revendications et le renvoie à SharePoint.

<saml:Attribute AttributeName=”role” AttributeNamespace=” https://schemas.microsoft.com/ws/2008/06/identity/claims”>

<saml:AttributeValue>SharePoint Users</saml:AttributeValue>

</saml:Attribute>

<saml:Attribute AttributeName=“name“ AttributeNamespace=”https://schemas.xmlsoap.org/ws/2005/05/identity/claims”>

<saml:AttributeValue>Jake</saml:AttributeValue>

</saml:Attribute>

4. SharePoint Security Token Service valide le jeton de sécurité, consomme les réclamations, remappe la réclamation Name et génère également ses propres réclamations en tant qu'ajouts. L'ensemble des revendications sera transmis à l'application web basée sur les revendications.

https://schemas.contoso.com/identity/claims/name = Jake

https://schemas.xmlsoap.org/ws/2005/05/identity/claims/role = SharePoint Users

https://schemas.microsoft.com/sharepoint/2009/08/claims/userid = 0ǵ.t|ADFSv2|Jake https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name = Jake

https://sharepoint.microsoft.com/claims/2009/08/isauthenticated = true

Remarquez que la première revendication est redéfinie par SharePoint sur la base du mappage de la revendication dans la configuration.

$Name = New-SPClaimTypeMapping "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" -IncomingClaimTypeDisplayName "Nom d'affichage" -LocalClaimType "https://schemas.contoco.com/identity/claims/name

Les 3 dernières réclamations avec des types de réclamations prédéfinis sont générées par SharePoint et les valeurs sont calculées sur la base des valeurs des réclamations entrantes. La réclamation générée par SharePoint avec le type https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name est également incluse. C'est la raison pour laquelle nous devons utiliser -LocalClaimType lors de la configuration de l'émetteur de jetons d'identité de confiance mentionnée à l'étape 2. La dernière demande https://sharepoint.microsoft.com/claims/2009/08/isauthenticated = true est basée sur la déclaration d'authentification du jeton de sécurité entrant.

5. Avant que toutes les demandes ne soient transmises à l'application web basée sur les demandes, SharePoint effectuera un contrôle d'autorisation. Nous pouvons utiliser People Picker pour configurer les autorisations à des fins de décision d'autorisation. Cependant, dans ce blog, nous aimerions montrer comment utiliser powershell pour mettre en œuvre de tels paramètres de permission.

Par exemple, si nous voulons permettre à tous les utilisateurs authentifiés d'accéder à cette application web dans le groupe SharePoint "SharePoint Web Home Visitors" avec le niveau d'autorisation "Read", nous pouvons procéder comme suit :

$web = Get-SPWeb "https://www.sharepoint.com:4443"

$Group = $web.SiteGroups["SharePoint Web Home Visitors"]

$claimPrincipal =New-SPClaimsPrincipal -EncodedClaim "c:0(.s|true"

$newUser = New-SPUser -UserAlias $claimPrincipal.ToEncodedString() -Web $web

$group.AddUser($newUser)

Remarquez que "c:0(.s|true" est la chaîne de requête encodée pour "Tous les utilisateurs authentifiés". La chaîne de requête encodée est basée sur le format et les règles de mappage des requêtes de SharePoint, comme indiqué ci-dessous :

c -> autre créance (que la créance d'identité)

( -> caractère de type revendication de https://sharepoint.microsoft.com/claims/2009/08/isauthenticated

s -> STS local (SharePoint STS est l'émetteur de cette revendication, c'est-à-dire que SharePoint génère la sienne)

true -> valeur de la demande (souvenez-vous que https://sharepoint.microsoft.com/claims/2009/08/isauthenticated = true)

Pour permettre à tous les utilisateurs authentifiés avec le rôle "Utilisateurs SharePoint" d'accéder à cette application web dans le groupe SharePoint "Visiteurs de l'accueil web SharePoint" avec le niveau d'autorisation "Lecture", nous pouvons faire ce qui suit :

$web = Get-SPWeb "https://www.sharepoint.com:4443"

$Group = $web.SiteGroups["SharePoint Web Home Visitors"]

$sts = Get-SPTrustedIdentityTokenIssuer "ADFSv2"

$claimPrincipal = New-SPClaimsPrincipal -ClaimValue "SharePoint Users" -ClaimType "https://schemas.microsoft.com/ws/2008/06/identity/claims/role" -TrustedIdentityTokenIssuer $sts

$newUser = New-SPUser -UserAlias $claimPrincipal.ToEncodedString() -Web $web

$group.AddUser($newUser)

6. Une fois l'accès autorisé, SharePoint définit le cookie FedAuth et redirige la demande vers la cible d'origine.