次の方法で共有


クレームに関するチュートリアル: SharePoint 2010 における信頼済みログイン プロバイダー (SAML サインイン) の作成

概要:  カスタム Security Token Service (STS) を作成して、SharePoint 2010 ファームとカスタム STS 間の信頼関係をセットアップする方法を説明します。

最終更新日: 2011年8月12日

適用対象: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

この記事の内容
信頼済みログイン プロバイダーの目的
シナリオ: エクストラネットでホストされる SharePoint サイトへのアクセスの有効化
手順 1: WingtipSTS プロジェクトの作成
手順 2: WingtipSTS プロジェクト クレームのテスト
手順 3: WingtipSTS プロジェクトでサポートされるクレームの定義
手順 4: SharePoint で信頼のセットアップ
手順 5: WingtipSTS プロジェクトを使用する Web アプリケーションの作成
手順 6: WingtipSTS プロジェクト認証のテスト
まとめ
その他の技術情報

提供元:  Andy Li、Microsoft Corporation

目次

  • 信頼済みログイン プロバイダーの目的

  • シナリオ: エクストラネットでホストされる SharePoint サイトへのアクセスの有効化

  • 手順 1: WingtipSTS プロジェクトの作成

  • 手順 2: WingtipSTS プロジェクト クレームのテスト

  • 手順 3: WingtipSTS プロジェクトでサポートされるクレームの定義

  • 手順 4: SharePoint で信頼のセットアップ

  • 手順 5: WingtipSTS プロジェクトを使用する Web アプリケーションの作成

  • 手順 6: WingtipSTS プロジェクト認証のテスト

  • まとめ

  • その他の技術情報

クリックしてコードを取得 ダウンロード コード: Claims Example Trusted Login Provider (英語)

信頼済みログイン プロバイダーの目的

このチュートリアルでは、カスタム Security Token Service (STS) を作成し、Microsoft SharePoint 2010 ファームとカスタム STS 間の信頼関係をセットアップする方法について説明します。カスタム STS は、認証プロバイダーとして機能します。ユーザーが SharePoint サイトにログオンするとき、最初に、カスタム STS のログオン ページにリダイレクトされます。ユーザーは、認証後に SharePoint に戻るようにリダイレクトされます。

注意

信頼済みログイン プロバイダーは、SharePoint が信頼する外部 (つまり、SharePoint 外の) STS です。クレームに関する用語の定義については、「クレームベース ID の用語の定義」を参照してください。

SAML パッシブ サインインには、サインインのプロセスが記述されています。Web アプリケーションのサインインが、信頼済みログイン プロバイダーからトークンを受け取るように構成されている場合、この種類のサインインは SAML パッシブ サインインと呼ばれます。詳細については、「受信クレーム: SharePoint にサインインする」を参照してください。

シナリオ: エクストラネットでホストされる SharePoint サイトへのアクセスの有効化

架空の企業 Contoso は、エクストラネットにホストされる SharePoint サイトを持っており、従業員は自宅から、あるいは出張中にリモートからログオンすることができます。Contoso には Wingtip という名前のパートナー企業があり、その従業員は Contoso とのプロジェクトで作業しており、SharePoint サイトのドキュメントにアクセスする必要があります。

Contoso でホストされる SharePoint サイトに Wingtip 従業員がログオンできるようにするために、Wingtip は、自社の従業員を認証するための STS を作成しました。Contoso サイトで、ファーム管理者は SharePoint ファームと Wingtip の STS 間の信頼関係をセットアップしました。Wingtip の従業員が Contoso SharePoint サイトにログオンしようとすると、最初に認証を受けるために STS にリダイレクトされ、次に STS は Contoso SharePoint サイトにユーザーをリダイレクトします。SharePoint ファームは、Wingtip STS を信頼しているため、Wingtip STS によって発行されるセキュリティ トークンもまた信頼します。

