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>



  • No labels