2010-02-03 62 views
0

是否有人使用BlazeDS RemoteObject能够通过JBoss DatabaseLoginModule登录策略检索经过身份验证的用户角色?BlazeDS 3.2.0和JBoss 5.1 DatabaseServerLoginModule

我正在使用BlazeDS 3.2.0和JBoss 5.1。我可以成功进行身份验证,但我,拥有未经授权角色的用户仍然可以登录。我在默认/ jbossweb.sar/server.xml中“严”改变了境界,如下图所示:

<Realm className="org.jboss.web.tomcat.security.JaccAuthorizationRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" allRolesMode="strict" /> 

相同的登录模块在其他Web应用程序中使用,它工作得很好。在默认情况下/ conf目录/登录-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 /柔性/ services-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 /flex/remoting-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的境界,但是这件事情就像我想避免因为Jboss还提供其它登录模块,如LDAP,我可能会在未来使用。

感谢, B.

回答

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?