Ruby LDAP开发实战和原理全解

本文概述

  • Ruby LDAP主体
  • Ruby LDAP专有名称
  • Ruby LDAP属性
  • Ruby LDAP树基
  • Ruby LDAP版本
  • Ruby LDAP操作
  • 安装Net :: LDAP
  • 使用Ruby net :: LDAP
  • LDAP连接的凭证
  • 添加一个新的LDAP条目
  • 删除LDAP条目
  • 在LDAP中搜索
Net :: LDAP for Ruby也写为net :: ldap。它代表轻型目录访问协议。它是用于访问目录服务器的Internet标准协议。它的基本搜索单元是实体, 它对应于人或其他特定领域的对象。支持LDAP协议的目录通常存储有关许多实体的信息。
Ruby LDAP主体LDAP服务器通常用于访问有关人员的信息, 但有时也用于诸如计算机, 打印机和其他资源之类的项目。
Ruby LDAP专有名称在LDAP服务器中, 实体由称为专有名称的全局唯一文本字符串唯一标识。就像DNS主机名一样, DN是树节点字符串的” 展平” 文本表示形式。
【Ruby LDAP开发实战和原理全解】如果你知道一个人或其他实体的DN, 则可以查询启用LDAP的目录以获取有关该实体的信息。否则, 你还可以看到与你提供的一组条件匹配的DN列表。
Ruby LDAP属性在LDAP中, 有关实体的信息存储为一组属性。属性是与零个或多个值关联的文本字符串。大多数启用LDAP的目录都包含标准化的属性范围, 并根据标准值限制其值。
属性的示例是sn。它代表” 姓” 。此属性通常用于存储人的姓氏。大多数目录遵循标准约定, 即实体sn属性将仅具有一个值。
Ruby LDAP树基就像DNS一样, LDAP假定每个目录服务器都包含一组DN的权威属性数据, 这些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 :: LDAPnet :: LDAP是一个纯Ruby库。它不需要任何外部库。 Net :: LDAP的RubyGems版本可以从通常的来源安装。
要求
Net :: LDAP需要Ruby 2.0.0解释器或更高版本。
要安装Net :: LDAP的RubyGems版本, 请输入以下命令:
gem install net-ldap

使用Ruby net :: LDAPNet :: 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

现在, 我们可以在具有适当权限的情况下执行不同的操作, 例如在bind方法的内部进行搜索, 修改或删除。
添加一个新的LDAP条目以下方法将新条目添加到远程LDAP服务器。
add(args) => object

步骤1:创建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中搜索使用搜索方法执行搜索的方式有3种。
  • 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 *” 相同。

    推荐阅读