BlazeDS 3.2.0和JBoss 5.1 DatabaseServerLoginModule

时间:2010-02-03 16:12:46

标签: flex flash jboss blazeds

是否有人使用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,我将来可能会使用它。

谢谢, 乙

1 个答案:

答案 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不应立即失败 允许一组角色?