Я пытаюсь настроить cxf soap webservice с авторизацией и аутентификацией, которые будут развернуты на Servicemix.cxf-rs-ws авторизация под karaf
Я настроил модуль аутентификации LDAP следующим образом:
<!-- Bean to allow the $[karaf.base] property to be correctly resolved -->
<ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]"/>
<jaas:config name="myRealm">
<jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="required">
connection.url = ldap://srv-ldap:389
user.base.dn = ou=people,dc=intranet,dc=company,dc=com
user.filter = (uid=%u)
user.search.subtree = false
role.base.dn = ou=groups,dc=intranet,dc=company,dc=com
role.filter = (member:=uid=%u,ou=people,dc=intranet,dc=company,dc=com)
role.name.attribute = cn
role.search.subtree = true
authentication = simple
</jaas:module>
</jaas:config>
<service interface="org.apache.karaf.jaas.modules.BackingEngineFactory">
<bean class="org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory"/>
</service>
А вот файл beans.xml
<jaxws:endpoint id="myService"
implementor="com.myorg.services.impl.MyServiceWSImpl"
address="/myService">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken" />
<entry key="passwordType" value="PasswordText" />
</map>
</constructor-arg>
</bean>
<ref bean="authenticationInterceptor" />
<ref bean="authorizationInterceptor" />
</jaxws:inInterceptors>
<jaxws:properties>
<entry key="ws-security.validate.token" value="false" />
</jaxws:properties>
</jaxws:endpoint>
<bean id="authenticationInterceptor"
class="org.apache.cxf.interceptor.security.JAASLoginInterceptor">
<property name="contextName" value="myRealm" />
</bean>
<bean id="authorizationInterceptor"
class="org.apache.cxf.interceptor.security.SecureAnnotationsInterceptor">
<property name="securedObject" ref="securedBean"/>
</bean>
Наконец, в моей реализации WebService я аннотированный метод с @RolesAllowed.
@RolesAllowed("Role1")
public Department get(String name) throws IdMException {
return service.get(name);
}
Аутентификационный перехватчик получает пользователя, аутентифицирует его и извлекает группы в качестве экземпляров RolePrincipal. Затем, в авторизационном перехватчике (SecureAnnotationsInterceptor), конфигурация метода считывается, ожидаемые Roles являются «Role1», но метод SimpleAuthorizingInterceptor.isUserInRole возвращает false.
Я не нашел ни одного примера, пытается сделать более или менее то же самое, и некоторую информацию я нашел из странице документации CXF http://cxf.apache.org/docs/security.html#Security-Authorization
я должен быть что-то важное не хватает, надеюсь, кто-то может мне помочь. Спасибо заранее и с уважением.
Спасибо вам большое! –
Нет проблем. Обратите внимание, что есть коммерческий клон ServiceMix с полной поддержкой. На данный момент такая же проблема возникает в JBoss Fuse, но она скоро будет решена в JBoss Fuse. Ссылка на вопрос: https://issues.jboss.org/browse/ENTESB-1672 –