SAML および LDAP サポートと ColdFusion Administrator の統合

LDAP とは

LDAP は軽量ディレクトリアクセスプロトコル(Lightweight Directory Access Protocol)です。LDAP の主な機能は、組織や人物などに関するデータをユーザーが検索できるようにすることです。この目的を達成するために、LDAP は LDAP ディレクトリにデータを格納し、このディレクトリにアクセスするユーザーを認証します。LDAP は、Active Directory(AD)など、ほとんどのベンダーディレクトリサービスで動作します。これにより、ユーザー、サービス、システム、ネットワーク、およびアプリケーションに関する情報をディレクトリサービスから他のアプリケーションやサービスに共有する機能を実装しやすくなります。

ColdFusion では、ColdFusion Administrator 内から LDAP サーバーのユーザーまたはグループを統合できます。ColdFusion の以前のリリースでは、ColdFusion Administrator を使用してユーザーマネージャーを作成できました。これは、ユーザーを作成してユーザーに一度に一つずつ権限を割り当てるのに役立ちます。

ColdFusion では、以下を行うことができます。

  • LDAP ユーザーストアの設定 - 接続とユーザー/グループの読み込みに必要なすべてのデータを保存するのに役立ちます。
  • ユーザーストアからの LDAP ユーザーおよびグループの読み込み - 選択したユーザー/グループを、追加したユーザーストアから読み込むのに役立ちます。
  • ユーザーおよびグループへの権限の付与

外部認証タイプの追加

セキュリティ/Administrator で「別のユーザー名とパスワードで認証する (複数のユーザーを許可する)」オプションを選択すると、外部認証タイプを追加できます。

外部認証を追加するには:

SAML

LDAP

SAML/LDAP の設定

LDAP

セキュリティ/Administrator/外部認証で、または setAdminLdapConfiguration 関数を使用して、LDAP 設定の詳細を追加します。

次に、セキュリティ/ユーザーマネージャーページで、LDAP 認証タイプを選択し適切な役割を指定して、ユーザーを CF Admin に追加します。

その後、Administrator ログインページからログインすることができます。

LDAP の設定

ユーザーの追加(LDAP)

SAML

まず、セキュリティ/IdP 設定ページおよびセキュリティ/SP 設定ページから、SAML IdP および SP 設定を追加します。

次に、セキュリティ/ユーザーマネージャーページで、SAML 認証タイプを選択し適切な役割を指定して、ユーザーを CF Admin に追加します。

これで、ログインページに SSO ログインというオプションが表示されるようになります。

このオプションをクリックすると、ID プロバイダーログインページにリダイレクトされます。そこでログインに成功したら、ColdFusion Administrator ページ内に戻ります。

ユーザーの追加(SAML)

SAML および LDAP 用の管理 API

SAML

