是否有人使用BlazeDS RemoteObject能够通过JBoss DatabaseLoginModule登录策略检索经过身份验证的用户角色?
我正在使用BlazeDS 3.2.0和JBoss 5.1。我可以成功验证,但我,具有未授权角色的用户仍然可以登录。我在default / jbossweb.sar / server.xml“strict”中更改了Realm,如下所示:
<Realm className="org.jboss.web.tomcat.security.JaccAuthorizationRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" allRolesMode="strict" />
在其他网络应用程序中使用相同的登录模块,它工作得很好。在默认的/ conf / login-config.xaml中我有:
<application-policy name="MyPolicy">
<authentication>
<login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name = "dsJndiName">java:/DefaultDS</module-option>
<module-option name = "principalsQuery">SELECT PASSWD FROM USERS WHERE USER_ID=?</module-option>
<module-option name = "rolesQuery">SELECT ROLE_ID, 'Role' FROM ROLES WHERE USER_ID=?</module-option>
<module-option name= "hashUserPassword">true</module-option>
<module-option name= "hashAlgorithm">SHA-256</module-option>
<module-option name= "hashEncoding">base64</module-option>
</login-module>
</authentication>
</application-policy>
其他细节: - WEB-INF / jboss-web.xml
<jboss-web>
<security-domain flushOnSessionInvalidation="false">java:/jaas/MyPolicy</security-domain>
</jboss-web>
WEB-INF / context.xml中
<Context>
<Valve className="flex.messaging.security.TomcatValve" />
</Context>
WEB-INF /柔性/服务-config.xml中
<security>
<login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
<per-client-authentication>false</per-client-authentication>
</login-command>
<security-constraint id="custom-admin-access">
<auth-method>Custom</auth-method>
<roles>
<role>ADMIN</role>
</roles>
</security-constraint>
</security>
WEB-INF /柔性/远程-config.xml中
<destination id="MyRemoteService">
<properties>
<source>test.blazeds.MyRemoteService</source>
<scope>session</scope>
</properties>
<security>
<security-constraint ref="custom-admin-access" />
</security>
</destination>
我知道我可以尝试实现自己的基于JDBC的Tomcat Realm,但这是我想要避免的,因为JBoss还提供了其他登录模块,例如LDAP,我将来可能会使用它。
谢谢, 乙
答案 0 :(得分:0)
我继续下载BlazeDS源代码,经过一些调试后,我意识到它可能只是我和我对登录行为的期望。不过,我对它有点困惑,也许有人可以在实际中澄清我 因为BlazeDS文档没有以明确的方式解释它。
我的配置非常简单,一个amf目的地 RemoteObejct用法和一个具有允许角色的安全约束。 在这种情况下,我期望ChannelSet.login失败,如果 用户不包括预期的角色。相反,登录成功 在我目前的设计中允许用户继续进行。
调试后我意识到TomcatLoginCommand.isUserInRole方法 仅在调用RemoteObject方法但从不在调用期间调用 ChangeSet.login命令。为了确认,我联系了 目的地某些方法的安全限制(见下文 - 如文档中所示)。正如所料,RemoteObject方法 使用没有的用户登录时不会被调用 给定的角色,但如果角色存在,一切都很好。
<destination ...>
...
<include-methods>
<method name="fooMethod"/>
<method name="barMethod" security-constraint="custom-admin-access"/>
</include-methods>
...
</destination>
基于此,我的问题仍然是:这是预期的行为吗?如果经过身份验证的用户未参与,则ChangeSet.login不应立即失败 允许一组角色?