java - JAAS 附加登录模块

标签 java authentication ldap jaas

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

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

LDAP 用户存储库不知道应用程序特定的角色,我不想管理应用程序数据库中的密码。所以我两者都需要。

JAAS 配置文件允许有额外的登录模块:

<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;
};

这里我们有两个登录模块:

检查用户/密码的 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 Map参数中获取传递给initialize方法的用户名。他们在 login() 中应该没有任何关系,并且在 DB 中填充 Principles 的查询在 commit() 中完成(如 Shimi Bandiel 所说)。

我还没有使用它,但是有一个由 JBoss 开发的 DatabaseServerLoginModule(参见 http://community.jboss.org/wiki/DatabaseServerLoginModule)支持身份验证和角色映射。与 password-stacking=useFirstPass 一起使用,我们应该无需编写任何行代码(而是一个漂亮的 JAAS 配置文件)就可以得到我需要的答案。

B.R.

最佳答案

您应该实现一个 LoginModule,在 login 方法中您访问 LDAP 并检查用户名/密码,在您访问的 commit 方法中数据库并填写委托(delegate)人。
这里不需要使用多个LoginModule

关于java - JAAS 附加登录模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8414322/

相关文章:

laravel - 将 Laravel 多授权用户视为一个独特的用户类

php - 处理权限 PHP 和 MYSQL

java - 使用 LDAP/Java 启用 Active Directory 用户

Golang 与 LDAP 通信

java - Spring 。 "schemaLocation ... must have even number of URI' 秒”

Java 初始化一个整数并将其添加到一行中的列表

api - 在 .net core web api 中存储 JWT token 的位置?

JavaFx 将文件拖放到程序中

java - Eclipse错误: Could not find or load main class opencv

Python从内网获取客户端windows用户