有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAAS附加登录模块

我想知道如何结合这两个身份验证步骤:

  1. 在LDAP中检查用户/密码
  2. 将数据库中的主体(角色)添加到主题

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


共 (2) 个答案

  1. # 1 楼答案

    应该实现一个LoginModule,在login方法中访问LDAP并检查用户名/密码,在commit方法中访问DB并填充主体
    这里不需要使用多个LoginModule

  2. # 2 楼答案

    太棒了! 但是,实现LoginModule可以为您定制与LDAP服务器交互的方式提供更多功能
    我也和你一样努力解决同样的问题。 但是请记住,在实现LoginModule时,您应该在login()函数中添加角色,而不是在commit()中添加角色,否则您的Subset将无法获得主体