使用DatabaseServerLoginModule在JBoss EAP 6.3上进行身份验证时,不会传播主体

时间:2015-03-30 13:56:19

标签: authentication jboss principal

我对JBoss部署非常陌生,我只是继承了将我们的RAP web-app和基于Seam的web-app从JBoss 7.1.1迁移到EAP 6.3的任务。基于接缝的Web应用程序已启动并正常运行,但我无法通过RAP / Faces端的身份验证部分。日志显示用户正在进行身份验证,但主体名称是匿名的,看来EJBContext在经过身份验证后未保留经过身份验证的用户主体信息。

我将login-module定义为:

<security-domain name="myRealm" cache-type="default">
  <authentication>
     <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
        flag="sufficient">
          <module-option name="unauthenticatedIdentity" value="guest"/>
          <module-option name="password-stacking" value="useFirstPass"/>
          <module-option name="dsJndiName" value="java:jboss/datasources/myDatasource"/>
          <module-option name="principalsQuery" 
            value="SELECT PASSWORD FROM USER WHERE USER_NAME = ?"/>
          <module-option name="rolesQuery" value="SELECT VALUE, 'Roles'
            from ROLES where USER_NAME = ?"/>
    </login-module>
    ...
    </authorization>
</security-domain>

因此我的jboss-web.xml是:

<jboss-web>
  <security-domain>java:/jaas/myRealm</security-domain>
</jboss-web>

正如我所提到的,身份验证似乎工作正常,因为日志指示来自数据库的正确角色并且未指示任何约束。但是,此信息未在主体中传播/保留...因此,当命中RAP应用程序入口点,并且访问EJBContext以执行我们的工作并创建UI时,它将失败。

我认为这是我在这次移植中没有做的事情,但到目前为止,我在这方面找到的帮助并没有帮助我克服这个障碍。我们正在使用旧版本的RAP(1.2我相信)。在这次迁移中,我们也转向Java 8,但我的问题也发生在使用Java 7(我们用于JBoss 7.1.1 impl)。所以我是&#34;假设&#34;它不是Java问题,而是EAP部署问题。由于我们使用的是默认的DatabaseServerLoginModule模块,因此我没有定义自己的登录模块,就像我扩展6.3附带的模块一样。

...一些更新的信息可能有助于任何想要介入并提供帮助的人。在standalone-full.xml文件中,我指定了&#34; org.jboss.security.auth.spi.DatabaseServerLoginModule&#34;模块,但在跟踪日志中似乎条目来自&#34; org.apache.catalina.authenticator.DatabaseServerLoginModule。&#34;我不知道这是正确的还是一个问题。来自我的7.1.1 impl的跟踪日志显示来自standalone-full.xml文件中指定的模块的所有条目,而不是catalina版本。

我也看到,对于7.1.1 impl,我有日志条目&#34;用户&#39;用户&#39; authenticated,loginOk = true&#34;但对于EAP,我从未看到loginOk标志被设置,即使该模块似乎通过说&#34; Authenticated&#39; user&#39;来表示用户已通过身份验证。使用类型&#39; FORM&#39;&#34;和&#34;用户[用户]有角色[用户]。&#34;但EAP登录模块似乎没有设置loginOk flag = true。因此,根据我的发现,Principal不会更新用户应该做的信息。

如果我假设模块&#34; org.jboss.security.auth.spi.DatabaseServerLoginModule&#34;如定义仍然有效,那么可能在&#34; org.apache.catalina.authenticator.DatabaseServerLoginModule&#34;中存在问题。模块被用作JBoss模块的代理或包装器,因此它不会设置loginOk标志,而该标志又会设置正确的Principal值。但这是我的猜测。

0 个答案:

没有答案