【问题标题】:RabbitMQ LDAP authentication failingRabbitMQ LDAP 身份验证失败
【发布时间】:2015-04-19 12:00:38
【问题描述】:

我正在经历使用 LDAP 授权设置 RabbitMQ 的过程,但运气不太好......知道的人可以看看并告诉我我做错了什么吗?我可以使用以下代码查询 LDAP 以获取用户对象:

var entry = new DirectoryEntry("LDAP://ourldapbox.ourcompany.co.uk:636/CN=Mark Twain,OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk");

配置尝试 1

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_ldap,
   [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
     {user_dn_pattern,       "CN=${username},OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk"},
     {use_ssl,               false},
     {port,                  636},
     {log,                   true}
   ]
  }
].

配置尝试 2

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_ldap,
   [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
     {dn_lookup_attribute,   "sAMAccountName"},
     {dn_lookup_base,        "DC=ourcompany,DC=co,DC=uk"},
     {user_dn_pattern,       "${username}@ourcompany.co.uk"},
     {other_bind,            anon},
     {use_ssl,               false},
     {port,                  636},
     {log,                   true}
   ]
  }
].

配置尝试 3

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_ldap,
   [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
     {dn_lookup_attribute,   "userPrincipalName"},
     {dn_lookup_base,        "dc=ourcompany,dc=co,dc=uk"},
     {user_dn_pattern,       "${username}@ourcompany.co.uk"},
     {use_ssl,               false},
     {port,                  636},
     {log,                   true}
   ]
  }
].

连接代码

我正在尝试以多种方式连接(全部失败):

var connectionFactory = new ConnectionFactory
{
    HostName = "localhost",
    UserName = "twainm",
    Password = "fred123",
};

using (connectionFactory.CreateConnection())
{
    // fails with:
    // None of the specified endpoints were reachable
    // ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
}

内部数据库后备配置正在运行,因此guest 能够毫无问题地连接。

日志

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
accepting AMQP connection <0.1122.0> ([::1]:20117 -> [::1]:5672)

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
LDAP CHECK: login for Mark Twain

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
        LDAP filling template "CN=${username},OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk" with
            [{username,<<"Mark Twain">>}]

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
        LDAP template result: "CN=Mark Twain,OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk"

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
LDAP CHECK: login for Mark Twain

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
        LDAP filling template "CN=${username},OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk" with
            [{username,<<"Mark Twain">>}]

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
        LDAP template result: "CN=Mark Twain,OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk"

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
    LDAP bind error: CN=Mark Twain,OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk {gen_tcp_error,
                                                                                                    closed}

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
LDAP DECISION: login for Mark Twain: {error,{gen_tcp_error,closed}}

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
    LDAP bind error: CN=Mark Twain,OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk {gen_tcp_error,
                                                                                                    closed}

=INFO REPORT==== 18-Feb-2015::10:38:13 ===
LDAP DECISION: login for Mark Twain: {error,{gen_tcp_error,closed}}

=ERROR REPORT==== 18-Feb-2015::10:38:16 ===
closing AMQP connection <0.1122.0> ([::1]:20117 -> [::1]:5672):
{handshake_error,starting,0,
                 {amqp_error,access_refused,
                             "PLAIN login refused: user 'Mark Twain' - invalid credentials",
                             'connection.start_ok'}}

“LDAP 绑定错误”、“handshake_error,starting,0”和“access_refused”的 Google 搜索结果不错,但找不到任何可以为我指明正确方向的内容。

任何帮助将不胜感激。

【问题讨论】:

    标签: ldap rabbitmq ldap-query easynetq


    【解决方案1】:

    解决了!我意识到 use_ssl=falseport=636 的组合有点愚蠢,因为 636 是加密的(即 SSL LDAP)端口。

    这是我的 LDAP 配置(现在可以使用)。我希望这可以为一些人节省几个小时:

    [
      {rabbit,
       [ {auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
      {rabbitmq_auth_backend_ldap,
       [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
         {dn_lookup_attribute,   "sAMAccountName"},
         {dn_lookup_base,        "DC=ourcompany,DC=co,DC=uk"},
         {user_dn_pattern,       "${username}@ourcompany.co.uk"},
         {use_ssl,               true},
         {port,                  636},
         {log,                   true}
       ]
      }
    ].
    

    【讨论】:

    • 我不确定user_dn_patterndn_lookup_base 结合是首选模式...文档相当复杂,但他们似乎指定使用其中一个?关于你为什么这样做的任何提示?
    • 老实说,我不记得我为什么这样做了……我确实尝试过将两者分开,但似乎只有在两者都到位时才有效。由于我找不到为直接连接(不是通过管理控制台)提供 SSO AD 身份验证的方法,我最终还是删除了 LDAP 身份验证。
    • 谢谢。是的,它在 AD 友好方面并不重。
    • 在我的情况下,dn_lookup_base 和 user_dn_pattern 都需要获得我想要的身份验证......在我的情况下,我使用 dn_lookup_attribute "userPrincipalName" 而不是 "sAMAccountName" 加上 user_dn_pattern "${username }@mycompany.com”。两者都有助于将登录从完整的电子邮件地址格式简化为电子邮件地址的用户名部分。
    【解决方案2】:

    我遇到了类似的问题,只是我使用的是 rabbitmq.conf 而不是 advanced.config 格式。如果有人遇到此问题并使用其他配置格式,这是一个替代解决方案:

    auth_backends.1 = ldap    
    auth_ldap.servers.1  = ourldapbox.ourcompany.co.uk
    auth_ldap.dn_lookup_attribute = sAMAccountName
    auth_ldap.dn_lookup_base = DC=ourcompany,DC=co,DC=uk
    auth_ldap.user_dn_pattern = ${username}@ourcompany.co.uk
    auth_ldap.use_ssl    = true
    auth_ldap.port       = 636
    auth_ldap.log        = true
    auth_backends.2   = rabbit_auth_backend_internal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-20
      • 2020-04-14
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多