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"
        />

PSTSec の設定

以下の例は、PSTSec 用に OpenID Connect を設定する方法を示しています。CTP が PSTSec に接続するには、enableBasicAuth を true に設定する必要があります。このサンプルでは、2 人の管理ユーザー (admin1 および admin2) を作成します。

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

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.client.secret=[OpenID Connect サーバーから提供されたパスワード]
  • oidc.scopes=[ユーザーの詳細情報へのアクセスを許可するために認証時に使用されるスコープのスペース区切りリスト] デフォルトは: openid profile offline_access 
  • 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.scopes=[ユーザーの詳細情報へのアクセスを許可するために認証時に使用されるスコープのスペース区切りリスト] デフォルトは: openid profile offline_access
  • oidc.keystore=[OpenID Connect サーバーでユーザーを認証するための証明書を格納するキーストアファイルへのパス。下記の注 1 を参照]
  • oidc.keystore.alias=[OpenID Connect サーバーでの認証に使用するエイリアス] キーストア ファイルに複数のエントリが含まれている場合は、この設定を行う必要があります。
  • oidc.keystore.password=[キーストア ファイルのパスワード。下記の注 2 を参照]

1 FIPS 承認アルゴリズムのみが許可される場合、キーストアファイルは BCFKS (Bouncy Castle FIPS Keystore) 形式である必要があります。

2 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": "ctp",
"clientSecret": "4d35ef23-aec5-44d7-9c59-18092bd619e8",
"scopes": ["openid","profile","email"],
"claimMappings":
	{ 
		"username": "preferred_name", 
		"firstName": "given_name", 
		"lastName": "family_name", 
		"email": "email" 
	},
"adminUsers": ["admin1","admin2"]

詳細については Keycloak のドキュメント を参照してください。

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": ["openid","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/login/oauth2/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": ["openid","profile","email"],
"claimMappings":
	{ 
		"username": "name",
		"firstName": "given_name",
		"lastName": "family_name",
		"email": "email"
	},
"adminUsers": ["admin1","admin2"]

詳細は Azure Active Directory のドキュメント を参照してください。

  • No labels