SimpleSAMLphp の構成

SimpleSAMLphp は、Security Assertion Markup Language (SAML) 準拠の ID プロバイダー (IDP) です。 SimpleSAMLphp 1.10 以降のバージョンを、ArcGIS Online で SAML ログインを設定するための IDP として構成できます。 構成プロセスでは、主に次の 2 つの手順を実行します。まず、SAML IDP を ArcGIS Online に登録し、次に、ArcGIS Online を SAML IDP に登録します。

メモ:

SAML ログインをセキュアに構成するには、「SAML セキュリティのベスト プラクティス」をご参照ください。

必要な情報

ArcGIS Online は、ユーザーが SAML ログインを使用してサイン インするときに、特定の属性情報を IDP から受信する必要があります。 NameID は、ArcGIS Online とのフェデレーションが機能するように、IDP が SAML レスポンスで送信しなければならない必須の属性です。 ArcGIS OnlineNameID の値を使用して指定ユーザーを一意に識別するため、ユーザーを一意に識別する定数値を使用することをお勧めします。 IDP からユーザーがサイン インすると、ArcGIS Online によってユーザー名が NameID_<url_key_for_org> の新しいユーザーがユーザー ストアに作成されます。 NameID によって送信される値に使用できる文字は、英数字、_ (アンダースコア)、. (ドット) および @ (アット マーク) です。 その他の文字はエスケープされ、ArcGIS Online によってアンダースコアが付加されたユーザー名が作成されます。

ArcGIS Online は、ユーザーの電子メール アドレス、グループ メンバー、名と姓を、SAML ID プロバイダーから取得して入力することをサポートしています。 ユーザーが通知を受信できるようにするために、SAML IDP から取得した電子メール アドレスを渡すことをお勧めします。 そうすると、ユーザーが後で管理者になる場合に役立ちます。 アカウントに電子メール アドレスが登録されていると、管理アクティビティに関する通知を受信したり、他のユーザーが組織に加入できるように招待を送信したりできます。

