OpenID Connect ID プロバイダーからの認証を受け入れるよう CTP を設定できます。それによって、Parasoft の外でユーザー認証を管理することができます。OpenID Connect のサポートは、デフォルトでは無効化されています。このセクションの内容:
基本設定
User Administration のほか、OIDC サーバーでも設定が必要です。
OIDC サーバーの設定
まだ行っていない場合、OpenID Connect の ID プロバイダーに User Administration を登録します。 oidc.json ファイルで使用する属性値は認可サーバー (Keycloak、connect2id など) から取得できます。
認証後にユーザーがどこにリダイレクトされるかを OIDC サーバーに指示するため、必要なリダイレクト URI を登録します。
<ctp>/em/login/oauth2/code/ctpURI を登録します。
CTP の設定
tomcat/webapps/em/config ディレクトリにある oidc.json ファイルを開き、CTP が使用する OIDC プロバイダーのプロパティを設定します。
{
"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 が設定されている場合、ファイルのすべての属性が必須です。次の表は、ファイルのすべての属性を説明しています。
| 属性 | 値 | 説明 | |
|---|---|---|---|
enabled | boolean | OIDC 認証を有効または無効にします。デフォルト値は false です。 | |
issuerUri | string | issureUri パラメーターの値を指定します。認可サーバーの URI です。ファイル処理時に URI に /.well-known/openid-configuration が付加され、完全なディスカバリー エンドポイントを構築します。 | |
clientId | string | OIDC プロバイダーに登録された CTP の公開識別子を指定します。 | |
clientSecret | string | CTP のクライアント シークレットを指定します。 | |
scopes | string 配列 | OIDC サーバーがクライアントに提供するユーザー情報のセットを定義します。CTP は、主にユーザー クレームへのアクセスを取得するために、配列に指定された値を使用します。デフォルトでは、以下の配列が定義されます。
| |
claimMappings | object | ユーザーに関する情報を表現します。 | |
username | string | OIDC で要求されるユーザー名にマッピングされる値を指定します。デフォルト値は preferred_username です。 | |
firstName | string | OIDC で要求されるファーストネームにマッピングされる値を指定します。デフォルト値は given_name です。 | |
lastName | string | OIDC で要求されるラストネームにマッピングされる値を指定します。デフォルト値は family_name です。 | |
email | string | OIDC で要求される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=trueoidc.cli.mode=devicecodeoidc.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=trueoidc.cli.mode=certificateoidc.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 を使用して 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 のマニュアルを参照してください。