Я уже просматривал
Произошла ошибка при проверке безопасности сообщения - токен SAML и Как вставить токен SAML непосредственно в службу JAX-WS без вызова STSClient
Я также работаю в сфере образования в Австралии. Сейчас я тоже борюсь с сервисом STS v3. Я использую cxf и wsdl2 java
<jaxws:client name="{http://usi.gov.au/2018/ws/servicepolicy}WS2007FederationHttpBinding_IUSIService" createdFromAPI="true">
<jaxws:inInterceptors>
<ref bean="unexpectedResponseNodeInterceptor"/>
</jaxws:inInterceptors>
<jaxws:properties>
<entry key="ws-security.sts.client">
<bean class="org.apache.cxf.ws.security.trust.STSClient">
<constructor-arg ref="usiClientBus"/>
<property name="wsdlLocation" value="https://softwareauthorisations.ato.gov.au/R3.0/S007v1.3/service.svc"/>
<property name="serviceName" value="{http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}SecurityTokenService"/>
<property name="endpointName" value="{http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}S007SecurityTokenServiceEndpoint"/>
<property name="properties">
<map>
<entry key="ws-security.sts.client-soap12-binding" value="true"/>
<entry key="ws-security.signature.crypto" value-ref="ausKeyCryptoService"/>
<entry key="ws-security.callback-handler" value-ref="ausKeyCryptoService"/>
</map>
</property>
</bean>
</entry>
<entry key="ws-security.cache.issued.token.in.endpoint" value="false"/>
</jaxws:properties>
Первоначальная ошибка, с которой я столкнулся: «E9004 Обнаружена ошибка при обработке заголовка wsse: Security». Эта ошибка, документированная в MTS-ST, делает c https://softwaredevelopers.ato.gov.au/sites/default/files/resource-attachments/MAS-ST_SecurityTokenService_ServiceDefinition.pdf
Но их объяснение действительно бесполезно.
тогда я указал STSClient на локальный файл wsdl, например
и измените AlgorithmSuite, как рекомендовано в комментариях выше. Я сделал то же самое для USI WSDL. Ошибка, которую я получаю сейчас: An error occurred when verifying security for the message
. Я даже не знаю, лучше это (некоторый прогресс) или хуже (просто сделайте шаг назад).
Я просмотрел soap Сообщение конверта, оно содержит:
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
Я предполагаю, что алгоритм sha1 является причиной моей ошибки. Но это атрибут моего сертификата, как я понял.
Я также пробовал примеры кода, которые предоставляет MAS-ST: он использует проприетарную реализацию ABR_SecurityTokenManager.jar и Metro ws. Я не знаю как, но это работает (по крайней мере 1 шаг получения токена безопасности со стороны MAS-ST). Я проверил soap Envelop, а также был удивлен, у меня есть
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"/>
, но сертификат такой же, как в моем примере.