要求されたUsernameTokenでセキュリティトークンサービス(サーバー側)を実装しようとしましたが、サービスがcxfによって生成されたトークンに応答する必要があります。 私はJAVA、SpringBoot、Javaベースの設定を使用します。トークンストアを持つCXFカスタムセキュリティトークンプロバイダ
カスタムトークンプロバイダを実装し、cxfのデフォルトのトークンストアを使用するにはいくつかの問題があります。
マイカスタムSCTProvider:
public class BiPROTokenProvider extends SCTProvider{
private static final String WSC_IDENTIFIER = "wsc:Identifier";
private static final String BIPRO_PRAEFIX = "bipro:";
@Override
public TokenProviderResponse createToken(TokenProviderParameters tokenParameters) {
TokenProviderResponse response = super.createToken(tokenParameters);
String biproId = BIPRO_PRAEFIX + response.getTokenId().split(":")[1];
//NodeList identifier = ((Element) response.getToken()).getElementsByTagName(WSC_IDENTIFIER);
//identifier.item(0).setTextContent(biproId);
//Element identifier = response.getTokenId().getElementsByTagName(WSC_IDENTIFIER);
//super.createToken(tokenParameters).setTokenId(biproId);
response.setTokenId(biproId);
return response;
}
}
私の最初の問題は、私は私のカスタムSCTプロバイダを含むべきところ私にはわからないということ、ありますか? - 私のエンドポイントで公開することは可能でしょうか?
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), securityTokenServicePortType());
endpoint.setServiceName(securityTokenService26010().getServiceName());
endpoint.setWsdlLocation(securityTokenService26010().getWSDLDocumentLocation().toString());
endpoint.publish("/SecurityTokenService-2.6.0.1.0");
endpoint.getOutFaultInterceptors().add(soapInterceptor());
return endpoint;
}
@Bean
public DefaultInMemoryTokenStore defaulttokenStore(){
return new DefaultInMemoryTokenStore();
}
@Bean
SCTProvider customSCTProvider(){
return new BiPROTokenProvider();
}
第二の問題:私はCXFからデフォルトtokenstoreに私の生成されたトークンを格納したい 。私はトークンストアについて何かを読んだ。 http://cxf.apache.org/docs/ws-securitypolicy.html 私の意見では、サービス実装からのenpointpropertiesにtokenstoreを含める必要があります。
@WebService
(
portName = "wst:UserPasswordLogin",
serviceName = "SecurityTokenService_2.6.0.1.0",
wsdlLocation = "src/main/resources/wsdl/SecurityTokenService- 2.6.0.1.0.wsdl",
endpointInterface = "net.bipro.namespace.SecurityTokenServicePortType"
)
@EndpointProperties({
@EndpointProperty(key = "ws-security.callback-handler", value="com.muki.endpoint.STSCallbackHandler"),
//@EndpointProperty(key = "ws-security.add.inclusive.prefixes", value="false"),
@EndpointProperty(key = "org.apache.cxf.ws.security.tokenstore.TokenStore", value="TOKEN_STORE_CACHE_INSTANCE"),
})
public class SecurityTokenEndpoint implements SecurityTokenServicePortType {
...
}
ただし、トークンストアをエンドポイントプロパティを使用して含めると、次のエラーが表示されます。
<faultstring>java.lang.String cannot be cast to org.apache.cxf.ws.security.tokenstore.TokenStore</faultstring>
tokenstoreとカスタムSCTプロバイダをどのように含めることができますか?
あなたの問題を解決できましたか? – Kamil