gpt4 book ai didi

oracle - 使用 oracle DBMS_LDAP 针对 Microsoft Active Directory 验证用户凭据

转载 作者:行者123 更新时间:2023-12-04 23:57:00 27 4
gpt4 key购买 nike

我们正在尝试使用针对 Microsoft AD 的 dbms_ldap 对我们的应用程序用户进行身份验证,但我们无法在我们的离岸环境中对其进行测试

我们有三个具体问题

1)如何验证用户是否存在于Microsoft Active Directory中

我们使用下面的代码来获取应用程序用户的专有名称

DBMS_LDAP.USE_EXCEPTION := FALSE;
retval := DBMS_LDAP.search_s(ld => ldapSession,
base => LDAP_BASE,
scope => DBMS_LDAP.SCOPE_SUBTREE,
filter => '(&(objectclass=USER)(SAMAccountName=' ||
p_username || '))',
attrs => attrList,
attronly => 0,
res => ldapMessage);
-- get the DN
if retval <> DBMS_LDAP_UTL.SUCCESS THEN
RAISE l_ldap_exception;
END IF;
userDN := DBMS_LDAP.get_dn(ldapSession, ldapMessage);

所以第一个问题是

 userDN and ldapMessage

如果用户在 Microsoft AD 中不存在

2)假设用户存在并且输入了错误的密码,那么retval的返回值是什么

if p_password is null then
raise_application_error(-20000, 'Invalid Null password');
else
retval := DBMS_LDAP.simple_bind_s(ldapSession,userDN, p_password);
end if;

if retval <> DBMS_LDAP_UTL.SUCCESS THEN
RAISE l_ldap_exception;
and if;

3)我的第三个问题是假设用户已经登录系统并且 ldapsession 仍然没有解除绑定(bind),那么识别重复 session 的方法是什么

最佳答案

警告警告警告

对于使用以下代码验证用户的任何人来说,这与其说是一个答案,不如说是一个警告。

  retval := DBMS_LDAP.simple_bind_s(ldapSession, userDN, p_password);

按照设计(LDAP 设计),如果密码为 null,此函数调用将始终返回 success。这样做是为了允许匿名 LDAP 查询。这可能在您的特定服务器上被禁用,但并非总是如此。

因此,如果您想使用此功能,请确保使用 if block 包装它,以确保用户提供的密码不为空。例如

  if p_password is null then
raise_application_error(-20000, 'Invalid Null password');
else
retval := DBMS_LDAP.simple_bind_s(ldapSession,userDN, p_password);
end if;

更多详情见:http://www.inside-oracle-apex.com/dbms_ldapsimple_bind_s-apex_ldapauthenticate-and-null-password/

关于oracle - 使用 oracle DBMS_LDAP 针对 Microsoft Active Directory 验证用户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422033/

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