gpt4 book ai didi

security - 如何停用 LDAP 用户?

转载 作者:行者123 更新时间:2023-12-02 08:01:39 25 4
gpt4 key购买 nike

我正在使用一个库来验证LDAP用户,其代码如下:

public void authUser(String username, String pwd)
throws Exception
{
try
{
Properties env = getEnvironmentForContext();

env.put("java.naming.security.principal", "uid=" +
username + ",ou=users, dc=company"));
env.put("java.naming.security.credentials", pwd);
context = getContext(env);
System.out.println("Authentication Succeeded");
}
catch (Exception e)
{
System.out.println("Authentication Failed");
throw e;
}
}

请注意,我无法修改上述验证码。它来自外部库。

但是,我想停用一些用户(而不是删除它们),以便身份验证失败。我正在使用 LDAP(不是 Active Directory)。虽然不知道它是什么 LDAP 软件,但我可以使用“LDAP 浏览器客户端”连接到它。

用户存在于:dc=company, ou=users, uid=username

我可以在 LDAP“用户”上添加/更改什么属性来停用用户。
我可以将用户移动到不同的组,例如:dc=company、ou=deactivatedusers、uid=username?但这不是首选选项,而且我不确定最好的方法。

编辑:正在使用的 LDAP 是:Netscape/Sun/iPlanet

最佳答案

根据 Oracle iPlanet (Sun) 文档回答您的问题:

Setting the attribute nsAccountLock to true will disable a users account, and prevent them from binding to the directory.

但是,就您已有的代码而言,我只是看不到任何实现此目的的方法...是否有什么因素阻止您使用 System.DirectoryServices.Protocols 为 iPlanet 编写自己的实现.Net 中的命名空间?

以下是我如何针对 iPlanet 服务器绑定(bind)和授权用户:

//Build servername from variables
var BuildServerName = new StringBuilder();
BuildServerName.Append(ServerName);
BuildServerName.Append(":" + Convert.ToString(Port));

var ldapConnection = new LdapConnection(BuildServerName.ToString());
//Authenticate the Admin username and password, making sure it's a valid login

try
{
//Pass in the network (administrative) creds, and the domain.
var networkCredential = new NetworkCredential(Username, Password, config.LdapAuth.LdapDomain);
ldapConnection.SessionOptions.SecureSocketLayer = true;
ldapConnection.SessionOptions.VerifyServerCertificate += delegate { return true; };
ldapConnection.AuthType = AuthType.Anonymous;;
ldapConnection.Bind(networkCredential);

//Lets find this person so we can use the correct DN syntax when we authorize them.
SearchRequest FindThem = new SearchRequest();
FindThem.Filter = config.LdapAuth.LdapFilter.Replace("{{Patron}}", Patron);
FindThem.DistinguishedName = config.LdapAuth.LdapDomain;
FindThem.Scope = System.DirectoryServices.Protocols.SearchScope.Subtree;

//We'll execute a search using the bound user
SearchResponse searchresults = (SearchResponse) ldapConnection.SendRequest(FindThem);

//Should only get on result back, if not throw an error
if(searchresults.Entries.Count == 1)
{
SearchResultEntryCollection entries = searchresults.Entries;
SearchResultEntry thispatron = entries[0];
PatronDN = thispatron.DistinguishedName;
}
}

如果您想将禁用的用户移至特定组,从此时起,您可以编写逻辑来检查该用户的 DistinguishedName,并在其 DistinguishedName 时抛出已处理的异常code> 包含该组的名称。此外,如果 nsAccountLock 属性可作为您的绑定(bind)帐户的可读属性,您只需检查该属性的值是否为 true,并相应地处理用户。

关于security - 如何停用 LDAP 用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766409/

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