<cfscript>
adminObj = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;);
adminObj.login(&quot;Adm1n$&quot;,&quot;admin&quot;);
secCFC = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.security&quot;);
// SP 設定を追加
secCFC.addSpMetadata ( alias=&quot;#okta_sp_alias#&quot;, entityid=&quot;#okta_sp_entityid#&quot;, acsurl=&quot;#okta_sp_acsurl#&quot;, slourl=&quot;#okta_sp_slourl#&quot;, signrequests=&quot;true&quot;, wantassertionssigned=&quot;true&quot;, logoutresponsesigned=&quot;true&quot;, signkeystorepath=&quot;#okta_sp_signkeystorepath#&quot;, signkeystorepassword=&quot;#okta_sp_signkeystorepassword#&quot;, signkeystorealias=&quot;#okta_sp_signkeystorealias#&quot; )
// IDP 設定を追加
secCFC.addIdpMetadata(alias = &quot;#okta_idp_alias#&quot;, url=&quot;#okta_idp_url#&quot;);
// 新しい SAML ユーザーを追加
secCFC.setUser(&quot;saml_username&quot;,
&quot;&quot;,
&quot;&quot;,
[&quot;coldfusion.administrator&quot;,&quot;coldfusion.adminapi&quot;],
true,
true,
false,
[],[],[],
false,
false,
false,
true,
false);
config = {
idpName = &quot;#okta_idp_alias#&quot;,
spName = &quot;#okta_sp_alias#&quot;,
groupName = &quot;#group_Name&quot;
}
// 外部認証のタイプを SAML に設定し、ID プロバイダーの IdP、SP および groupName 属性名で構成される設定を渡す
secCFC.setExternalAuthentication(&quot;Saml&quot;,config);
// 追加された SAML 設定の詳細を取得
saml_config = secCFC.getAdminSamlConfig();
writeDump(saml_config);
</cfscript>
<cfscript> adminObj = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;); adminObj.login(&quot;Adm1n$&quot;,&quot;admin&quot;); secCFC = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.security&quot;); // SP 設定を追加 secCFC.addSpMetadata ( alias=&quot;#okta_sp_alias#&quot;, entityid=&quot;#okta_sp_entityid#&quot;, acsurl=&quot;#okta_sp_acsurl#&quot;, slourl=&quot;#okta_sp_slourl#&quot;, signrequests=&quot;true&quot;, wantassertionssigned=&quot;true&quot;, logoutresponsesigned=&quot;true&quot;, signkeystorepath=&quot;#okta_sp_signkeystorepath#&quot;, signkeystorepassword=&quot;#okta_sp_signkeystorepassword#&quot;, signkeystorealias=&quot;#okta_sp_signkeystorealias#&quot; ) // IDP 設定を追加 secCFC.addIdpMetadata(alias = &quot;#okta_idp_alias#&quot;, url=&quot;#okta_idp_url#&quot;); // 新しい SAML ユーザーを追加 secCFC.setUser(&quot;saml_username&quot;, &quot;&quot;, &quot;&quot;, [&quot;coldfusion.administrator&quot;,&quot;coldfusion.adminapi&quot;], true, true, false, [],[],[], false, false, false, true, false); config = { idpName = &quot;#okta_idp_alias#&quot;, spName = &quot;#okta_sp_alias#&quot;, groupName = &quot;#group_Name&quot; } // 外部認証のタイプを SAML に設定し、ID プロバイダーの IdP、SP および groupName 属性名で構成される設定を渡す secCFC.setExternalAuthentication(&quot;Saml&quot;,config); // 追加された SAML 設定の詳細を取得 saml_config = secCFC.getAdminSamlConfig(); writeDump(saml_config); </cfscript>
<cfscript>	 
		adminObj = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;);
		adminObj.login(&quot;Adm1n$&quot;,&quot;admin&quot;);
		
		secCFC = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.security&quot;);
		
        // SP 設定を追加
		secCFC.addSpMetadata ( alias=&quot;#okta_sp_alias#&quot;, entityid=&quot;#okta_sp_entityid#&quot;, acsurl=&quot;#okta_sp_acsurl#&quot;, slourl=&quot;#okta_sp_slourl#&quot;, signrequests=&quot;true&quot;, wantassertionssigned=&quot;true&quot;, logoutresponsesigned=&quot;true&quot;, signkeystorepath=&quot;#okta_sp_signkeystorepath#&quot;, signkeystorepassword=&quot;#okta_sp_signkeystorepassword#&quot;, signkeystorealias=&quot;#okta_sp_signkeystorealias#&quot; )
		
        // IDP 設定を追加	
		secCFC.addIdpMetadata(alias = &quot;#okta_idp_alias#&quot;, url=&quot;#okta_idp_url#&quot;);
		
        // 新しい SAML ユーザーを追加
		secCFC.setUser(&quot;saml_username&quot;, 
				&quot;&quot;, 
				&quot;&quot;,
				[&quot;coldfusion.administrator&quot;,&quot;coldfusion.adminapi&quot;],
				true, 
				true, 
				false,
				[],[],[],
				false,
				false,
				false, 
				true,
				false);
		
		config = {
 				idpName = &quot;#okta_idp_alias#&quot;,
				spName = &quot;#okta_sp_alias#&quot;,
				groupName = &quot;#group_Name&quot;
			}
		
        // 外部認証のタイプを SAML に設定し、ID プロバイダーの IdP、SP および groupName 属性名で構成される設定を渡す	
		secCFC.setExternalAuthentication(&quot;Saml&quot;,config);
		
       // 追加された SAML 設定の詳細を取得
		saml_config = secCFC.getAdminSamlConfig();
		writeDump(saml_config);
		
		
	</cfscript>

LDAP

<cfscript>
adminObj = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;);
adminObj.login(&quot;Adm1n$&quot;,&quot;admin&quot;)
secCFC = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.security&quot;)
// LDAP 設定を追加
secCFC.setAdminLdapConfiguration(ads_ldap_host,
ads_ldap_port,
ads_ldap_userBaseContext,
ads_ldap_groupBaseContext,
ads_ldap_usernameAttr,
ads_ldap_groupnameAttr,
ads_ldap_timeout,
ads_ldap_userConfig,
ads_ldap_groupConfig,
ads_ldap_userbindDN,
ads_ldap_userbindPass,
ads_ssl_enabled,
ads_starttls);
// LDAP 設定の詳細を取得
ldap_conf_details = secCFC.getAdminLdapConfiguration();
// 適切な役割を持つユーザーを追加
secCFC.setUser(ldap_admin_username,
ldap_admin_password,
&quot;&quot;,
[&quot;coldfusion.administrator&quot;,&quot;coldfusion.adminapi&quot;],
true,
true,
false,
[],[],[],
false,
false,
true,
false,
false);
// 外部認証のタイプを LDAP に設定
secCFC.setExternalAuthentication(&quot;ldap&quot;);
// 新しく追加された LDAP ユーザーを使用してログイン
adminObj_new = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;);
if(adminObj_new.login(ldap_admin_password,ldap_admin_username)==true)
writeOutput(&quot;Logged in User #ldap_admin_username1#&quot;);
// LDAP 設定を削除
secCFC.deleteLdapConfiguration();
</cfscript>
<cfscript> adminObj = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;); adminObj.login(&quot;Adm1n$&quot;,&quot;admin&quot;) secCFC = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.security&quot;) // LDAP 設定を追加 secCFC.setAdminLdapConfiguration(ads_ldap_host, ads_ldap_port, ads_ldap_userBaseContext, ads_ldap_groupBaseContext, ads_ldap_usernameAttr, ads_ldap_groupnameAttr, ads_ldap_timeout, ads_ldap_userConfig, ads_ldap_groupConfig, ads_ldap_userbindDN, ads_ldap_userbindPass, ads_ssl_enabled, ads_starttls); // LDAP 設定の詳細を取得 ldap_conf_details = secCFC.getAdminLdapConfiguration(); // 適切な役割を持つユーザーを追加 secCFC.setUser(ldap_admin_username, ldap_admin_password, &quot;&quot;, [&quot;coldfusion.administrator&quot;,&quot;coldfusion.adminapi&quot;], true, true, false, [],[],[], false, false, true, false, false); // 外部認証のタイプを LDAP に設定 secCFC.setExternalAuthentication(&quot;ldap&quot;); // 新しく追加された LDAP ユーザーを使用してログイン adminObj_new = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;); if(adminObj_new.login(ldap_admin_password,ldap_admin_username)==true) writeOutput(&quot;Logged in User #ldap_admin_username1#&quot;); // LDAP 設定を削除 secCFC.deleteLdapConfiguration(); </cfscript>
<cfscript>
			adminObj = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;);
			adminObj.login(&quot;Adm1n$&quot;,&quot;admin&quot;)
			
			secCFC = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.security&quot;)

            // LDAP 設定を追加
			secCFC.setAdminLdapConfiguration(ads_ldap_host, 
			ads_ldap_port, 
			ads_ldap_userBaseContext, 
			ads_ldap_groupBaseContext,   
			ads_ldap_usernameAttr,
			ads_ldap_groupnameAttr,
			ads_ldap_timeout,
			ads_ldap_userConfig,			
			ads_ldap_groupConfig, 		
			ads_ldap_userbindDN,
			ads_ldap_userbindPass,
			ads_ssl_enabled,
			ads_starttls);
			
            // LDAP 設定の詳細を取得
			ldap_conf_details = secCFC.getAdminLdapConfiguration();
			
            // 適切な役割を持つユーザーを追加
			secCFC.setUser(ldap_admin_username, 
				ldap_admin_password, 
				&quot;&quot;,
				[&quot;coldfusion.administrator&quot;,&quot;coldfusion.adminapi&quot;],
				true, 
				true, 
				false,
				[],[],[],
				false,
				false,
				true, 
				false,
				false);
			
            // 外部認証のタイプを LDAP に設定
			secCFC.setExternalAuthentication(&quot;ldap&quot;);
				
            // 新しく追加された LDAP ユーザーを使用してログイン
			adminObj_new = CreateObject(&quot;component&quot;,&quot;CFIDE.adminapi.administrator&quot;);
			if(adminObj_new.login(ldap_admin_password,ldap_admin_username)==true)
				writeOutput(&quot;Logged in User #ldap_admin_username1#&quot;);
			// LDAP 設定を削除
			secCFC.deleteLdapConfiguration();
		
</cfscript>

ID プロバイダーでアプリケーションを作成する際に追加される ACS URL は、次の形式にする必要があります。

<cfadmin_host>:<cfadmin_port>/CFIDE /administrator/saml/acs.cfm

SAML および LDAP をセットアップするための CFSetup コマンド

外部認証タイプとして SAML/LDAP を有効にするには、マルチユーザー認証タイプが有効になっている必要があります。また、SAML/LDAP の設定も存在する必要があります。

  1. cfsetup で samlconfig/ldapconfig の add コマンドを使用して、SAML/LDAP 設定を追加します。
  2. セキュリティカテゴリでは、他のパラメーターの中でも、adminAuthType を MULTIUSER に、externalAuth を SAML/LDAP にそれぞれ設定します。

SAML

設定の追加

  • add samlconfig idpName=admin_login_idp spName=admin_login_sp groupName=groupName cfusion

設定の削除

  • delete samlconfig default cfusion

設定の詳細の表示

  • show samlconfig cfusion

設定の更新

  • set samlconfig groupName=admin_login_idp idpName=admin_login_idp spName=admin_login_sp cfusion

設定の取得

  • get samlconfig spName cfusion

設定の書き出し

  • export samlconfig saml.json cfusion

設定の読み込み

  • import samlconfig saml.json cfusion 

LDAP

設定の追加

  • add ldapconfig host=localhost port=10646 groupBaseContext="ou=Group,dc=example,dc=com" userBaseContext="ou=User,dc=example,dc=com" groupnameAttr=cn usernameAttr=cn timeout=6000 cfusion

設定の更新

  • set ldapconfig host=localhost port=10389 groupBaseContext="ou=Group,dc=example,dc=com" userBaseContext="ou=User,dc=example,dc=com" usernameAttr=uid timeout=6000 cfusion

設定の取得

  • get ldapconfig host cfusion

設定の削除

  • delete ldapconfig default cfusion

設定の書き出し

  • export ldapconfig ldap.json cfusion

設定の読み込み

  • import ldapconfig ldap.json cfusion 

ユーザー操作

ユーザーの表示

  • show user user_name

ユーザーの更新

  • set user isLdap=false

別のユーザーの追加

  • add user=user2 isLdap=true isSaml=false isGroup=true

ユーザーの削除

  • delete user user1

ユーザーの詳細情報の取得

  • get user user_name isldap

ユーザーデータの書き出し

  • export user user1details.json

ユーザーデータの読み込み

  • import user userdetails.json 

ヘルプをすばやく簡単に入手

新規ユーザーの場合