Ruby教程
Ruby控制语句
Ruby高级

Ruby LDAP

Ruby LDAP

Net::LDAP for Ruby 也写成 net::ldap。它代表轻量级目录访问协议。它是一种用于访问目录服务器的 Internet 标准协议。它的基本搜索单元是实体,它对应于一个人或其他特定领域的对象。支持 LDAP 协议的目录,通常存储有关多个实体的信息。

Ruby LDAP Principals

LDAP 服务器通常用于访问有关人员的信息,但有时也用于计算机、打印机和其他资源等项目.

Ruby LDAP 专有名称

在 LDAP 服务器中,实体由称为专有名称的全局唯一文本字符串唯一标识。它就像一个 DNS 主机名,DN 是一串树节点的"扁平化"文本表示。
如果您知道一个实体的 DN,您可以查询启用 LDAP 的目录以获取有关该实体的信息。个人或其他实体。否则,您还可以看到与您提供的一组条件匹配的 DN 列表。

Ruby LDAP 属性

在 LDAP 中,有关实体的信息存储为一组属性。属性是与零个或多个值相关联的文本字符串。大多数支持 LDAP 的目录都包含一个很好标准化的属性范围,并根据标准值限制它们的值。
属性的一个例子是 sn。它代表"姓氏"。该属性一般用于存储一个人的姓氏。大多数目录都遵循标准约定,即实体 sn 属性将只有一个值。

Ruby LDAP Tree-Base

就像 DNS 一样,LDAP 假设每个目录服务器都包含一组对应于特定子树的 DN 的权威属性数据全局目录树。该子树在创建时配置到目录服务器中。您不能在大多数服务器中进行查询,因为它们不允许,除非您指定正确的树基。

Ruby LDAP 版本

Ruby LDAP 版本是存根,讨论 v2 和 v3、

Ruby LDAP 操作

Ruby LDAP 操作是:
#bind : #bind 操作向服务器提供用户的身份验证凭据。他们可以提供不同的身份验证凭据,但大多数目录只要求用户名和密码。 #add : #add 操作指定一个新的 DN 和一组初始属性值。操作成功后,会在目录中添加具有相应 DN 和属性的新实体。 #delete : #delete 操作指定实体 DN。操作成功后,实体及其所有属性将从目录中删除。 #rename : #rename 操作也称为 #modify_rdn。在早期的 LDAP 版本中,更改实体 DN 的唯一方法是删除整个实体并使用不同的 DN 再次添加它。但是随着版本 3 中 #rename 操作的引入,您可以更改 DN 而不会丢弃其属性值。 #search : #search 操作被调用以通过指定树库、搜索过滤器和属性值列表来识别目录。可以使用 NOT、AND 和 OR 运算符将多个过滤器连接在一起。 #modify : #modify 操作指定实体 DN 和属性操作列表。它用于更改存储在特定实体目录中的属性值。它可以通过添加或删除属性值来添加或删除属性或更改属性。修改属性值的方法有以下三种: #add_attribute、#delete_attribute 和 #replace_attreibute。

安装 Net::LDAP

net::LDAP 是一个纯 Ruby 库。它不需要任何外部库。 RubyGems 版本的 Net::LDAP 可以从通常的来源安装。
要求
Net::LDAP 需要 Ruby 2.0.0 或更好的解释器。
要安装 RubyGems 版本的 Net::LDAP,请编写以下命令:
gem install net-ldap

使用 Ruby net::LDAP

Net::LDAP 功能从需要库开始。
require 'net/ldap'
如果你已经安装了 Gem 版本,那么你需要以下库。
require 'rubygems' require 'net/ldap'

LDAP 连接的凭据

