SharePoint Server でユーザーが認証された後に発行されたクレームを確認する方法
こんにちは SharePoint サポートの森 健吾 (kenmori) です。
今回の投稿では、SharePoint Server でクレームベース認証による認証後に発行されたクレームの値をすべて出力し、確認するためのサンプルをご紹介します。
用途
主に以下のような用途でご使用いただけますと幸いです。
・クレーム ベース認証の理解
・クレームを使用した認証関連のカスタマイズを実施する事前準備
・フェデレーション認証 (例. ADFS 認証) でセキュリティ グループに何を入力すれば良いかの確認
特に、ADFS 認証でセキュリティ グループ名として入力する値に関するご質問が多い状況です。ADFS の [要求規則の編集] から、設定値を確認する必要があります。
"Token-Groups (SID)" (例. S-1-5...)
"Token-Groups - ドメイン名を含む" (例. DOMAIN\group_name)
"Token-Groups - 完全修飾ドメイン名を含む" (例. DOMAIN.local\group_name)
"Token-Groups - 名前の指定なし" (例. group_name)
質問に至る背景として、フェデレーション認証 (例. ADFS 認証) は外部の信頼された ID プロバイダーに認証処理を委任しています。そのため、SharePoint のフェデレーション認証用のクレーム プロバイダーは、メンバーおよびロール情報を保持しておりませんし、それらの情報の入手先も把握していません。
その結果、PeoplePicker による人やグループの検索が実施できず、入力された値をそのまま解決することしかできません。
実際に有効な、ADFS 認証でセキュリティ グループ名を確認するには、本サンプルで認証されたユーザーのクレーム タイプとして出力される https://schemas.microsoft.com/ws/2008/06/identity/claims/role の値を確認し、その値をグループ名として PeoplePicker で指定すれば問題ありません。
手順
1. 以下の内容をテキスト エディタに貼り付け、UTF-8 形式で getclaims.aspx などとして保存します。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" >
<head runat="server">
<title>View claim for the current user.</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
Microsoft.IdentityModel.Claims.IClaimsIdentity ci = System.Threading.Thread.CurrentPrincipal.Identity as Microsoft.IdentityModel.Claims.IClaimsIdentity;
Response.Write("<table><tr><th align=left>ClaimType</th><th align=left>ClaimValue</th></tr>");
foreach (Microsoft.IdentityModel.Claims.Claim c in ci.Claims)
{
Response.Write(string.Format("<tr><td>{0}</td><td>{1}</td></tr>", c.ClaimType, c.Value));
}
Response.Write("</table>");
%>
</div>
</form>
</body>
</html>
2. 下記のフォルダに配置します。
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\<ver>\TEMPLATE\LAYOUTS
- 補足
<ver> については 2010 は 14, 2013 は 15 を指定します。
3. ブラウザーで認証を完了させた後、該当ページにアクセスします。
https://sharepoint/_layouts/getclaims.aspx
4. 下記のような画面でクレーム タイプごとの値一覧を確認できます。
例えば、サイトの権限にセキュリティ グループとして "Domain Admins" などを指定して、権限を割り当てたとします。
この場合、ユーザーが対象のサイトにアクセスした際、クレーム属性のhttps://schemas.microsoft.com/ws/2008/06/identity/claims/roleの値に "Domain Admins" を保持していることを判断して権限があると認識されます。
今回の投稿は以上になります。