您可以将 CTP 配置为接受 OpenID Connect 身份提供者的身份验证。这样,您便能在 Parasoft 之外管理用户身份验证。默认禁用对 OpenID Connect 的支持。章节目录:
基础配置
需要在用户管理和 OIDC 服务器中进行配置。
OIDC 服务器配置
如果尚未注册,请向 OpenID Connect 身份提供者注册用户管理权限。 可以从授权服务器(Keycloak、connect2id 等)获取 oidc.json 文件中使用的属性值。
注册必要的重定向 URI,以便 OIDC 服务器知道身份验证后应将用户发送到哪里。应注册
<ctp>/em/login/oauth2/code/ctp
URI。
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 | array of strings | 定义 OIDC 服务器将提供给客户端的用户信息集。CTP 主要使用数组中指定的值来访问用户声明。默认情况下定义了以下数组:
| |
claimMappings | object | 代表用户信息。 | |
username | string | 指定映射到 OIDC 中已声明用户名的值。默认为 preferred_username 。 | |
firstName | string | 指定映射到 OIDC 中已声明名字的值。默认为 given_name 。 | |
lastName | string | 指定与 OIDC 中已声明姓氏相对应的值。默认为 family_name 。 | |
email | string | 指定映射到 OIDC 中已声明电子邮件的值。默认为 email。 | |
adminUsers | array of strings | 指定登录时组织中应被授予管理员权限的现有用户。 |
配置文件后,保存更改并重启 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
。在本示例中将创建两个管理员用户(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 压缩包 (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=[包含用户身份验证信息的自定义令牌文件的路径]
启用“设备代码”模式后,启动 soavirt.war 或 soatestcli 时,用户将获得用于身份验证的 URL 和设备代码。如果身份验证成功,信息将保存到令牌文件(文件路径存储在 oidc.devicecode.token.file
设置中),以便重复使用。如果文件中保存的信息失效,用户需要重新进行身份验证。
证书身份验证:
oidc.enabled=true
oidc.cli.mode=certificate
oidc.issuer.uri=[OpenID Connect 服务器的 URI]
oidc.client.id=[ID provided by the OpenID Connect server]
oidc.client.secret=[password provided by OpenID Connect server]
oidc.scopes=[以空格分隔的范围列表,用于在身份验证过程中授权访问用户的详细信息]
默认为:openid profile offline_access
.oidc.keystore=[path to the keystore file that stores the certificate to authenticate the user on the OpenID Connect server]
oidc.keystore.password=[password to the keystore file; see note below.]
我们强烈建议您为 oidc.keystore.password
使用编码密码。可以使用 -encodepass
标志运行 SOAtest 的命令行实例来对密码进行编码。命令行工具将生成编了码的字符串,并且可在配置文件中使用。
配置示例
以下示例可帮助您了解如何将 CTP 连接到身份访问管理系统。有关实施细节,请参阅您的软件文档。
Keycloak
以下配置是按本示例所述为 Keycloak 配置 OpenID Connect 的先决条件:
- Keycloak 应使用 RS256 作为默认签名算法。
- Keycloak 提供的访问令牌应包含可用的用户信息,这些信息也可从 Keycloak
userinfo API
端点获取。 - 应注册以下重定向 URI:
host:port/*
在本示例中,demo
是领域名称,将创建两个管理员用户(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 访问用户管理。
在本示例中,c2id
是领域的名称。将创建两个管理员用户(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 时,您可能会收到“无效请求”错误信息。要解决该错误,请使用其他浏览器或清除当前浏览器的缓存。
Azure Active Directory
以下配置是为 Azure Active Directory 配置 OpenID Connect 的先决条件:
- Azure 提供的访问令牌应包含可用的用户信息,这些信息也可从 Azure userinfo API 端点获取。
- 应注册以下重定向 URI:
https://host:port/em/login/oauth2/code/ctp
。
在本示例中将创建两个管理员用户(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 文档。