Net::LDAP 连接是一个两步过程。
第 1 步: 实例化 Net:LDAP 对象
大多数 Net:LDAP 操作都是从实例化 Net:LDAP 对象开始的。构造函数采用指定 LDAP 服务器地址和端口的参数。
语法:
LDAP::Conn. new(host= 'localhost', port=LDAP_PORT)
第 1 步: 身份验证(绑定)
这里我们需要指定用户名和密码,我们将在接下来的会话中使用这些用户名和密码。
语法:
conn. bind(dn=nil, password=nil, method=LDAP::LDAP_AUTH_SIMPLE)do .... end
现在我们可以在具有适当权限的绑定方法块内执行不同的操作,例如搜索、修改或删除。

添加新的 LDAP 条目

以下方法向远程 LDAP 服务器添加新条目。
add(args) => object
第一步: 创建 LDAP::Mod 对象
LDAP::Mod 对象需要传递给 conn.add 方法来创建一个条目。
语法:
Mod. new(mod_type, attr, vals)
mod_type : 您可以在此处添加一个或多个选项,例如 LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACE。
attr : 这是属性。
vals : 它是一个值数组。
第2步: 调用conn.add方法
创建LDAP::Mod对象后,我们需要调用conn.add方法。
语法:
conn. add(dn, attrs)
示例:
#/usr/bin/ruby-w require 'rubygems' require 'net/ldap' $HOST = 'localhost' $PORT = LDAP::LDAP_PORT $SSLPORT = LDAP::LDAPS_PORT conn = LDAP::Conn. new($HOST, $PORT) conn. bind( 'cn=root, dc=localhost, dc=localdomain', 'secret') conn. perror( "bind") entry1 = [ LDAP. mod(LDAP::LDAP_MOD_REPLACE, 'sn', [ 'Steele']), ] begin conn. modify( "cn=Anna williams, dc=localhost, dc=localdomain", entry1) rescue LDAP::ResultError conn. perror( "modify") exit end conn. perror("modify") conn.unbind
上例会修改上例中的姓氏。

删除 LDAP 条目

delete 方法将删除一个条目。
语法:
conn. delete(dn)
#/usr/bin/ruby-w require 'rubygems' require 'net/ldap' $HOST = 'localhost' $PORT = LDAP::LDAP_PORT $SSLPORT = LDAP::LDAPS_PORT conn = LDAP::Conn. new($HOST, $PORT) conn. bind( 'cn=root, dc=localhost, dc=localdomain', 'secret') conn. perror( "bind") begin conn. delete( "cn=Anna Steele, dc=localhost, dc=localdomain") rescue LDAP::ResultError conn. perror( "delete") exit end conn. perror("delete") conn.unbind

在 LDAP 中搜索

使用搜索方法可以执行三种不同的搜索模式。
LDAP_SCORE_BASEM : 它将只搜索基本模式。 LDAP_SCOPE_ONLEVEL : 它将搜索基本模式的所有子项。 LDAP_SCOPE_SUBTREE : 它将搜索包括基节点在内的整个子树。
示例:
#/usr/bin/ruby-w require 'rubygems' require 'net/ldap' $HOST = 'localhost' $PORT = LDAP::LDAP_PORT $SSLPORT = LDAP::LDAPS_PORT base = 'dc=localhost,dc=localdomain' scope = LDAP::LDAP_SCOPE_SUBTREE filter = '(objectclass=java)' attrs = [ 'sn', 'cn'] conn = LDAP::Conn. new($HOST, $PORT) conn. bind( 'cn=root, dc=localhost, dc=localdomain', 'secret') conn. perror( "bind") begin conn. search(base, scope, filter, attrs) { |entry| # print distinguished name p entry.dn # print all attribute names p entry.attrs # print values of attribute 'sn' p entry. vals('sn') # print entry as Hash p entry.to_hash } rescue LDAP::ResultError conn. perror( "search") exit end conn. perror("search") conn.unbind
在这个例子中,我们将搜索条目的整个子树。
在搜索的最后一个参数中,您可以指定任何属性。如果传入 nil,则返回所有属性与关系数据库中的"SELECT*"相同。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4