Spring WS-Security виден в WSDL
-
20-08-2019 - |
Вопрос
Я реализовал аутентификацию через WS-Security на своем веб-сервисе, как описано в разделе http://static.springframework.org/spring-ws/sites/1.5/reference/html/security.html, вот так:
<bean id="callbackHandler" class="org.springframework.ws.soap.security.wss4j.callback.SimplePasswordValidationCallbackHandler">
<property name="users">
<props>
<prop key="bart">arnie</prop>
</props>
</property>
</bean>
<bean id="annotationMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
<property name="interceptors">
<list>
<bean class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
<property name="validationActions" value="UsernameToken" />
<property name="securementActions" value="NoSecurity" />
<property name="validationCallbackHandler" ref="callbackHandler" />
</bean> ...
Однако клиенты (например, SoapUI) не знают, что им следует использовать безопасность, поскольку она не упоминается в WSDL.Как я могу добиться, чтобы это было?Вот как я это генерирую:
<bean id="qwertyService" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schemaCollection" ref="schemaCollection" />
<property name="portTypeName" value="QwertyService" />
<property name="locationUri" value="/QwertyService/" />
<property name="targetNamespace" value="http://www.ead2.nl/demo/wsdl" />
</bean>
Решение
WS-Security сам по себе не помещается в WSDL.WS-Policy основан на WS-Security, возможно, можно использовать эти более сложные стандарты, чтобы добавить их в WSDL, но не похоже, что это то, что вам нужно.
В SOAPUI информация о безопасности создается в виде настроек проекта.Если вы дважды щелкните проект, появится вкладка «Безопасность».Хранилища ключей можно добавить, если вы используете схему на основе PKI, и вы можете определить исходящие и входящие конфигурации.К каждому сообщению можно применить пару конфигураций в зависимости от того, что в сообщении вы хотите защитить.
Другие советы
Вполне возможно передать информацию ws-security в wsdl !!!!!
Посмотрите на ws-policy и, в частности, на ws-securitypolicy (оба идут вместе)
Однако я не могу конкретно помочь вам с реализацией.
надеюсь, это поможет