Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用oracle DBMS_LDAP根据验证用户凭据

使用oracle DBMS_LDAP根据验证用户凭据
EN

Stack Overflow用户
提问于 2014-08-21 00:52:10
回答 2查看 3.8K关注 0票数 3

我们试图通过Microsoft验证使用dbms_ldap的应用程序用户,而且我们没有办法在我们的离岸环境中测试它。

我们有三个具体问题

1)如何验证用户是否存在于Microsoft活动目录中。

我们使用下面的代码获取应用程序用户的显著名称

代码语言:javascript
运行
AI代码解释
复制
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);

所以第一个问题是,

代码语言:javascript
运行
AI代码解释
复制
 userDN and ldapMessage

如果用户不存在于Microsoft中

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

代码语言:javascript
运行
AI代码解释
复制
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仍然没有解除绑定,那么识别重复会话的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-25 12:35:41

首先,读读文档。它几乎包含了回答问题所需的一切:ref.htm

1)将引发NULL或get_dn_exception,我不确定。无论如何,另一种检查方法是计数搜索结果,您只需要检查计数是否>0:

代码语言:javascript
运行
AI代码解释
复制
DBMS_LDAP.count_entries(ld => ldapSession, msg => ldapMessage)

2) retval只能是DMBS_LDAP.SUCCESS,任何错误都会引发异常

3)如果您有会话id,请调用任何需要有效LDAP会话的过程,例如simple_bind_s,并检查是否引发了invalid_session。如果您没有会话id,我不知道有什么方法可以确定是否有LDAP会话处于打开状态。

票数 3
EN

Stack Overflow用户

发布于 2016-03-18 02:04:58

在我的申请中,我这样做:

代码语言:javascript
运行
AI代码解释
复制
ld := DBMS_LDAP.INIT(LDAP_SERVER, 389);
retval := DBMS_LDAP.SIMPLE_BIND_S(ld, LDAP_USER, LDAP_PASSWORD);
DBMS_LDAP.USE_EXCEPTION := FALSE;

retval := DBMS_LDAP.SEARCH_S(
    ld => ld, 
    base => LDAP_BASE,
    SCOPE => DBMS_LDAP.SCOPE_SUBTREE,
    FILTER => '&(objectCategory=user)(sAMAccountName='||username ||')', 
    attrs => attrs,
    attronly => 0,
    res => ldapMessage);
retval := DBMS_LDAP.COUNT_ENTRIES(ld, ldapMessage);
ldapEntry := DBMS_LDAP.FIRST_ENTRY(ld, ldapMessage);

IF ldapEntry IS NULL THEN
    retval := DBMS_LDAP.MSGFREE(ldapMessage);
    retval := DBMS_LDAP.UNBIND_S(ld);
    RAISE_APPLICATION_ERROR(-20001, 'User does not exist');
ELSE
    userDN := DBMS_LDAP.GET_DN(ld, ldapEntry);
END IF;
retval := DBMS_LDAP.MSGFREE(ldapMessage);


IF p_password IS NULL THEN
    retval := DBMS_LDAP.UNBIND_S(ld);
    RAISE_APPLICATION_ERROR(-20000, 'Invalid Null password');
ELSE
    retval := DBMS_LDAP.SIMPLE_BIND_S(ldapSession, userDN, p_password);
    IF retval <> DBMS_LDAP_UTL.SUCCESS THEN
        retval := DBMS_LDAP.UNBIND_S(ld);
        RAISE_APPLICATION_ERROR(-20001, 'Wrong password');
    END IF;
END IF;
retval := DBMS_LDAP.UNBIND_S(ld);

关于你的问题:

1)如何验证用户是否存在于Microsoft活动目录中。

看我的代码

所以第一个问题是userDNldapMessage的价值是什么?

userDN是空的,ldapMessage我不在乎。

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

  • 有效密码:DBMS_LDAP.SUCCESS (0)
  • 错贴:DBMS_LDAP.INVALID_CREDENTIALS (49)

注意,只有在设置DBMS_LDAP.INVALID_CREDENTIALS时才会得到DBMS_LDAP.USE_EXCEPTION := FALSE;,否则如果密码错误,就会得到异常。

3)我的第三个问题是,假设用户已经登录了系统,而ldapsession仍然没有解除绑定,那么识别重复会话的方法是什么?

确保在代码中正确调用DBMS_LDAP.UNBIND_S(ld);

另一个警告:

当您在DBMS_LDAP.SIMPLE_BIND_S(ldapSession, userDN, p_password);提供错误的密码时,Active中的badPwdCount属性是,而不是。因此,您可以进行无限次尝试输入(或蛮力)密码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25422033

