我试图弄清楚登录模块标志在JAAS中是如何工作的(使用JBoss 5.1EAP),我遇到了一个令人困惑的情况,我希望有人能为我澄清。
作为背景,我的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通过,那么我将获得成功的登录,有人知道为什么不是这样吗?
发布于 2011-06-30 21:08:05
您应该查看javax.security.auth.login.Configuration class上的java文档,它包含了关于什么是充分的、必需的、必需的和可选的所有信息。与你的问题相关的是这一段:
仅当所有必需的LoginModules都成功时,
整体身份验证才会成功。如果配置了足够的LoginModule并成功,则只需在该足够的LoginModule之前的必需LoginModules成功,整体身份验证才会成功。如果没有为应用程序配置必需或必需的LoginModules,则必须至少成功配置一个足够或可选的LoginModule。
这是应该发生的事情,所以看起来您的设置是正确的,但是有些东西没有正确返回,所以一切都失败了。也许JBoss做的事情有点不同。
https://stackoverflow.com/questions/6488116
复制相似问题