我想知道如何将这两个身份验证步骤结合起来:
LDAP用户库不知道特定于应用程序的角色,我不想管理应用程序DB中的密码。所以我两者都需要。
JAAS配置文件允许有额外的LoginModules:
<name used by application to refer to this entry> {
<LoginModule> <flag> <LoginModule options>;
<optional additional LoginModules, flags and options>;
};但我找不到例子来解释我是怎么工作的。
这是好方法吗?
谢谢
=========================================
以下是我的回答:
实际上,我们可以拥有更多的LoginModules。JAAS配置文件是:
Sample {
com.sun.security.auth.module.LdapLoginModule Requisite
userProvider="ldap://acme.org:389/OU=Users,OU=_ACME,DC=acmegis,DC=acme,DC=org"
authIdentity="{USERNAME}"
userFilter="(userPrincipalName={USERNAME})"
storePass=true
sample.module.SampleLoginModule required debug=true;
};这里有两个LoginModules:
Sun的LdapLoginModule检查用户/密码,我的sample.module.SampleLoginModule查询我的数据库并填充主体。重要的参数是storePass=true,它要求LdapLoginModule将用户名和密码存储在模块的共享状态中。(见http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html)。
因此,下一个LoginModules可以在sharedState映射参数中将用户名传递给sharedState方法。他们在login()中没有什么可做的,DB中的填充主体的查询是在commit()中完成的(就像Shimi说的那样)。
我还没有使用它,但是有一个DatabaseServerLoginModule是由JBoss开发的(参见http://community.jboss.org/wiki/DatabaseServerLoginModule),它支持身份验证和角色映射。在使用密码堆栈=useFirstPass时,我们应该可以在不编写任何行代码的情况下解决我的需要(不过是一个漂亮的JAAS配置文件)。
B.R.
发布于 2016-05-16 08:47:27
太棒了!但是,实现LoginModule使您可以更多地定制与LDAP服务器交互的方式。
我也和你一样努力解决问题。但请记住,在实现LoginModule时,您应该在()函数中添加角色,而不是在commit()中添加角色,否则您的子get将无法获得主体。
https://stackoverflow.com/questions/8414322
复制相似问题