java JAAS附加登录模块
我想知道如何结合这两个身份验证步骤:
- 在LDAP中检查用户/密码
- 将数据库中的主体(角色)添加到主题李>
LDAP用户存储库不知道特定于应用程序的角色,我不想管理应用程序数据库中的密码。所以我两者都需要
JAAS配置文件允许有其他LoginModule:
<name used by application to refer to this entry> {
<LoginModule> <flag> <LoginModule options>;
<optional additional LoginModules, flags and options>;
};
但我找不到解释我工作原理的例子
这是好方法吗
谢谢
=========================================
以下是我的答案:
事实上,我们可以有额外的登录模块。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;
};
这里我们有两个LoginModule:
Sun的LdapLoginModule,用于检查用户/密码, 还有我的样品。单元查询my db并填充主体的SampleLoginModule。 重要的参数是storePass=true,它要求LdapLoginModule将用户名和密码存储在模块的共享状态中。(见http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html)
因此,下一个LoginModule可以在sharedState映射参数中获得传递给initialize方法的用户名。他们应该在login()中无事可做,而在DB中填充Principales的查询是在commit()中完成的(如Shimi Bandiel所说)
我还没有使用它,但是JBoss开发了一个DatabaseServerLoginModule(参见http://community.jboss.org/wiki/DatabaseServerLoginModule),它支持身份验证和角色映射。与password stacking=useFirstPass一起使用,我们应该可以在不编写任何行代码的情况下找到我需要的答案(但是一个漂亮的JAAS配置文件)
B.R
# 1 楼答案
应该实现一个
LoginModule
,在login
方法中访问LDAP并检查用户名/密码,在commit
方法中访问DB并填充主体这里不需要使用多个
LoginModule
# 2 楼答案
太棒了! 但是,实现LoginModule可以为您定制与LDAP服务器交互的方式提供更多功能
我也和你一样努力解决同样的问题。 但是请记住,在实现LoginModule时,您应该在login()函数中添加角色,而不是在commit()中添加角色,否则您的Subset将无法获得主体