手順 1: WingtipSTS プロジェクトの作成

  1. Visual Studio 2010 を起動します。

  2. [ファイル] メニューの [新しいプロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスで、以下の操作を行います。

    1. 左側のウィンドウで、[その他のプロジェクトの種類] を選択して、[Visual Studio ソリューション] をクリックし、図 1 のように、右側の [空のソリューション] を選択します。

    2. [場所] で、「C:\StudentFiles\LabFiles\Module_6\Lab」と入力します。

    3. ソリューションの [名前] として、「TrustedLogin」と入力します。

      図 1. Visual Studio の [新しいプロジェクト] ダイアログ ボックス

      Visual Studio の [新しいプロジェクト] ダイアログ ボックス

  4. ソリューション エクスプローラーで、[TrustedLogin] ソリューションを右クリックして、[追加]、[新しい Web サイト] の順にクリックします。

  5. [新しい Web サイトの追加] ダイアログ ボックスで、以下の操作を実行します。

    1. [ASP.NET セキュリティ トークン サービス Web サイト] テンプレートを選択します。

    2. [Web 上の場所] を [ファイル システム] に、値を C:\StudentFiles\LabFiles\Module_6\Lab\TrustedLogin\WingtipSTS に変更します。

      図 2. Visual Studio の [新しい Web サイトの追加] ダイアログ ボックス

      Visual Studio の [新しい Web サイトの追加] ダイアログ ボックス

  6. 新しい Web サイトの web.config ファイルを開きます。[appSettings] セクションで、[IssuerName] を [WingtipSTS] に変更します。

    図 3. appSettings を変更する

    appSettings の変更

    注意

    SigningCertificateName (CN=STSTestCert) は、WingtipSTS がセキュリティ トークンに署名するときに使用する証明書です。

  7. [スタート]、[ファイル名を指定して実行] の順にクリックします。

  8. 「mmc」と入力して、次に Enter キーを押します。

  9. Microsoft 管理コンソールで、[ファイル]、[スナップインの追加と削除] の順にクリックします。

  10. 左側のウィンドウの [使用可能なスナップイン] フィールドで、[証明書]、[追加] の順にクリックします。

    図 4. STSTestCert を表示している Microsoft 管理コンソール

    MMC に STSTestCert が表示されている

  11. [証明書スナップイン] ダイアログ ボックスで、[コンピューター アカウント]、[次へ] の順にクリックして、次に [ローカル コンピューター] を選択します。

  12. [完了] をクリックし、[OK] をクリックします。

    注意

    web.config の [SigningCertificate] は、ここで STSTestCert として表示される証明書を示すことに注意してください。

  13. WingtipSTS と SharePoint の間の信頼をセットアップするとき、WingtipSTS によって使用される証明書を SharePoint に対して指定する必要があります。そのためには、次の手順を実行します。

    1. [STSTestCert] を右クリックして、[すべてのタスク] を選択し、次に [エクスポート] をクリックします。

    2. [次へ] をクリックします。この証明書からは、公開キーだけをエクスポートできるということに注意してください。

    3. [次へ] をクリックして、次に [DER encoded binary X.509 (.CER)] を選択します。

    4. [次へ] をクリックします。[エクスポートするファイル] ダイアログ ボックスで、ファイル名として「C:\StudentFiles\LabFiles\Module_6\Resources\STSTestCertPub.cert」と入力します。

    5. [次へ] をクリックし、[完了] をクリックします。

  14. Microsoft 管理コンソールを閉じます。

手順 2: WingtipSTS プロジェクト クレームのテスト

  1. [TrustedLogin] ソリューションを右クリックして、[追加]、[新しい Web サイト] の順にクリックします。

  2. [新しい Web サイトの追加] ダイアログ ボックスで、[クレーム対応 ASP.NET Web サイト テンプレート] を選択します。図 5 のように、[Web 上の場所] を File System に、[] を C:\StudentFiles\LabFiles\Module_6\Lab\TestRPWeb に設定します。

    図 5. [新しい Web サイトの追加] ダイアログ ボックス

    [新しい Web サイトの追加] ダイアログ ボックス

  3. [TestRPWeb] プロジェクトを右クリックして、次に [STS 参照の追加] をクリックします。

  4. フェデレーション ユーティリティ ウィザードが開いたら、[フェデレーション ユーティリティ ウィザードの開始] ページ (図 6 を参照) で、[次へ] をクリックします。[アプリケーションがセキュリティで保護された https 接続でホストされていません] というメッセージが表示されたら、[はい] をクリックします。

    図 6. [フェデレーション ユーティリティ ウィザードの開始] ページ

    フェデレーション ユーティリティ ウィザードの最初のページ

  5. [Security Token Service] ページで、[既存の STS を使う] をクリックします。STS WS フェデレーション メタデータ ドキュメントの場所として、図 7 のように「https://localhost:48924/WingtipSTS/FederationMetadata/2007-06/FederationMetadata.xml」と入力します。

    注意

    この URL は使用中の環境によって異なる可能性があります。適切な URL を探すには、WingtipSTS プロジェクトの FederationMetadata/2007-06 フォルダーの下で [FederationMetadata.xml] を右クリックします。

    図 7. STS オプションを含む [Security Token Service] ページ

    [STS オプション] ダイアログ ボックス

  6. [次へ] をクリックして、次の、セキュリティで保護されていない接続に関するメッセージでは、[はい] をクリックします。

  7. [セキュリティ トークンの暗号化] ページで、図 8 のように、[暗号化しない] をクリックします。

    図 8. [セキュリティ トークンの暗号化] ページ

    セキュリティ トークン暗号化のページ

  8. [提供されたクレーム] ページで、図 9 のように、[次へ] をクリックします。

    注意

    このダイアログ ボックスはユーザーが定義したクレームの種類を示しませんが、これは問題ありません。

    図 9. [提供されたクレーム] ページで提示されたクレーム

    提示されたクレームのページで提示されたクレーム

  9. [要約] ダイアログ ボックスで、[完了] をクリックします。

    注意

    以前の手順は WingtipSTS プロジェクトの web.config ファイルに必要なエントリを追加します。これにより、Web サイトが、ユーザーを認証してユーザーのクレームを取得するために、WingtipSTS サイトにユーザーをリダイレクトします。

  10. web.config ファイルを開きます。

  11. <httpRuntime> 要素から requestValidationMode="2.0" を削除します。

  12. TestRPWeb プロジェクトをコンパイルし、すべてのコンパイル エラーを修正します。

  13. [TestRPWeb] の [Default.aspx] を右クリックして、次に [ブラウザーで表示] を選択します。図 10 のように、[WingtipSTS] サイトのログオン ページにリダイレクトされるはずです。

    注意

    [ページを表示できません] エラーが発生した場合は、WingtipSTS が [Visual Studio Web 開発] で実行中であることを確認してください。

    図 10. WingtipSTS ログオン ページ

    WingtipSTS ログインのページ

  14. 以下の資格情報を入力します。

    • ユーザー名: user1@wingtip.com

    • パスワード: pass@word1 (パスワードは確認されません。どのような文字列でも関係なく処理されます)

  15. [送信] をクリックします。[TestRPWeb] サイトに戻るようにリダイレクトされます。Default.aspx は [WingtipSTS] によって返されたすべてのクレームを表示します。

    図 11. WingtipSTS によって返されたクレーム

    WingtipSTS によって返されたクレーム

リダイレクト エラーのトラブルシューティング

WingtipSTS が、TestRPWeb に戻るようにリダイレクトするとき、以下のエラーが発生することがあります。

[ID4175: IssuerNameRegistry ではセキュリティ トークンの発行者を認識できませんでした。この発行者からのセキュリティ トークンを受理するには、この発行者の有効な名前を返すように IssuerNameRegistry を構成する必要があります。]

このエラーが発生した場合、web.config ファイルの TestRPWeb にある STSTestCert の拇印値が正しいことを確認してください。

<issuerNameRegistry 
  type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry,
  Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, 
  PublicKeyToken=31bf3856ad364e35">
  <trustedIssuers>
      <add thumbprint="99fcfe2c70ebb571020ca8aa1b7633dfe1fa1d58" name="https://localhost:48924/WingtipSTS/" />
  </trustedIssuers>
</issuerNameRegistry>

これを確認するには、図 12 のように、証明書 MMC を開き、証明書の [詳細] タブで拇印を探します。

図 12. 拇印を示す [証明書] ダイアログ ボックス

[証明書] ダイアログ ボックスに拇印が表示されている

手順 3: WingtipSTS プロジェクトでサポートされるクレームの定義

  1. WingtipSTS Web サイト プロジェクトの App_Code フォルダーに UserInfo.cs という名前のクラス ファイルを追加します。

  2. UserInfo.cs に、以下の using ステートメントを追加します。

    using Microsoft.IdentityModel.Claims;
    
  3. UserInfo.cs ファイルの最後に以下のコードを追加します。WingtipClaimTypes クラスは、WingtipSTS によってサポートされるクレームを定義します。

    public class WingtipClaimTypes
    {
        // System.IdentityModel.Claims.ClaimTypes.Email;
        public static string EmailAddress = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";
        public static string Title = "http://schemas.wingtip.com/sharepoint/2009/08/claims/title";
    }
    
  4. UserInfo クラスを、以下のコードで置換します。このクラスには、ユーザーのクレームを取得し、ユーザーの資格情報に基づいてユーザーを認証するための、WingtipSTS によって使用されるいくつかのユーティリティ メソッドが含まれます。

    注意

    このコードはサンプルとしてのみ示しています。実際の運用環境では使用しないでください。

    public class UserInfo
    {
        // The email address is used as the UserID.
        // Every user has two claims: title and email address. 
        // SharePoint will pick up the email claim and treat it as the identity.
        private static string[] userDB = 
           {
            "user1@wingtip.com:Title:Engineer", 
            "user1@wingtip.com:Email:user1@wingtip.com",
            "user2@wingtip.com:Title:Manager",
            "user2@wingtip.com:Email:user2@wingtip.com",
            "user3@wingtip.com:Title:CEO",
            "user3@wingtip.com:Email:user3@wingtip.com",
           };
    
        // Manually construct a list of users. In a production environment,
        // you should look up a directory service or database 
        // to retrieve the user information.
        public static List<string> GetAllUsers()
        {
            List<string> allUsers = new List<string>();
            // Adding forms-based users.
            allUsers.Add("user1@wingtip.com");
            allUsers.Add("user2@wingtip.com");
            allUsers.Add("user3@wingtip.com");
            return allUsers;
        }
    
        public static bool AuthenticateUser(string username, string password)
        {
            // Add your authentication logic here.
            return true;
        }
    
        /// <summary>
        /// A real implementation should look up a directory service or database 
        /// to retrieve a user's claim. The code below is 
        /// used only for demonstration purposes.
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        public static List<Claim> GetClaimsForUser(string username)
        {
            List<Claim> userClaims = new List<Claim>();
            foreach (string userInfo in userDB)
            {
                string[] claims = userInfo.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                if (username == claims[0])
                {
                    userClaims.Add(new Claim(GetClaimTypeForRole(claims[1]), claims[2],
                Microsoft.IdentityModel.Claims.ClaimValueTypes.String));
                }
            }
    
            return userClaims;
        }
    
        public static string GetClaimTypeForRole(string roleName)
        {
            if (roleName.Equals("Title", StringComparison.OrdinalIgnoreCase))
                return WingtipClaimTypes.Title;
            else if (roleName.Equals("Email", StringComparison.OrdinalIgnoreCase))
                return WingtipClaimTypes.EmailAddress;
            else
                throw new Exception("Claim Type not found!");
        }
    
    }
    
  5. これで、UserInfo.cs ファイルのコードは以下のようになります。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.IdentityModel.Claims;
    
    public class WingtipClaimTypes
    {
        // System.IdentityModel.Claims.ClaimTypes.Email;
        public static string EmailAddress = 
                "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";
        public static string Title = "http://schemas.wingtip.com/sharepoint/2009/08/claims/title";
    }
    
    public class UserInfo
    {
        // The email address is used as the UserID.
        // Every user has two claims: title and email address. 
        // SharePoint will pick up the email claim and treat it as identity.
        private static string[] userDB = 
           {
            "user1@wingtip.com:Title:Engineer", 
            "user1@wingtip.com:Email:user1@wingtip.com",
            "user2@wingtip.com:Title:Manager",
            "user2@wingtip.com:Email:user2@wingtip.com",
            "user3@wingtip.com:Title:CEO",
            "user3@wingtip.com:Email:user3@wingtip.com",
           };
    
        // Manually construct a list of users. In a production environment,
        // you should look up a directory service or database to retrieve 
        // the user information.
        public static List<string> GetAllUsers()
        {
            List<string> allUsers = new List<string>();
            //Adding forms-based users.
            allUsers.Add("user1@wingtip.com");
            allUsers.Add("user2@wingtip.com");
            allUsers.Add("user3@wingtip.com");
            return allUsers;
        }
    
        public static bool AuthenticateUser(string username, string password)
        {
            // Add your authentication logic here.
            return true;
        }
    
        /// <summary>
        /// A real implementation should look up a directory service or database 
        /// to retrieve a user's claim. The code below is used 
        /// only for demonstration purposes.
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        public static List<Claim> GetClaimsForUser(string username)
        {
            List<Claim> userClaims = new List<Claim>();
            foreach (string userInfo in userDB)
            {
                string[] claims = userInfo.Split(new string[] { ":" }, 
                StringSplitOptions.RemoveEmptyEntries);
                if (username == claims[0])
                {
                    userClaims.Add(new Claim(GetClaimTypeForRole(claims[1]), claims[2], 
                    Microsoft.IdentityModel.Claims.ClaimValueTypes.String));
                }
            }
    
            return userClaims;
        }
    
        public static string GetClaimTypeForRole(string roleName)
        {
            if (roleName.Equals("Title", StringComparison.OrdinalIgnoreCase))
                return WingtipClaimTypes.Title;
            else if (roleName.Equals("Email", StringComparison.OrdinalIgnoreCase))
                return WingtipClaimTypes.EmailAddress;
            else
                throw new Exception("Claim Type not found!");
        }
    
    }
    
  6. App_Code で、[CustomSecurityTokenService.cs] をダブルクリックしてファイルを開きます。

  7. System.Collections に名前空間参照を追加します。

  8. GetOutputClaimsIdentity 関数を、以下のコードで置換します。これはユーザーのクレームを返す関数です。

        protected override IClaimsIdentity GetOutputClaimsIdentity( IClaimsPrincipal principal, 
             RequestSecurityToken request, Scope scope )
        {
            if ( null == principal )
            {
                throw new ArgumentNullException( "principal" );
            }
    
            ClaimsIdentity outputIdentity = new ClaimsIdentity();
    
            // Issue custom claims.
            // TODO: Change the claims below to issue custom claims 
            // that are required by your application.
            // Update the application's configuration file to reflect 
            // the new claims requirements.
    
            // outputIdentity.Claims.Add( new Claim( 
                System.IdentityModel.Claims.ClaimTypes.Name, principal.Identity.Name ) );
            // outputIdentity.Claims.Add( new Claim( ClaimTypes.Role, "Manager" ) );
    
            // The Wingtip implementation.
            string username = principal.Identity.Name;
            List<Claim> claims = UserInfo.GetClaimsForUser(username);
    
            foreach (Claim claim in claims)
            {
                outputIdentity.Claims.Add(claim);
            }
    
            return outputIdentity;
        }
    
  9. WingtipSTS Web サイトをコンパイルし、すべてのコンパイル エラーを修正します。

