SharePoint 2010 の PowerShell を利用して Web App にカスタム クレームを追加する
SharePoint 2010 の PowerShell を利用して Web App にカスタム クレームを追加する
予想以上に困難な処理でしたが、一度実行すれば意外に簡単なので、急ぎ投稿することにしました。 最初の作業は、PowerShell を利用して Web App にカスタム クレームを追加することでした。 PowerShell のすべての機能はサーバーの全体管理 UI から簡単に利用できます。 皆さんは PowerShell に関心をお持ちでしょうが、私は最初、New-SPClaimsPrincipal を作成してゾーンのポリシーに追加するという方法をとりました。 ご参考までに、私が試したさまざまな方法を (調査した組み合わせのごく一部ですが) 以下に示します。
#$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 "https://schema.steve.local/teams" -ClaimProvider $cp.ClaimProvider
#$account = New-SPClaimsPrincipal -EncodedClaim "c:0ǹ.c|basketballteamprovider|dvk jovenut"
これらの多くはクレームの追加には成功しましたが、ポリシーが実装されていなかったため、クレームが正しい識別子でないことは明らかでした (たとえば、フル コントロールの権限を与えても、そのクレームを持つユーザーはログインできませんでした)。 これが「予想以上に困難」だったところです。 うまく機能させるためには、実は New-SPClaimsPrincipal オブジェクトが不要だったことがわかりました。 以下に、PowerShell によってクレームを追加して動作させる適切な方法を示します。
$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()
要するに、カスタム クレームを単純な文字列として追加するだけでよいのです。 なお、$account 値を取得するために、最初にサーバーの全体管理を利用してポリシーを追加し、その完了後に表示されたクレーム値をコピーしました。 今後、読者の皆さんがこうした処理を行う必要に迫られたときにこの投稿が参考になれば幸いです。
これはローカライズされたブログ投稿です。原文の記事は、「Adding A Custom Claim to a Web App Policy via PowerShell in SharePoint 2010」をご覧ください。