【问题标题】:net-ldap create user with passwordnet-ldap 用密码创建用户
【发布时间】:2014-07-11 23:39:52
【问题描述】:

我正在尝试创建一个已使用 net-ldap gem 设置密码的 AD 帐户。我能够很好地连接到服务器。而且我还可以在不传递:unicodepwd 属性的情况下添加新用户,但是在创建新用户时没有设置密码。当我传递该属性时,不会创建用户并且它失败并显示error code 53 和以下消息Unwilling to perform。如果我在创建用户密码后尝试替换用户密码,也会遇到同样的错误。我遇到了许多可能的答案,但没有一个对我有用。

def initialize

        @client = Net::LDAP.new
        @client.host = server_ip
        @client.base = base
        @client.port = 389
        @client.auth(username, password)

        if @client.bind
            puts "Connected"

            add("TEST", "JEST", "testjest")
        else
            puts "Not Connected"
            display_error   
        end
    end

def add(first_name, last_name, username)
        dn = dn_value

        attrs = {
            :objectclass => ["top", "person", "organizationalPerson", "user"],
            :cn => fullname(first_name, last_name),
            :sn => last_name.capitalize,
            :givenname => first_name.capitalize,
            :displayname => fullname(first_name, last_name),
            :name => fullname(first_name, last_name),
            :samaccountname => username,
            :unicodePwd => '"password"'.encode("utf-16")
        }
        @client.add(:dn => dn, :attributes => attrs)



        if @client.get_operation_result.code != 0
            puts "Failed to add user #{fullname(first_name, last_name)}"
            display_error
        else
            puts "Added user #{fullname(first_name, last_name)}"
        end
    end

当我创建用户并且不必通过 gui 访问它来更新密码时,如何为用户设置密码?任何帮助表示赞赏

谢谢

更新

一旦我以不同的方式对字符串进行编码并连接到 SSL 端口 636 而不是默认端口 389,我就能够让它工作。使用 encode 是问题所在,似乎它错误地编码了密码。

这是我的新连接

@client = Net::LDAP.new
@client.host = server_ip
@client.base = base
@client.port = 636
@client.encryption(:method => :simple_tls)
@client.auth(username, password)

以及我用来编码密码的方法

def encode_passwd(string)
            newstring = ""
            string = "\"" + string + "\""
            string.split("").each do |c|
                newstring = "#{newstring}#{c}\000"
            end
            return newstring
        end

希望这对将来的某人有所帮助

【问题讨论】:

  • 通过LDAP修改密码,必须连接到SSL端口636而不是默认端口389。

标签: ruby active-directory netldap


【解决方案1】:

Net::LDAP::Password.generate 不适用于 ActiveDirectory。 :unicodePwd LDAP-Entry-Attribute(说 ruby​​-gem net-ldap 用语),你 必须像这样编码

unicodepwd = "\"#{plain_text_password}\"".encode(Encoding::UTF_16LE).force_encoding(Encoding::ASCII_8BIT)

在此处查看有关编码的详细信息:https://msdn.microsoft.com/en-us/library/cc223248.aspx

【讨论】:

    【解决方案2】:

    我刚刚发现 Net::LDAP 中已经包含了密码生成功能!

    Net::LDAP::Password.generate(:md5, 'yourPlaintextPass')
    

    Documentation here

    【讨论】:

    • 在 Ruby 2.1 中:Net::LDAP::Password.generate(:md5, 'yourPlaintextPass')
    • 感谢您指出这一点!符号而不是字符串,我编辑了我的答案
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2021-10-22
    • 1970-01-01
    • 2019-09-12
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多