手順 4: SharePoint で信頼のセットアップ

WingtipSTS と SharePoint の間で信頼をセットアップするプロセスは、基本的に SharePoint ファームに SPTrustedLoginProvider オブジェクトとして WingtipSTS を登録することです。

  1. サーバーの全体管理サイトの、左ナビゲーション ウィンドウで、[セキュリティ] をクリックします。

  2. [一般的なセキュリティ] の、[信頼関係の管理] をクリックします。

  3. Server リボンで、[新規作成] をクリックします。

  4. [信頼関係の確立] ダイアログ ボックスの、[名前] テキスト ボックスで、「STSTestCert」と入力すると、図 13 のように表示されます。

    図 13. サーバーの全体管理での信頼関係の確立

    サーバーの全体管理の信頼関係

  5. [参照] をクリックして、以前にエクスポートした STSTestCertPub.cer ファイルを参照します。

  6. [OK] をクリックします。

    注意

    手順 4. により、SharePoint は STSTestCert 証明書に基づくすべての証明書を信頼します。

  7. TrustedLogin ソリューションに RegisterSTS という名前の WinForm プロジェクトを追加します。

    注意

    [プラットフォーム ターゲット] を [All CPU] に、[.NET Framework] を [3.5] に変更します。

  8. [RegisterSTS] プロジェクトを右クリックして、[スタートアップ プロジェクトに設定] をクリックします。

  9. フォームにボタンを追加し、ボタンの [テキスト] プロパティを [Register WingtipSTS] に変更します。

  10. ボタンをダブルクリックします。これにより、ボタンのイベント ハンドラー関数が表示されます。

  11. Button1_Click 関数を、以下のコードで置換します。このコードは SPTrustedLoginProvider オブジェクトを作成して、それを SPSecurityTokenServiceManager.TrustedLoginProviders コレクションに追加します。

    注意

    SharePoint に STS を登録するために、Windows PowerShell スクリプトを使用することもできます。詳細については、「セキュリティのコマンドレット (SharePoint Foundation 2010)」を参照してください。

    このコードは以下の処理を行います。

    1. SharePoint によって認識されるクレームを定義します (この例では、email と title)。

    2. idClaim は、一意的にユーザーを識別するためにどのクレームの種類が使用されるか定義します。

    3. SPTrustedClaimTypeInformation クラスの AddKnownClaimValue 関数は、後で、ユーザー選択ウィンドウでクレーム検索をするときに検索できるように、クレームの種類に既知のクレーム値を追加します。

    4. X509Certificate2 オブジェクトは、以前にエクスポートした公開キーを示します。

    SPTrustedLoginProvider クラスのコンストラクターで、WingtipSTS の URI を変更してください (ポート番号は異なることがあります。このサンプルの WingtipSTS は、https://localhost:48924/WingtipSTS/default.aspx の URL でホストされています)。

    注意に関するメモ注意

    URL には default.aspx を含めることに注意してください。

    SPTrustedLoginProvider オブジェクトでカスタムの SPClaimProvider オブジェクトを作成して、(以下のコードにコメントとして含まれている) SPTrustedLoginProvider.ClaimProviderName を使用してそれを登録することができます。このようにしない場合は、SharePoint はこの SPTrustedLoginProvider オブジェクトに対して、(SPClaimProvider クラスから派生した) SPTrustdClaimProvider オブジェクトを自動的に作成します。この SPTrustdClaimProvider オブジェクトは、登録コードに含めた、クレームの種類の情報に基づいています。

    https://intranet.contoso.com/\_trust/ は、ユーザーが STS によって認証された後でリダイレクトされる URL です。

           private void button1_Click(object sender, EventArgs e)
            {
                List<SPTrustedClaimTypeInformation> claimMapping = new List<SPTrustedClaimTypeInformation>();
                List<string> strClaimMapping = new List<string>();
    
                SPTrustedClaimTypeInformation idClaim = new SPTrustedClaimTypeInformation("EmailAddress", 
                "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", 
                "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress");
                SPTrustedClaimTypeInformation titleClaim = new SPTrustedClaimTypeInformation("Title", 
                "http://schemas.wingtip.com/sharepoint/2009/08/claims/title", 
                "http://schemas.wingtip.com/sharepoint/2009/08/claims/title");
    
                titleClaim.AcceptOnlyKnownClaimValues = true;
    
                idClaim.AddKnownClaimValue("user1@wingtip.com");
                idClaim.AddKnownClaimValue("user2@wingtip.com");
                idClaim.AddKnownClaimValue("user3@wingtip.com");
    
                titleClaim.AddKnownClaimValue("Engineer");
                titleClaim.AddKnownClaimValue("Manager");
                titleClaim.AddKnownClaimValue("CEO");
    
                // Create the string[] for all claims. This is required for 
                // the construction of the SPTrustedLoginProvider object.
                strClaimMapping.Add(idClaim.InputClaimType);
                strClaimMapping.Add(titleClaim.InputClaimType);
    
    
                X509Certificate2 ImportTrustCertificate = 
                new X509Certificate2(@"C:\StudentFiles\LabFiles\Module_6\Resources\STSTestCertPub.cer");
    
                claimMapping.Add(idClaim);
                claimMapping.Add(titleClaim);
    
                SPSecurityTokenServiceManager manager = SPSecurityTokenServiceManager.Local;
                SPTrustedLoginProvider provider = new SPTrustedLoginProvider(manager, 
                "WingtipSTS","WingtipSTS",new Uri("https://localhost:48924/WingtipSTS/default.aspx"),
                "https://intranet.contoso.com/_trust/", strClaimMapping.ToArray(),idClaim);  
    
                foreach (SPTrustedClaimTypeInformation claimTypeInfo in claimMapping)
                {
                    if (claimTypeInfo.InputClaimType == provider.IdentityClaimTypeInformation.InputClaimType)
                    {
                        continue;
                    }
                    provider.AddClaimTypeInformation(claimTypeInfo);
                }
    
                if (ImportTrustCertificate != null)
                {
                    provider.SigningCertificate = ImportTrustCertificate;
                }
    
    
                //provider.ClaimProviderName = "ContosoCRMClaimProvider";
    
                provider.UseWReplyParameter = true;
    
                manager.TrustedLoginProviders.Add(provider);
                manager.Update();
            }
    
  12. RegisterSTS プロジェクトをビルドして、実行します。

  13. ボタンをクリックして、ファームに信頼済みログイン プロバイダーを登録します。

手順 5: WingtipSTS プロジェクトを使用する Web アプリケーションの作成

  1. SharePoint 2010 サーバーの全体管理ページを表示します。

  2. [アプリケーション構成の管理] セクションで、[Web アプリケーションの管理] をクリックします。

  3. リボンで、[新規作成] をクリックします。

  4. [新しい Web アプリケーションの作成] ダイアログ ボックスの、[認証] で、[クレーム ベースの認証] をクリックします。

  5. [IIS Web サイト] セクションの [新しい IIS Web サイトを作成する] で、[名前] フィールドを [SharePoint - Trusted] に変更します。

  6. [ポート] 番号を 443 に変更します。

  7. 図 14 のように、[セキュリティの構成] セクションの、[SSL (Secure Sockets Layer) の使用] で、[はい] をクリックします。

  8. [クレーム認証の種類] セクションで、以下の操作を実行します。

    1. [Windows 認証の有効化] をクリックします。

    2. [統合 Windows 認証] をクリックします。

    3. ドロップダウン リストから [NTLM] をクリックします。

    4. Trusted Identity Provider をクリックします。

    5. WingtipSTS をクリックします。

    図 14. [新しい Web アプリケーションの作成] ダイアログ ボックス

    [新しい Web アプリケーションの作成] ダイアログ ボックス

  9. [アプリケーション プール] セクションの、[既存のアプリケーション プールを使用する] で [SharePointAppPool] を選択します。

  10. [データベース名と認証] セクションで、データベース名を WSS_Content_443 に変更します。その他の設定は既定のままにします。

  11. [OK] をクリックして、Web アプリケーションを作成します。

  12. SSL Web アプリケーションが作成された後で、[アプリケーション構成の管理]、[サイト コレクションの作成] の順にクリックします。

  13. Web アプリケーションを https://intranet.contoso.com に変更します。

  14. タイトルには、「信頼済み」と入力します。

  15. [サイト コレクション管理者] セクションの [ユーザー名] ボックスの右側にある [参照] アイコンをクリックします。

  16. [ユーザー選択ウィンドウ] の [WingtipSTS] で、以下の操作を実行します。

    注意

    前述したように、WingtipSTS クレーム プロバイダーは、SPTrustedClaimProvder の一種です。SPTrustedLoginProvider を登録するとき、SharePoint によって自動的に生成されます。

    1. [EmailAddress] を選択します。図 15 のように、3 つの選択肢があります。

    2. [user1@wingtip.com] を選択して、[OK] をクリックします。

    図 15. ユーザー選択ウィンドウ

    ユーザー選択ウィンドウ

  17. [OK] をクリックして、サイト コレクションを作成します。

手順 6: WingtipSTS プロジェクト認証のテスト

重要なメモ重要

このテストを実行する前に、WingtipSTS プロジェクトを使用する準備ができていることを確認してください。[WingtipSTS] プロジェクトを右クリックして、[ブラウザーで表示] をクリックするか、あるいはインターネット インフォメーション サービス (IIS) Web サイトに展開することができます。

  1. https://intranet.contoso.com を表示します。

  2. 図 16 のように、[複数の認証の選択] ドロップダウン リストで、[WingtipSTS] をクリックします。

    図 16. ドロップダウン リストからの [WingtipSTS] の選択

    ドロップダウン リストから WingtipSTS を選択する

    図 17 のように、WingtipSTS Web サイトのログオン ページにリダイレクトされます。

    図 17. WingtipSTS Web サイトのログオン ページ

    WingtipSTS Web サイトのログオン ページ

  3. サイト管理者の資格情報である「user1@wingtip.com」を入力します。

  4. 図 18 のように、認証の後で、SharePoint サイトに戻るようにリダイレクトされます。

    図 18. 認証の後で SharePoint サイトに戻るようにリダイレクトされる

    認証後に SharePoint サイトにリダイレクトされる

  5. 作成した Web パーツを展開し、ホーム ページにそれを追加します。ユーザーにどのクレームが追加されたか、メモを取ってください。

  6. [サイトの操作] メニューで、[サイトの設定]、[ユーザーとグループ] の順にクリックします。[user1@wingtip.com] をクリックして、アカウント名を確認してください。以下の質問への解答を書き留めてください。

    • user1@wingtip.com の ClaimTypes は何ですか?

    • user1@wingtip.com のアカウント名は何ですか?

    • アカウント名の各文字は何を意味しますか? (手作業あるいはコードによってアカウント名をデコードしてください)。

  7. リボンの [サイトの操作の] で、[サイトの権限] を選択して、[アクセス許可の付与] をクリックします。[参照] アイコンをクリックして、ユーザー選択ウィンドウ ダイアログ ボックスを開きます。

  8. [WingtipSTS] で、[Title] をクリックします。

  9. 「Manager」と入力して、[検索] をクリックします。

  10. 図 19 のように、検索結果で、[Manager] をダブルクリックして、ユーザーのリストに "マネージャー" を追加し、[追加] をクリックします。

    図 19. WingtipSTS 従業員の役職を示すユーザー選択ウィンドウ

    ユーザー選択ウィンドウに WingtipSTS の報告者の役職が表示される

  11. クレーム認証セッション Cookie を削除するために、すべての Internet Explorer インスタンスを閉じます。

  12. Internet Explorer の新しいインスタンスを開いて、https: //intranet.contoso.com を表示します。

  13. user2@wingtip.com としてログオンを試行します。ログオンできましたか? user3@wingtip.com ではどうでしょうか?

まとめ

このチュートリアルでは、カスタム Security Token Service (STS) を作成し、SharePoint ファームとカスタム STS 間の信頼関係をセットアップする方法について説明しました。カスタム STS は、認証プロバイダーとして機能します。ユーザーが SharePoint サイトにログオンするとき、最初に、カスタム STS のログオン ページにリダイレクトされます。ユーザーは、認証後に SharePoint に戻るようにリダイレクトされます。

その他の技術情報

詳細については、次のリソースを参照してください。