通过 spring-boot 进行 Spring WS UsernameToken 身份验证 + 会话管理

Posted

技术标签:

【中文标题】通过 spring-boot 进行 Spring WS UsernameToken 身份验证 + 会话管理【英文标题】:Spring WS UsernameToken authentication + session management via spring-boot 【发布时间】:2015-01-30 17:41:28 【问题描述】:

我已经使用 Spring Boot 发布了 Spring Web 服务。在 WsConfigurerAdapter 中,我使用 XwsSecurityInterceptor 和 SimplePasswordValidationCallback 对用户进行身份验证,这很好。

网络配置,

@Bean
XwsSecurityInterceptor securityInterceptor() 
    XwsSecurityInterceptor securityInterceptor = new XwsSecurityInterceptor();
    securityInterceptor.setCallbackHandler(callbackHandler());
    securityInterceptor.setPolicyConfiguration(new ClassPathResource("securityPolicy.xml"));
    return securityInterceptor;


@Bean
CallBackHandlerHelper callbackHandler() 
    CallBackHandlerHelper callbackHandler = new CallBackHandlerHelper();
    callbackHandler.loadUsers(); // loading users from DB
    return callbackHandler;

示例肥皂标题。

<soapenv:Header>
   <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
   <wsse:UsernameToken wsu:Id="XWSSGID-14072105829651149256297" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <wsse:Username>admin</wsse:Username>
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</soapenv:Header>

现在我正在努力解决这些 02 问题,

1) 如何使用密码摘要和随机数,而不是纯文本。 (在我的策略 xml 中,我已将它们设置为 false 并通过 SOAP 标头以纯文本格式加载 wss:usernameToken。但我更喜欢获取密码摘要而不是纯文本格式)。

2) 我需要通过保留会话密钥来将此服务设置为有状态。不想每次都发送用户/密码。想法是仅使用用户名令牌来登录请求,然后使用唯一密钥管理会话,直到用户发送注销请求。(希望将此生成的会话密钥保留在内存中,直到会话关闭)我怎么能想办法解决这个问题给定的上下文?

【问题讨论】:

【参考方案1】:

    对于摘要,您将在安全策略文件中使用以下内容:

    <xwss:UsernameToken digestPassword="true" useNonce="true"/>
    

XWSS 配置格式的参考文档可以在here 找到。

    我真的认为您应该重新考虑,因为有状态服务通常是不受欢迎的。例如,请参阅this similar SO question,或this one,或this one,等等。

【讨论】:

以上是关于通过 spring-boot 进行 Spring WS UsernameToken 身份验证 + 会话管理的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot的三种启动方式

spring-boot的三种启动方式

spring-boot学习三:运用@configurationProperties与@Validated进行JSR303数据格式校验

关于快速创建一个spring-boot项目的操作,简单的spring运行方式的总结,spring注解的简单理解。

Spring-boot通过向导快速创建Spring-boot项目

Spring-Boot 不适用于 Flyway