复制
相关文章
React:Redux怎么处理异步?
redux-thunk 中间件允许你 dispatch 一个函数(即:thunk),异步逻辑就放在这个函数中处理;
WEBJ2EE
2019/07/19
2.7K0
React:Redux怎么处理异步?
React---Redux异步action
(2).何时需要异步action:想要对状态进行操作,但是具体的数据靠异步任务返回。
半指温柔乐
2021/05/06
8600
Redux 异步数据流初探
用React写的项目中各组件的状态依赖关系非常复杂,为了便于管理组件的状态,使用 Redux。
一个会写诗的程序员
2018/12/13
6340
Redux 异步数据流初探
React-Redux 源码解析系列 -- React-Redux的作用
前面的章节讲完了redux的部分,又已经有了react,那为什么还需要有React-Redux呢?这个React-Redux 又帮助我们做了什么呢?
IMWeb前端团队
2019/12/03
7950
React-Redux 源码解析系列 -- React-Redux的作用
React-Redux 源码解析系列 -- React-Redux的作用
摘要总结:本文介绍了React-Redux的代码架构和设计理念,通过代码示例和示意图解释了React-Redux的代码结构和流程。同时,文章还探讨了React-Redux的优缺点,包括连接react和redux的方式、高阶组件的使用、纯组件的使用等。通过本文的讲解,可以更好地理解React-Redux的工作原理和架构设计,对于学习和使用React-Redux具有很高的参考价值。
IMWeb前端团队
2017/12/29
1K0
React-Redux 源码解析系列 -- React-Redux的作用
React:redux-form 应用示例
redux-form 提供了一堆 selector,便于我们从state中获取 form 表单的各种状态数据...
WEBJ2EE
2019/07/19
7180
React:redux-form 应用示例
Redux异步解决方案 1. Redux-Thunk中间件
简单介绍一下thunk,这是一个中间件,是解决redux异步问题产生的。我们都知道,在使用redux的时候,通过dispatch一个action 发生到reducer 然后传递给store修改状态 一系列都是同步的,那如果说我dispatch一个action 这个action帮我请求一下接口数据,你发现接口请求是异步的,没有办法等接口数据返回再传递给reducer 这个时候中间件就产生啦。 redux比较常用的中间件有 redux-saga、redux-thunk、redux-promise等 都是为了解决dispatch action异步处理问题
憧憬博客
2020/07/21
1.3K0
Redux 异步解决方案2. Redux-Saga中间件
因为Generator。结合yield  yield操作符会获取右边表达示的值返回 可以用于异步变同步操作 中间件的特性: 以前的 action -> reducers -> store 现在的 action -> middleware -> reducers -> store
憧憬博客
2020/07/21
1.1K0
Redux异步解决方案之Redux-Thunk原理及源码解析
前段时间,我们写了一篇Redux源码分析的文章,也分析了跟React连接的库React-Redux的源码实现。但是在Redux的生态中还有一个很重要的部分没有涉及到,那就是Redux的异步解决方案。本文会讲解Redux官方实现的异步解决方案----Redux-Thunk,我们还是会从基本的用法入手,再到原理解析,然后自己手写一个Redux-Thunk来替换它,也就是源码解析。
蒋鹏飞
2020/10/15
3.6K0
前端实现异步的几种方式_redux是什么
实际上,这个术语出自康奈尔大学的一篇论文:http://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf
全栈程序员站长
2022/10/02
1.8K0
前端实现异步的几种方式_redux是什么
异步发送邮件完整示例
本章使用task异步进程进行邮件发送,来阐述一下以上章节提到的各个知识点。 邮件类 下载swiftmailer composer require "swiftmailer/swiftmailer:^6.0" Mailer.php 与 vender目录 同级 require_once __DIR__ . '/vendor/autoload.php'; class Mailer { public $transport; public $mailer; /** * 发送邮件类
码农编程进阶笔记
2021/07/20
6710
异步发送邮件完整示例
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111876.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
6200
redux-thunk 中间件的示例
Redux处理异步任务——异步数据流中间件:redux-thunk & action是一个函数,函数内部处理异步任务
用户9914333
2022/07/22
5720
在 redux 应用中使用 GraphQL
在 Redux 应用中获取和管理数据需要做许多工作。正如 Sashko Stubailo 指出的:
疯狂的技术宅
2019/03/28
2K0
在 redux 应用中使用 GraphQL
【Redux】:Redux 指北
Redux 是JavaScript 应用的状态管理容器,提供集中式、可预测的状态管理。
WEBJ2EE
2021/06/15
1.6K0
深入学习 Redux 之中间件与异步操作
上一节,学习了 Redux 的基本用法:用户发出 Action,Reducer 函数算出新的 State,View 重新渲染。
Leophen
2021/07/23
1.1K0
Redux 入门教程(二):中间件与异步操作
上一篇文章,我介绍了 Redux 的基本做法:用户发出 Action,Reducer 函数算出新的 State,View 重新渲染。 但是,一个关键问题没有解决:异步操作怎么办?Action 发出以后
ruanyf
2018/04/12
1.6K0
Redux 入门教程(二):中间件与异步操作
点击加载更多

相似问题

在Firefox上不起作用

10

在firefox上不起作用

11

print()在Firefox上不起作用

14

tinymce在firefox上不起作用

20

空格在Firefox上不起作用

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档