OpenID Connect ID プロバイダーからの認証を受け入れるよう CTP を設定できます。それによって、Parasoft の外でユーザー認証を管理することができます。OpenID Connect のサポートは、デフォルトでは無効化されています。このセクションの内容:


基本設定

User Administration のほか、OIDC サーバーでも設定が必要です。

OIDC サーバーの設定

  1. まだ行っていない場合、OpenID Connect の ID プロバイダーに User Administration を登録します。 oidc.json ファイルで使用する属性値は認可サーバー (Keycloak、connect2id など) から取得できます。

  2. 認証後にユーザーがどこにリダイレクトされるかを OIDC サーバーに指示するため、必要なリダイレクト URI を登録します。<ctp>/em/login/oauth2/code/ctp URI を登録します。

CTP の設定

tomcat/webapps/em/config ディレクトリにある oidc.json ファイルを開き、CTP が使用する OIDC プロバイダーのプロパティを設定します。 

oidc.json ファイルのデフォルトの内容
{
"enabled": false,
"issuerUri": "your issuer uri",
"clientId": "your client id",
"clientSecret": "your client secret",
"scopes": ["openid", "profile", "email"],
"claimMappings":
	{ 
		"username": "preferred_username", 
		"firstName": "given_name", 
		"lastName": "family_name", 
		"email": "email" 
	},
"adminUsers": []
}

管理ユーザーが初めてログインする前に oidc.json ファイルを設定する必要があります。そうでなければ、管理機能を実行するのに必要なパーミッションなしでユーザーがデータベースに追加されることになります。 

enabled 要素に true が設定されている場合、ファイルのすべての属性が必須です。次の表は、ファイルのすべての属性を説明しています。

属性説明
enabledbooleanOIDC 認証を有効または無効にします。デフォルト値は false です。
issuerUri stringissureUri パラメーターの値を指定します。認可サーバーの URI です。ファイル処理時に URI に /.well-known/openid-configuration が付加され、完全なディスカバリー エンドポイントを構築します。
clientId string

OIDC プロバイダーに登録された CTP の公開識別子を指定します。

clientSecret string

CTP のクライアント シークレットを指定します。

scopes string 配列

OIDC サーバーがクライアントに提供するユーザー情報のセットを定義します。CTP は、主にユーザー クレームへのアクセスを取得するために、配列に指定された値を使用します。デフォルトでは、以下の配列が定義されます。

["openid", "profile", "email"], 

claimMappings objectユーザーに関する情報を表現します。

username stringOIDC で要求されるユーザー名にマッピングされる値を指定します。デフォルト値は preferred_username です。

firstName stringOIDC で要求されるファーストネームにマッピングされる値を指定します。デフォルト値は given_name です。 

lastName stringOIDC で要求されるラストネームにマッピングされる値を指定します。デフォルト値は family_name です。 

email stringOIDC で要求されるEmailにマッピングされる値を指定します。デフォルト値は email です。 
adminUsers string 配列ログイン時に管理者権限を付与する既存のユーザーを指定します。 

ファイルの設定が完了したら変更を保存し、CTP を再起動します。

CTP のログイン ページを開くと、OpenID Connect の認証インターフェイスにリダイレクトされます。 認証情報を指定するとログインが完了し、再び CTP にリダイレクトされます。

CTP セキュリティ XML ファイルの設定

CTP の applicationContext-security.xml ファイルには、OAuth 2.0 の認証を有効にするために必要な要素が含まれていますが、デフォルトではフォーム ログイン認証が優先されているため、無効化されています。oauth2-login 要素のコメントを解除し、form-login 要素をコメント化する必要があります。

oauth2-login 要素のコメント解除

OAuth 2.0 認証を有効化するには、次の行のコメントを解除します。

      <!--  <oauth2-login client-registration-repository-ref="clientRegistrationRepository"
            authentication-success-handler-ref="oidcSuccessHandler"
            oidc-user-service-ref="oidcUserService"
            login-page="/oauth2" ></oauth2-login>-->

form-login 要素のコメント アウト

次の行をコメント アウトしてフォーム ログイン認証を無効化します。

      <form-login
            login-processing-url="/resources/j_spring_security_check"
            login-page="/welcome"
            authentication-failure-handler-ref="failureHandler"
            authentication-success-handler-ref="userAuthenticationSuccessHandler"
            username-parameter="j_username"
            password-parameter="j_password"
        />

他の oauth2-resource-server 要素のコメントを解除して API の OAuth2 を有効化します。

API 使用時に OAuth2 を有効化するには、下の行のコメントを解除します。

<!--
	<http pattern="/api/**">
	<oauth2-resource-server entry-point-ref="apiEntryPoint"><opaque-token introspector-ref="opaqueTokenIntrospector"/></oauth2-resource-server>
	<http-basic entry-point-ref="apiEntryPoint"/>
	<csrf request-matcher-ref="csrfSecurityRequestMatcher"/>
	</http>
	<http pattern="/services/**">
	<oauth2-resource-server entry-point-ref="apiEntryPoint"><opaque-token introspector-ref="opaqueTokenIntrospector"/></oauth2-resource-server>
	<http-basic entry-point-ref="apiEntryPoint"/>
	<csrf request-matcher-ref="csrfSecurityRequestMatcher"/>
	</http>
	<http pattern="/tdm/api/v*/**">
	<oauth2-resource-server entry-point-ref="apiEntryPoint"><opaque-token introspector-ref="opaqueTokenIntrospector"/></oauth2-resource-server>
	<http-basic entry-point-ref="apiEntryPoint"/>
	<csrf request-matcher-ref="csrfSecurityRequestMatcher"/>
	</http>
-->

Web Archive (WAR) および CLI の設定

