OpenID Connect ID プロバイダーからの認証を受け入れるよう CTP を設定できます。これにより、Parasoft の外部でユーザー認証を管理できます。OpenID Connect のサポートは、デフォルトでは無効化されています。


基本設定

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

OIDC サーバーの設定

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

  2. 必要なリダイレクト URI を登録して、認証後のユーザーのリダイレクト先を OIDC サーバーに設定します。<CTP_DIR>/em/login/oauth2/code/ctp URI を登録します。

CTP の設定

<TOMCAT_DIR>/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": [],
    "clientCredentials": {
        "enabled" : false,
        "clientId" : "client id",
        "clientSecret" : "client secret",
        "scopes" : ["openid"],
        "claimMappings" : {
            "username": "preferred_username",
        }
    }
}

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

クライアント資格情報フローでは、CTP は OAuth サーバーから JWT アクセス トークンを要求し、それを DTP での認証に使用します。DTP OIDC 構成では、トークン内のどのクレームを DTP が認証するためのユーザー名として使用するかを指定する必要があります。対応するユーザー名が DTP で構成されていることを確認します。OAuth サーバー (Keycloak や EntraId など) に応じて、アクセス トークンのクレームは構成可能です。トークンにどのようなクレームがあるかわからない場合は、以下に示すように curl コマンドを使用してトークンを要求し、トークンの内容を調べて確認できる場合があります。すべての REST API 機能に完全にアクセスするには、OAuth 2.0 認証が必要であることに注意してください。

curl --request POST \
  --url 'https://{yourDomain}/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data client_id=YOUR_CLIENT_ID \
  --data client_secret=YOUR_CLIENT_SECRET \

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

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

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

clientSecret string

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

scopes 文字列の配列

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

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

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

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

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

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

email stringOIDC で要求される Email にマッピングされる値を指定します。デフォルトは email です。 
adminUsers 文字列の配列ログイン時に管理者権限を付与する必要がある組織内の既存のユーザーを指定します。 
clientCredentialsobjectDTP および License Server への送信接続用のクライアント資格情報を指定します。

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

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

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 のコマンドラインインスタンスを実行することで、パスワードを暗号化できます。これにより、AES 256 ビット暗号化を使用して、構成ファイルで使用できる暗号化された文字列が生成されます。 

設定の例

以下のサンプルは、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 が realm の名前です。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>/v2.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