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" を保持していることを判断して権限があると認識されます。

今回の投稿は以上になります。