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,请编写以下命令:
使用 Ruby net::LDAP
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 服务器添加新条目。
第一步: 创建 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方法。
语法:
示例:
#/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 方法将删除一个条目。
语法:
#/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*"相同。