JAAS LoginModule标志

时间:2011-06-27 02:34:04

标签: jaas

我正在尝试弄清楚登录模块标志如何在JAAS中工作(使用JBoss 5.1 EAP),我遇到了一个令人费解的情况,我希望有人可以为我澄清。

对于后台,我的login-config.xml如下所示:

<authentication-policy>
  <authentication>
    <login-module code="...loginModule1" flag="sufficient">
      ...
    </login-module>
    <login-module code="...loginModule2" flag="optional">
      ...
    </login-module>
    <login-module code="...loginModule3" flag="optional">
      ...
    </login-module>
  </authentication>
</authentication-policy>

在这种情况下,loginModule1是独立的,但loginModule2依赖于loginModule3。我遇到的问题是,如果loginModule1失败并且loginModule2和loginModule3都成功,我仍然会失败登录。如果我将loginModule1更改为可选,那么当loginModule1失败并且2和3成功时,我成功登录。

来自JBoss安全文档(http://docs.jboss.org/jbossas/admindevel326/html/ch8.chapter.html):

sufficient: the LoginModule is not required to succeed. If it does succeed, 
control immediately returns to the application (authentication does not proceed 
down the LoginModule list). If it fails, authentication continues down the 
LoginModule list.

我基于此认为当具有足够标志的LoginModule失败,但是后面的LoginModule通过然后我会成功登录时,任何人都知道为什么不是这种情况?

1 个答案:

答案 0 :(得分:9)

您应该查看javax.security.auth.login.Configuration class上的java文档,它包含有关足够,必需,必需和可选含义的所有信息。与您的问题相关的是这一段:

  

仅当所有必需和必需的LoginModule都成功时,整体身份验证才会成功。如果配置了足够的LoginModule并且成功,则只需要在该足够的LoginModule之前的必需和必需的LoginModule成功完成整个身份验证。如果没有为应用程序配置必需或必需的LoginModule,则必须至少有一个Sufficient或Optional LoginModule成功。

这是应该发生的事情,所以看起来你的设置是正确的,但有些东西没有正确返回所以一切都失败了。也许JBoss做的事情有点不同。