CAC/PIV 卡用户可打开浏览器访问 CTP,并通过 OAuth 2.0 的 JWT 访问令牌自动进行身份验证。要进行设置,您需要确保在 JWT 授权数组中授予几个 CTP 角色特定权限,并修改 CTP 的安全性 XML 文件。此外,您还可以配置单点登录(SSO)注销 URL,用户注销时将重定向到该 URL。
JWT 授权数组中要求的 CTP 角色
CTP 要求以下角色在 JWT 权限数组中拥有相关权限:
角色 | 权限 |
---|---|
CTP_ADMIN | 对所有资源的完全权限 |
CTP_SYSTEM | 仅对已授权资源拥有读/写/创建/执行/删除的权限 |
CTP_BASIC | 仅对已授权资源拥有读/执行的权限 |
配置 CTP 安全性 XML 文件
CTP 的 applicationContext-security.xml 文件包含允许使用 OAuth 2.0 的 JWT 访问令牌的必要元素,不过这些元素默认情况下已被注释掉。您需要取消注释,并根据您的设置提供特定配置,以启用 OAuth 2.0 的 JWT 访问令牌。
在 Apache Tomcat 中部署 CTP 时,可在以下位置找到 applicationContext-security.xml 文件:
tomcat/webapps/em/WEB-INF/classes/META-INF/spring/applicationContext-security.xml
您需要对这个文件做以下更改:
取消对预授权过滤器的注释
取消对以下所示行的注释以启用预授权过滤器:
<!-- <custom-filter position="PRE_AUTH_FILTER" ref="BearerTokenAuthFilter"/> -->
取消对身份验证提供者的注释
取消对以下所示行的注释以启用身份验证提供者:
<!-- <authentication-provider ref="BearerTokenAuthProvider" /> -->
取消对持有者令牌 bean 的注释并进行配置
取消对以下所示行的注释以启用持有者令牌 bean,然后配置 JWKS 端点和声明的值。
- 第一个参数对应授权服务器的 JWKS 集 URL。
- 第二个参数("usernameClaim")对应用于识别用户的声明。此参数为可选参数,如未提供,将默认使用嵌入在 JWT 令牌中的 'subject'。
- 第三个参数("userRoleClaim")对应用于识别用户角色的声明。此参数为可选参数,如未提供,将不会设置用户的角色。
- 如果为嵌套的 JSON 对象,请使用 '.' 分隔键名。示例:roleOuterKey.roleInnerKey.
<!-- <beans:bean id="BearerTokenAuthProvider" class="com.parasoft.ctp.web.security.CTPBearerTokenAuthenticationProvider"> <beans:constructor-arg><beans:value>http://localhost:8080/.well-known/jwks.json</beans:value></beans:constructor-arg> <beans:constructor-arg name="usernameClaim"><beans:value></beans:value></beans:constructor-arg> <beans:constructor-arg name="userRoleClaim"><beans:value></beans:value></beans:constructor-arg> </beans:bean> <beans:bean id="BearerTokenAuthFilter" class="com.parasoft.ctp.web.security.CTPBearerTokenAuthenticationFilter"> <beans:property name="authenticationManager" ref="authenticationManager"></beans:property> </beans:bean> -->
自定义单点登录(SSO)注销 URL
通过修改 applicationContext-security.xml 中的以下 bean,可以自定义单点登录(SSO)注销 URL:
<beans:bean id="logoutSuccessHandler" class="com.parasoft.ctp.web.security.CTPLogoutSuccessHandler"> <!-- specify a URL that the user will be redirected to after they logout --> <beans:constructor-arg><beans:value></beans:value></beans:constructor-arg> </beans:bean>