SimpleSAMLphpSAML IDP として ArcGIS Online に登録する

  1. SimpleSAMLphp IdP の認証ソースを構成します。
    1. 認証ソースを作成します。

      SimpleSAMLphp は、LDAP サーバー、SQL Server のユーザー、Active Directory ドメインなど、さまざまな認証ソースからのユーザー認証をサポートしています。 次の例は、SimpleSAMLphp IdP で Apache Directory Server を認証ソースとして構成する方法を示しています。

      認証ソースは、<SimpleSAML_HOME>/config/authsources.php ファイルで構成できます。 LDAP サーバーを構成するには、config/authsources.php ファイルを開き、LDAP ベースの認証ソースを次の形式で追加します。

      'example-ldapApacheDS' => array(
      		'ldap:LDAP',
      
      		/* The hostname of the LDAP server. */
      		'hostname' => 'host:port',
      
      		/* Whether TLS should be used when contacting the LDAP server. */
      		'enable_tls' => TRUE,
      
      		/*
      		 * Which attributes should be retrieved from the LDAP server.
      		 * This can be an array of attribute names, or NULL, in which case
      		 * all attributes are fetched.
      		 */
      		'attributes' => NULL,
      
      		/*
      		 * The pattern that should be used to create the users DN given the username.
      		 * %username% in this pattern will be replaced with the user's username.
      		 *
      		 * This option is not used if the search.enable option is set to TRUE.
      		 */
      		'dnpattern' => 'uid=%username%,ou=users,ou=system',
      
      		/*
      		 * As an alternative to specifying a pattern for the users DN, it is possible to
      		 * search for the username in a set of attributes. This is enabled by this option.
      		 */
      		'search.enable' => FALSE,
      
      		/*
      		 * The DN that will be used as a base for the search.
      		 * This can be a single string, in which case only that DN is searched, or an
      		 * array of strings, in which case they will be searched in the order given.
      		 */
      		'search.base' => 'ou=users,ou=system',
      
      		/*
      		 * The attribute(s) the username should match against.
      		 *
      		 * This is an array with one or more attribute names. Any of the attributes in
      		 * the array may match the value the username.
      		 */
      		'search.attributes' => array('uid', 'mail'),
      
      		/*
      		 * The username & password the simpleSAMLphp should bind to before searching. If
      		 * this is left as NULL, no bind will be performed before searching.
      		 */
      		'search.username' => 'uid=admin,ou=system',
      		'search.password' => 'password',
      	),
    2. SimpleSAMLphp IdP で、上で作成した認証ソースを認証モジュールとして構成します。 metadata/ saml20-idp-hosted.php ファイルを開き、使用する認証ソースを追加します。
      /*
      	 * Authentication source to use. Must be one that is configured in
      	 * 'config/authsources.php'.
      	 */
      	'auth' => 'example-ldapApacheDS',
  2. SimpleSAMLphp IDP がサポートする名前識別子の形式を構成します。 < SimpleSAML_HOME >/metadata/saml20-idp-hosted.php ファイルを開き、次のスニペットを追加します。 次の例では、ユーザーの認証後、uidNameID として SimpleSAMLphp IDP から ArcGIS Online に渡されます。
    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
    		'authproc' => array(
    
    			  3 => array(
    
    			  'class' => 'saml:AttributeNameID',
    			  'attribute' => 'uid',
    	              'Format' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
    				  ),
    			),
  3. ArcGIS Online の組織サイト用の IDP として SimpleSAMLphp を登録します。
    1. 組織サイトの管理者としてサイン インしていることを確認します。
    2. サイトの上部にある [組織] をクリックして、[設定] タブをクリックします。
    3. ページの左側にある [セキュリティ] をクリックします。
    4. [ログイン] セクションの [SAML ログイン] の下で [SAML ログインの設定] ボタンをクリックし、[1 つの ID プロバイダー] オプションを選択します。 [プロパティの指定] ページで、組織名を入力します (たとえば、「City of Redlands」)。 ユーザーが組織の Web サイトにアクセスすると、このテキストが SAML サイン イン オプションの一部に表示されます (たとえば、「City of Redlands アカウントを使用」)。
      メモ:

      [1 つの ID プロバイダー] オプションを選択することで、SAML 組織用に 1 つの ArcGIS Online IDP を登録できます。 複数の IDP からの SAML ログインでユーザーを認証する場合には、1 つの IDP ではなく SAML ベースのフェデレーションを登録します。

    5. ユーザーが [自動] または [管理者から招待されたとき] のどちらで組織に加入できるかを選択します。 1 番目のオプションを選択すると、ユーザーは、管理者が介入しなくても、自分の SAML ログインを使用して組織サイトにサイン インできます。ユーザーのアカウントは、最初にサイン インしたときに自動的に組織サイトに登録されます。 2 番目のオプションを選択すると、管理者は必要なユーザーを組織に招待する必要があります。 ユーザーは、招待を受け取った時点で、組織サイトにサイン インできるようになります。
    6. 次の 3 つのオプションのいずれかを使用して、IDP のメタデータ情報を入力します。

      [URL] - SimpleSAMLphp フェデレーション メタデータの URL にアクセスできる場合は、このオプションを選択します。 これは通常 https://<simpleSAML-server>/<saml-app-name>/saml2/idp/metadata.php です。

      [ファイル] - URL にアクセスできない場合は、このオプションを選択します。 URL からのメタデータを XML ファイルとして保存し、[ファイル] オプションを使用して、そのファイルを ArcGIS Online にアップロードします。

      [設定パラメーター] - URL にもフェデレーション メタデータ ファイルにもアクセスできない場合は、このオプションを選択します。 値を手動で入力して、要求されたパラメーター (BASE 64 形式でエンコードされたログイン URL および証明書) を指定します。 これらの情報については、SimpleSAMLphp 管理者にお問い合わせください。

  4. 必要に応じて高度な設定を構成します。
    • [暗号化アサーション] - SimpleSAMLphp アサーションの応答を暗号化するように SAML を構成する場合は、このオプションを有効化します。
    • [署名付きリクエストの有効化] - ArcGIS Online に送信される SAML の認証リクエストに SimpleSAMLphp が署名する場合は、このオプションを有効化します。
    • [エンティティ ID] - 新しいエンティティ ID を使用して ArcGIS Online の組織サイトを SimpleSAMLphp に対して一意に識別する場合は、この値を更新します。
    • [ID プロバイダーへのログアウトの反映] - ユーザーが SimpleSAMLphp からサイン アウトするログアウト URLArcGIS Online で使用する場合は、このオプションを有効化します。 使用する URL を [ログアウト URL] 設定に入力します。 IDP が [ログアウト URL] を署名する必要がある場合、[署名付きリクエストの有効化] をオンにする必要があります。
    • [サイン イン時にプロフィールを更新] - このオプションを有効化すると、ArcGIS Online ユーザー プロフィールに保存されているアカウント情報 (フル ネームと電子メール アドレス) が、IDP から受け取った最新のアカウント情報と自動的に同期されます。 このオプションを有効化すると、ユーザーが SAML ログイン アカウントを使用していつサイン インしたか、またはアカウントの作成時以降に IDP 情報が変更されているかどうかを組織サイトで確認できます。また、IDP 情報が変更されている場合、それに合わせてユーザーの ArcGIS Online アカウントのプロフィールを更新できます。
    • [SAML ベースのグループのメンバーシップを有効化] - このオプションを有効化すると、組織メンバーが、グループ作成処理中に、指定された SAML ベースのエンタープライズ グループを、ArcGIS Online グループにリンクできるようになります。
    • [ログアウト URL] - 現在サイン インしているユーザーがサイン アウトするのに使用する IDP の URL。 ログアウト URL は、通常 https://idphost.domain.com/simplesaml/saml2/idp/SingleLogoutService.php です。 この URL は、IDP のメタデータ ファイルの SingleLogoutService エレメント内に定義されています。 メタデータ ファイルの URL は、通常 http://[simpleSAML-server]/simplesaml/saml2/idp/metadata.php です。
  5. [保存] をクリックします。

