gpt4 book ai didi

java - JAAS 附加登录模块

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:36 24 4
gpt4 key购买 nike

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

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com