WS-安全(用户名令牌)为CXF - 加密的密码可能吗?

我试图让与CXF的WS-Security实现(用户名令牌)在一起。 我作为http://cxf.apache.org/docs/ws-security.html所说所做的一切。 我PasswordCallbackHandler似乎是工作,但什么困扰我的是一部分:

if (pc.getIdentifier().equals("joe")) { // set the password on the callback. This will be compared to the // password which was sent from the client. pc.setPassword("password"); }

如说

请注意,直到并包括CXF 2.3.x版本,一个明文密码(或任何其他未知的密码类型)的特殊情况下的密码验证被委托给回调类,见org.apache.ws.security。 processor.UsernameTokenProcessor#handleUsernameToken()的WSS4J项目的方法的javadoc。 在这种情况下,ServerPasswordCallback应该像下列之一:

所以到CXF 2.3.x版本有人做过这样的

if (pc.getIdentifer().equals("joe") { if (!pc.getPassword().equals("password")) { throw new IOException("wrong password"); } }

我的问题是:我不想pc.setPassword(“plainTextPassword”),因为我想将其存储在任何资源。 这种先进的2.3.x版本的设计,让我做到这一点,因为我可以手动加密。 是否有回调设置加密的密码或做UsernameToken身份验证存储,加密密码的任何方式?

我使用CXF 2.5.X

--------------解决方案-------------

答案(我已经试过)在这个博客页面发现:

http://coheigea.blogspot.com/2011/06/custom-token-validation-in-apache-cxf.html

其实质是创造org.apache.ws.security.validate.UsernameTokenValidator的子类,并覆盖verifyPlaintextPassword方法。 在该方法中,所述的UsernameToken(提供getName和getPassword来)被传递。 如果他们不是有效抛出异常。

要安装在Spring配置自定义验证,如添加

<jaxws:properties>
<entry key="ws-security.ut.validator">
<bean class="com.example.webservice.MyCustomUsernameTokenValidator" />
</entry>
</jaxws:properties>

到<JAXWS:端点/>。

回调处理程序在那里提供明文密码或验证摘要密码,其中明文密码是已知的。

但是,如果你不知道明文即其散列的一种方式,那么回调接口是不恰当的,你应该创建一个实现了Validator接口的类。

这是我使用其中的密码已被存储为BCrypt散列的JPA存储库接口的示例实现。

通过使用ws-security.ut.validator这里记录属性

即作为CXF属性<entry key="ws-security.ut.validator" value-ref="com.package.CustomUsernameTokenValidator" />

public class CustomUsernameTokenValidator implements Validator {
@Autowired
ProfileRepository profileRepository;
@Override
public Credential validate(Credential credential, RequestData requestData) throws WSSecurityException {
Profile profile = profileRepository.findByName(credential.getUsernametoken().getName());
if (profile != null) {
if (BCrypt.checkpw(credential.getUsernametoken().getPassword(), profile.getPassword())) {
return credential;
}
}
throw new WSSecurityException(WSSecurityException.ErrorCode.FAILED_AUTHENTICATION);
}
}

分类:CXF 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.350 (s). 10 q(s)