Ajout d’une revendication personnalisée à une stratégie Web App via PowerShell dans SharePoint 2010

J’ai d’abord trouvé que ce processus était plus complexe à mettre en œuvre que prévu, puis une fois le travail terminé, j’ai constaté qu’il était plus simple qu’il n’en avait l’air. C’est pourquoi j’ai pensé qu’il serait intéressant d’écrire un article rapide sur la question. L’objectif était d’ajouter une revendication personnalisée à une stratégie Web App via PowerShell. La tâche est toute simple via l’interface utilisateur de l’Administration centrale. En revanche, dans PowerShell, j’ai commencé par adopter une approche qui consistait à créer un objet New-SPClaimsPrincipal pour ajouter les stratégies de la zone. Juste pour le plaisir, voici toute une série d’approches diverses que j’ai tentées (et qui sont encore bien loin de toutes les différentes permutations que j’ai envisagées) :

#$tp = Get-SPTrustedIdentityTokenIssuer -Identity "ADFS with Roles"
#$cp = Get-SPClaimProvider -Identity "BasketballTeamProvider"

#$account = New-SPClaimsPrincipal -ClaimValue "DVK Jovenut" -ClaimType "Role" -TrustedIdentityTokenIssuer $tp
#$account = New-SPClaimsPrincipal -Identity "DVK Jovenut" -TrustedIdentityTokenIssuer $tp
#$account = New-SPClaimsPrincipal -Identity "c:0ǹ.c|basketballteamprovider|dvk jovenut" -IdentityType EncodedClaim
#$account = New-SPClaimsPrincipal -ClaimValue "DVK Jovenut" -ClaimType "http://schema.steve.local/teams" -ClaimProvider $cp.ClaimProvider
#$account = New-SPClaimsPrincipal -EncodedClaim "c:0ǹ.c|basketballteamprovider|dvk jovenut"

Bien souvent, la revendication était ajoutée correctement, mais l’identificateur était de toute évidence incorrect, car la stratégie n’était pas implémentée (c’est-à-dire que j’accordais l’autorisation Contrôle total mais que les utilisateurs ayant cette revendication ne pouvaient pas se connecter). C’était la phase « plus complexe à mettre en œuvre que prévu ». Tout s’est résolu lorsque j’ai réalisé que je n’avais pas du tout besoin de l’objet New-SPClaimsPrincipal. Voici à la place les commandes PowerShell qui permettent d’ajouter et de faire fonctionner correctement la revendication :

$WebAppName = "https://fc1"

$wa = get-SPWebApplication $WebAppName

$account = "c:0ǹ.c|basketballteamprovider|dvk jovenut"

$zp = $wa.ZonePolicies("Default")
$p = $zp.Add($account,"Claims Role")
$fc=$wa.PolicyRoles.GetSpecialRole("FullControl")
$p.PolicyRoleBindings.Add($fc)
$wa.Update()

Au bout du compte, la solution consiste à ajouter la revendication personnalisée en tant que simple chaîne. Notez que pour obtenir la valeur $account, j’ai juste commencé par ajouter la stratégie via l’Administration centrale, puis j’ai copié la valeur de revendication affichée une fois l’opération terminée. J’espère que cela vous fera gagner du temps si vous vous trouvez un jour dans ce cas de figure.

Ceci est une version localisée d’un article de blog. Vous trouverez la version originale sur Adding A Custom Claim to a Web App Policy via PowerShell in SharePoint 2010