ArcGIS Online を信頼できるサービス プロバイダーとして SimpleSAMLphp に登録する

  1. <SimpleSAMLphp_HOME>/metatadata/saml20-sp-remote.php ファイルを構成して、SimpleSAMLphpArcGIS Online を信頼できるサービス プロバイダーとして構成します。
    1. ArcGIS Online の組織サイトのメタデータ XML ファイルを取得します。

      メタデータ ファイルを取得するには、組織サイトの管理者としてサイン インして、組織のページを開きます。 [設定] タブをクリックして、ページの左側にある [セキュリティ] をクリックします。 [ログイン] セクションの [SAML ログイン] の下で、[サービス プロバイダーのメタデータのダウンロード] ボタンをクリックします。

    2. 前の手順で取得した XML ファイルを PHP 形式に変換します。

      SimpleSAMLphp では、サービス プロバイダーのメタデータ情報が PHP 形式である必要があります。 SimpleSAMLphp は、XML から PHP メタデータへの内蔵コンバーターを提供します。これはデフォルトで、SimpleSAMLphp のインストール ディレクトリの https://<simpleSAML-server>/<saml-app-name>/admin/metadata-converter.php にあります。 このコンバーターを使用して、XML から PHP に変換します。

    3. metatadata/saml20-sp-remote.php ファイルを開き、上記の手順 1.b で作成した PHP 形式のサービス プロバイダーの構成を追加します。

      メタデータ ファイル内に追加されたサービス プロバイダーの構成例を次に示します。

      /* The following is an ArcGIS Online organization service provider */
      $metadata['citygis.maps.arcgis.com'] = array (
        'entityid' => ' citygis.maps.arcgis.com',
        'name' =>
        array (
          'en' => 'citygis ',
        ),
        'description' =>
        array (
          'en' => 'citygis ',
        ),
        'OrganizationName' =>
        array (
          'en' => 'citygis ',
        ),
        'OrganizationDisplayName' =>
        array (
          'en' => 'citygis ',
        ),
        'url' =>
        array (
          'en' => 'https://citygis.maps.arcgis.com',
        ),
        'OrganizationURL' =>
        array (
          'en' => 'https://citygis.maps.arcgis.com',
        ),
        'contacts' =>
        array (
        ),
        'metadata-set' => 'saml20-sp-remote',
        'AssertionConsumerService' =>
        array (
          0 =>
          array (
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
            'Location' => 'https://citygis.maps.arcgis.com/sharing/rest/oauth2/saml/signin',
            'index' => 1,
          ),
          1 =>
          array (
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://citygis.maps.arcgis.com/sharing/rest/oauth2/saml/signin',
            'index' => 2,
          ),
        ),
        'SingleLogoutService' =>
        array (
        ),
      );
  2. ユーザーの認証後、SimpleSAMLphp IdP から ArcGIS OnlineNameID として渡される属性を構成します。 これを行うには、前の手順で追加したサービス プロバイダーの構成の最後に、属性を追加します。

    次の例では、ユーザーの認証後、uidNameID として SimpleSAMLphp IdP から ArcGIS Online に渡されます (citygis.maps.arcgis.com を組織サイトの URL に置き換えます)。

    'NameIDFormat'               => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
    'simplesaml.nameidattribute' => 'uid',
    
    /* The following indicates whether or not to send all the attributes received from the authentication source to the service provider.
      If true, it will send, otherwise it will not send all the attributes*/
    
      'simplesaml.attributes'      => true,
    );
  3. SimpleSAMLphpSAML IDP として登録するときに高度な設定で [暗号化アサーション] を選択した場合は、ステップ 1 で追加したサービス プロバイダーの構成の末尾に以下の属性を追加します。
    /*
      Whether assertions sent to this SP should be encrypted. The default value is FALSE.
      */
      'assertion.encryption' => true,
    );