soavirt.war または soatestcli を使用している場合、下の説明のとおり、使用している認証のタイプにしたがって .properties ファイルを設定します。デフォルトはデバイス コードです。

デバイス コード認証の場合:

  • oidc.enabled=true
  • oidc.cli.mode=devicecode
  • oidc.issuer.uri=[OpenID Connect サーバーの URI]
  • oidc.client.id=[OpenID Connect サーバーから提供された ID]
  • oidc.devicecode.token.file=[ユーザーの認証情報を含むカスタム トークン ファイルへのパス]

"devicecode" モードが有効な場合、soavirt.war または soatestcli の起動時に、認証用の URL と デバイスがユーザーに与えられます。認証が成功すると、トークン ファイル (このファイルへのパスは oidc.devicecode.token.file 設定に保存されています) に情報が保存され、再利用されます。ファイルに保存された情報が無効になった場合、ユーザーは再び認証する必要があります。


証明書認証の場合:


  • oidc.enabled=true
  • oidc.cli.mode=certificate
  • oidc.issuer.uri=[OpenID Connect サーバーの URI]
  • oidc.client.id=[OpenID Connect サーバーから提供された ID]
  • oidc.client.secret=[OpenID Connect サーバーから提供されたパスワード]
  • oidc.keystore=[OpenID Connect サーバーでユーザーを認証するための証明書を格納したキーストア ファイルへのパス]
  • oidc.keystore.password=[キーストア ファイルのパスワード。下の注意点を参照]

oidc.keystore.password には暗号化されたパスワードを使用することを強く推奨します。-encodepass フラグを指定して SOAtest のコマンドライン インスタンスを実行することで、パスワードをエンコードできます。コマンドラインツールは、設定ファイルで使用できるエンコードされた文字列を生成します。 

設定のサンプル

以下のサンプルは、ID アクセス管理システムに CTP を接続する方法をわかりやすく示すことを目的としています。実装の詳細については、使用しているソフトウェアのマニュアルを参照してください。

Keycloak

このサンプルで説明しているとおりに Keycloak を使用して OpenID Connect を設定するには、あらかじめ以下の設定が必要です。

  • Keycloak は デフォルトの署名アルゴリズムとして RS256 を使用する必要があります。
  • Keycloak のアクセス トークンには、Keycloak の userinfo API エンドポイントからも取得できるユーザー情報が含まれている必要があります。
  • 下記のリダイレクト URI が登録されている必要があります。
    • host:port/*

このサンプルの demo はレルム名であり、2 人の管理ユーザー (admin1 および admin2) が作成されます。

"enabled": false,
"issuerUri": "https://host:8095/auth/realms/demo/",
"clientId": "pstsec",
"clientSecret": "4d35ef23-aec5-44d7-9c59-18092bd619e8",
"scopes": ["opened","profile","email"],
"claimMappings":
	{ 
		"username": "preferred_name", 
		"firstName": "given_name", 
		"lastName": "family_name", 
		"email": "email" 
	}
"adminUsers": ["admin1","admin2"]

詳細は Keycloak のマニュアルを参照してください。

Google

次のサンプルは、Google を使用して OpenID Connect を設定する方法を示しています。  このサンプルでは、2 人の管理ユーザー (admin1 および admin2) を作成します。

"enabled": false,
"issuerUri": "https://accounts.google.com",
"clientId": "<clientId-from-google>",
"clientSecret": "<clientSecret-from-google>",
"scopes": ["opened","profile","email"],
"claimMappings":
	{ 
		"username": "given_name", 
		"firstName": "given_name", 
		"lastName": "family_name", 
		"email": "email" 
	}
"adminUsers": ["admin1","admin2"] 

詳細は Google のマニュアルを参照してください。 

Connect2id

次のサンプルは、connect2id を使用して OpenID Connect を設定する方法を示しています。connect2id を OpenID Connect プロバイダーとして使用する場合、ユーザーは HTTPS 経由で User Administration にアクセスする必要があります。

このサンプルの c2id はレルム名です。2 人の管理ユーザー (admin1 および admin2) を作成します。 

"enabled": false,
"issuerUri": "https://host:port/c2id",
"clientId": "<clientId-from-c2id>",
"clientSecret": "<clientSecret-from-c2id>",
"scopes": ["opened","profile","email"],
"claimMappings":
	{ 
		"username": "sub", 
		"firstName": "given_name", 
		"lastName": "family_name", 
		"email": "email" 
	}
"adminUsers": ["admin1","admin2"] 

詳細は connect2id のマニュアルを参照してください。

既知の制限

connect2id 経由で初めて CTP にログインしたとき、"Invalid Request" エラーを受け取る場合があります。このエラーを解決するには、別のブラウザーを使用するか、現在のブラウザーのキャッシュを消去します。 

Azure Active Directory

このサンプルで説明しているとおりに Azure Active Directory を使用して OpenID Connect を設定するには、あらかじめ以下の設定が必要です。

  • Azure のアクセス トークンには、Azure の userinfo API エンドポイントからも取得できるユーザー情報が含まれている必要があります。
  • 次のリダイレクト URI が登録されている必要があります。https://host:port/em/oauth2/login/code/ctp

このサンプルでは2 人の管理ユーザー (admin1 および admin2) を作成します。

"enabled": false,
"issuerUri": "https://login.microsoftonline.com/<tenantId-from-azure>/2.0",
"clientId": "<clientId-from-azure>",
"clientSecret": "<clientSecret-from-azure>",
"scopes": ["opened","profile","email"],
"claimMappings":
	{ 
		"username": "name",
		"firstName": "given_name",
		"lastName": "family_name",
		"email": "email"
	}
"adminUsers": ["admin1","admin2"]

詳細は Azure Active Directory のマニュアルを参照してください。

  • No labels