RabbitMQ + Windows + LDAP sans mot de passe

J’essaie de faire en sorte que l’authentification / autorisation LDAP fonctionne avec RabbitMQ 3.6.2 sous Windows 7. L’authentification de base fonctionne: l’application envoie un nom d’utilisateur / mot de passe, mais le mot de passe se trouve dans le code dont j’ai besoin pour comprendre éviter. Quelqu’un at-il réussi à configurer RabbitMQ pour s’authentifier via LDAP sans fournir de mot de passe? Je me suis référé à la documentation du plug-in LDAP , mais en vain.

Mon fichier rabbitmq.config est configuré ainsi:

[ {rabbit, {auth_backends, [{rabbit_auth_backend_ldap, rabbit_auth_backend_internal}, rabbit_auth_backend_internal]} }, {rabbitmq_auth_backend_ldap, [{servers, ["theserver.thedomain.com"]}, %% this works, but a password is still required {user_dn_pattern, "CN=${username},OU=theADgroup,OU=anothergroup,DC=thedomain,DC=dom"}, %% looks like this is required {other_bind, anon}, {use_ssl, false}, {port, 389}, {log, true} ]} ]. 

Merci,

Andy

Voici ce que j’ai fini avec au cas où cela aiderait quelqu’un. Je devais append 3 parameters à la configuration:

  • dn_lookup_atsortingbute défini sur “userPrincipalName”
  • dn_lookup_base est défini sur “DC = Name1, DC = Name2” (modifiez-le pour l’adapter à votre configuration AD)
  • user_dn_pattern défini sur “${[email protected]” (cela a été fait pour des raisons de commodité – sans cela, les utilisateurs devaient se connecter avec leur adresse e-mail complète, mais avec cette adresse, ils n’ont qu’à utiliser leur nom d’utilisateur)

Vous n’aurez probablement pas besoin de tous les parameters de la configuration ci-dessous, mais il s’agit néanmoins de ma configuration, y compris l’authentification sur SSL et l’octroi d’un access “Administrateur” à certains groupes AD spécifiques à l’interface utilisateur de gestion RabbitMQ. J’ai ajouté beaucoup de commentaires pour aider, espérons-le, à comprendre.

 [ {rabbit, {auth_backends, [{rabbit_auth_backend_ldap, rabbit_auth_backend_internal}]} }, %% LDAP Authentication. See https://www.rabbitmq.com/ldap.html {rabbitmq_auth_backend_ldap, [{servers, ["theserver.thedomain.com"]}, {dn_lookup_atsortingbute, "userPrincipalName"}, {dn_lookup_base, "DC=Name1,DC=Name2"}, %% this makes it so that login usernames are just  instead of @thedomain.com {user_dn_pattern, "${username}@thedomain.com"}, %% Authenticate over SSL {use_ssl, true}, {port, 636}, %% Change this to true to troubleshoot LDAP failures (see file rabbit@.log and scroll to bottom for the most recent activity) {log, false}, %% ------------------------------------------------------------------------------------ %% LDAP-based authorization for employee logins to the management UI. %% The following settings maps the permissions that LDAP-authenticated users will have. %% For more info, see: https://www.rabbitmq.com/access-control.html %% ------------------------------------------------------------------------------------ %% Grant access to all virtual hosts (this is the default, but is present here for the sake of transparency) {vhost_access_query, {constant, true}}, %% Grant access to "resources" (exchanges, queues, bindings, etc.) (this is the default) {resource_access_query, {constant, true}}, %% Grant RabbitMQ administrator access based on LDAP group membership. {tag_queries, [{administrator, {'or', [{in_group, "CN=Group 1 Name,OU=Group 1 OU,OU=Groups,DC=thecompany,DC=com"}, {in_group, "CN=Group 2 Name,OU=Group 2 OU,OU=Groups,DC=thecompany,DC=com"}, {in_group_nested, "CN=Group 3 Name,OU=Group 3 OU,OU=Groups,DC=thecompany,DC=com"}]} }]} ]} ]. 

Edit: Voici un extrait d’un programme qui montre que RabbitMQ ConnectionFactory se connecte sans utiliser de nom d’utilisateur / mot de passe car il repose sur une authentification basée sur un certificate. Vous avez uniquement besoin du chemin d’access au certificate SSL (généré gratuitement à l’aide d’OpenSSL) ainsi que de la phrase secrète du certificate.

 using LipsumGenerator.Message; using Messaging.Work; using RabbitMQ.Client; using System; using System.Configuration; using System.Security.Authentication; namespace Publisher { class Program { static void Main(ssortingng[] args) { var factory = new ConnectionFactory(); factory.HostName = ConfigurationManager.AppSettings["rabbitmqHostName"]; factory.AuthMechanisms = new AuthMechanismFactory[] { new ExternalMechanismFactory() }; factory.Ssl.ServerName = ConfigurationManager.AppSettings["rabbitmqServerName"]; factory.Ssl.CertPath = ConfigurationManager.AppSettings["certificateeFilePath"]; factory.Ssl.CertPassphrase = ConfigurationManager.AppSettings["certificateePassphrase"]; factory.Ssl.Enabled = true; factory.Ssl.Version = SslProtocols.Tls12; factory.Port = AmqpTcpEndpoint.DefaultAmqpSslPort; factory.VirtualHost = "/"; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { Console.WriteLine(" [*] Publishing messages. To exit press CTRL+C"); int count = 0; var rand = new Random(); while (true) { count++; WorkProcessor.EnqueueMessage(channel, "Lipsum", new LipsumGeneratorMessage(rand.Next(5))); Console.WriteLine("Sent message Lipsum " + count); System.Threading.Thread.Sleep(rand.Next(2000)); } } } } } }