替换验证身份
20.1. 概述
AbstractSecurityInterceptor可以在安全对象回调期间,暂时替换SecurityContext和SecurityContextHolder里的Authentication对象。 只有在原始Authentication对象被AuthenticationManager和AccessDecisionManager成功处理之后,才有可能发生这种情况。 如果有需要,RunAsManager会显示替换的Authentication对象,这应该通过SecurityInterceptorCallback调用。
通过在安全对象回调过程中临时替换 Authentication 对象,安全调用可以调用其他需要不同认证授权证书的对象。 这也可以为特定的GrantedAuthority对象执行内部安全检验。 因为Spring Security提供不少帮助类,能够基于SecurityContextHolder的内容自动配置远程协议,这些运行身份替换在远程web服务调用的时候特别有用。
20.2. 配置
一个Spring Security提供的 RunAsManager 接口::
Authentication buildRunAs(Authentication authentication, Object object, ConfigAttributeDefinition config);
boolean supports(ConfigAttribute attribute);
boolean supports(Class clazz);
第一个方法返回 Authentication对象,在方法的调用期间替换以前的 Authentication 对象。 如果方法返回null,意味着不需要进行替换。 第二个方法用在AbstractSecurityInterceptor中,作为它启动时校验配置属性的一部分。 supports(Class)方法会被安全拦截器的实现调用,确保配置的RunAsManager支持安全拦截器即将执行的安全对象类型。
Spring Security提供了一个 RunAsManager的具体实现。 如果任何一个ConfigAttribute是以RUN_AS_开头的,RunAsManagerImpl类返回一个替换的RunAsUserToken。 如果找到了任何这样的ConfigAttribute,替换的 RunAsUserToken会通过一个新的GrantedAuthorityImpl,为每一个RUN_AS_ ConfigAttribute包含同样的主体,证书,赋予的权限,就像原来的Authentication对象一样。 每个新 GrantedAuthorityImpl 会以ROLE_开头,对应RUN_AS ConfigAttribute。 比如,一个替代RunAsUserToken,对于RUN_AS_SERVER的结果是包含一个ROLE_RUN_AS_SERVER赋予的权限。
替代的 RunAsUserToken 就像其他 Authentication 对象一样。 它可能需要通过代理合适的AuthenticationProvider被AuthenticationManager验证。 这个RunAsImplAuthenticationProvider执行这样的认证,它直接获得任何一个有效的RunAsUserToken。
为了保证恶意代码不会创建一个RunAsUserToken,由RunAsImplAuthenticationProvider保障获得一个key的散列值被保存在所有生成的标记里。 RunAsManagerImpl和RunAsImplAuthenticationProvider在bean上下文里,创建使用同样的key:
<bean id="runAsManager" class="org.springframework.security.runas.RunAsManagerImpl">
<property name="key" value="my_run_as_password"/>
</bean>
<bean id="runAsAuthenticationProvider"
class="org.springframework.security.runas.RunAsImplAuthenticationProvider">
<property name="key" value="my_run_as_password"/>
</bean>
通过使用相同的key,每个RunAsUserToken可以被它验证,并使用对应的RunAsManagerImpl创建。 出于安全原因,这个RunAsUserToken创建后就不能改变。
分享到:
相关推荐
包含翻译后的API文档:spring-security-core-5.3.9.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-core:5.3.9.RELEASE; 标签:springframework、security...
spring-beans-2.0.xsd
包含翻译后的API文档:spring-security-core-5.2.0.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-core:5.2.0.RELEASE; 标签:springframework、security...
包含翻译后的API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security.oauth:spring-security-oauth2:2.3.5.RELEASE; 标签:spring、security...
包含翻译后的API文档:spring-security-rsa-1.0.10.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-rsa:1.0.10.RELEASE; 标签:spring、rsa、security、...
包含翻译后的API文档:spring-security-jwt-1.0.10.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-jwt:1.0.10.RELEASE; 标签:spring、security、jwt、...
包含翻译后的API文档:spring-security-web-5.2.0.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-web:5.2.0.RELEASE; 标签:springframework、security、...
spring-boot-starter-web-2.0.7.0.jar
spring-dwr-2.0.xsd spring 与 DWR进行配置
包含翻译后的API文档:spring-boot-actuator-autoconfigure-2.3.12.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.12....
Struts2-Spring-Plugin-2.0.11.1版本是在2.0.11.1时期发布的,可能包含了一些特定的修复和优化,具体可以查阅该版本的发行说明或官方文档,以了解其特性、改进和已知问题。 在使用这个插件时,你需要在Struts2的...
包含翻译后的API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.security.oauth:spring-security-oauth2:2.3.5.RELEASE; 标签:spring...
包含翻译后的API文档:spring-security-core-5.0.7.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-core:5.0.7.RELEASE; 标签:springframework、security...
spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-2.5.2.jar spring-aop-2.5.4.jar spring-aop-2.5.5.jar spring-aop-2.5.6.jar spring-aop-3.0.0.RELEASE.jar spring-aop-3.0.2.RELEASE.jar spring-aop-sources...
包含翻译后的API文档:spring-security-crypto-5.6.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-crypto:5.6.1; 标签:spring、security、springframework、...
包含翻译后的API文档:spring-security-jwt-1.0.10.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.security:spring-security-jwt:1.0.10.RELEASE; 标签:spring、security...
首先,`struts-2.0.dtd`是Struts 2.0的文档类型定义,它是XML文件的一种规范,用于验证`struts.xml`配置文件的语法是否正确。DTD中定义了配置元素和属性,如action、result、package等,确保开发者在编写配置文件时...
包含翻译后的API文档:spring-security-crypto-5.5.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-crypto:5.5.2; 标签:springframework、security、spring、...
spring-framework-2.0-with-dependencies.zip spring-framework-2.0-with-dependencies.zip spring-framework-2.0-with-dependencies.zip spring-framework-2.0-with-dependencies.zip spring-framework-2.0-with-...