J'ai essayé de configurer SonarQube (v4.1) avec le plug-in d'authentification LDAP (v1.4) et je ne parviens pas à le faire authentifier auprès de mon utilisateur de domaine. Ma configuration est configurée comme suit:
#########################
# LDAP configuration
#########################
# General Configuration
sonar.security.realm=LDAP
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
sonar.authenticator.downcase=true
sonar.authenticator.createUsers=true
ldap.authentication=simple
ldap.realm=mydomain.co.uk
ldap.bindDn=CN=USERNAME,OU=developers,DC=mydomain,DC=co,DC=uk
ldap.bindPassword=PASSWORD
# User Configuration
#ldap.user.baseDn=OU=developers,DC=mydomain,DC=co,DC=uk
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
# Group Configuration
ldap.group.baseDn=CN=Domain Users,CN=Users,DC=adastra,DC=co,DC=uk
ldap.group.request=(&(objectClass=group)(member={dn}))
et le journal génère les messages suivants qui semblent indiquer que la connexion LDAP fonctionne correctement:
2014.01.20 16:12:32 INFO [org.sonar.INFO] Security realm: LDAP
2014.01.20 16:12:32 INFO [o.s.p.l.LdapSettingsManager] Auto discovery mode
2014.01.20 16:12:32 INFO [o.s.p.l.LdapSettingsManager] Detected server: ldap://dc02.mydomain.co.uk:389
2014.01.20 16:12:32 INFO [o.s.p.l.LdapSettingsManager] User mapping: LdapUserMapping{baseDn=dc=mydomain,dc=co,dc=uk, request=(&(objectClass=user)(sAMAccountName={0})), realNameAttribute=cn, emailAttribute=mail}
2014.01.20 16:12:32 INFO [o.s.p.l.LdapSettingsManager] Group mapping: LdapGroupMapping{baseDn=CN=Domain Users,CN=Users,DC=mydomain,DC=co,DC=uk, idAttribute=cn, requiredUserAttributes=[dn], request=(&(objectClass=group)(member={0}))}
2014.01.20 16:12:32 INFO [o.s.p.l.LdapContextFactory] Test LDAP connection on ldap://dc02.mydomain.co.uk:389: OK
2014.01.20 16:12:32 INFO [org.sonar.INFO] Security realm started
Mais cela ne semble pas fonctionner pour mon utilisateur, sauf si j'utilise un utilisateur local. Lorsque vous activez la journalisation sur le wrapper en définissant:
wrapper.console.loglevel=DEBUG
Je reçois l'erreur suivante dans les journaux, ce qui n'aide pas beaucoup! :)
2014.01.20 17:07:10 ERROR [Rails] Error from external users provider:
Merci à @aaron qui a réussi à me diriger dans la bonne direction! Pour mon problème, il s'agissait d'un problème de découverte automatique et de forêt à laquelle je me connectais. Selon http://technet.Microsoft.com/en-us/library/cc978012.aspx , vous devez utiliser un port différent lors de la connexion à une forêt pour pouvoir ensuite effectuer une recherche dans toute la forêt plutôt que dans le domaine de votre choix. se connecter à (ce qui, je suppose, pourrait ne pas être le bon en mode de découverte automatique). En fin de compte, la configuration qui a fonctionné pour moi était la suivante:
# General Configuration
ldap.realm=mydomain.com
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
ldap.url=ldap://dc.mydomain.com:3268
# User Configuration
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
Ce qui est en fait assez simple et ne nécessite pas de compte utilisateur pour se connecter. Cela signifie qu'il est en mode d'authentification SIMPLE (je n'arrive pas à le faire fonctionner avec quoi que ce soit d'autre), mais cela me convient car c'est un système interne uniquement.
Je viens de travailler pour que le plug-in SonarQube LDAP fonctionne avec Active Directory moi-même. Étant donné que le réseau de chacun est configuré différemment, vous ne pouvez souvent pas simplement copier et coller une configuration. Voici le processus que j'ai utilisé pour déterminer la configuration correcte dans mon entreprise:
Comme indiqué dans la documentation , cette configuration est enregistrée dans le fichier:
SONARQUBE_HOME/conf/sonar.properties
La ligne suivante est requise en l'état: sonar.security.realm=LDAP
. Les autres lignes seront différentes par entreprise.
Cela m'a été utile de tester la configuration avec un outil graphique. J'ai utilisé le navigateur LDAP Softerra (version gratuite en lecture seule de l'administrateur LDAP). Dans ce navigateur LDAP,
ldap.url=ldap://dc01.mycompany.local:3268
. REMARQUE: comme indiqué dans une autre réponse, il peut être nécessaire d'utiliser un port différent de celui indiqué dans cet écran.ldap.bindDn
ldap.bindPassword
devrait être le mot de passe de cet utilisateur.ldap.user.baseDn
ldap.user.request
. La suggestion de la documentation SonarQube à utiliser avec AD a fonctionné pour moi: (&(objectClass=user)(sAMAccountName={login}))
. Laissez-moi vous expliquer pourquoi, au cas où cela ne fonctionnerait pas pour vous. Le "{login}" sera remplacé par ce que le SonarQube entre pour son nom d'utilisateur. La chaîne de requête (appelée "Filtre" dans le navigateur LDAP) indique donc qu'il faut rechercher toutes les entrées avec un objectClass égal à "utilisateur" et sAMAccountName égal à ce qui est saisi dans la zone de texte du nom d'utilisateur de votre portail Web SonarQube. Dans les informations sur la personne exemple, il devrait y avoir au moins un champ appelé "objectClass". Un de ceux-ci devrait avoir la valeur "utilisateur". Il devrait également y avoir un champ pour sAMAccountName. Utilisez cette valeur pour la zone de texte du nom d'utilisateur dans votre portail Web SonarQube.J'utilise SonarQube 3.7.3 et j'ai connecté ma configuration qui fonctionne. J'espère que cela serait utile.
# General Configuration
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
ldap.url=ldap://...
ldap.bindDn=user
ldap.bindPassword=password
# User Configuration
ldap.user.baseDn=ou=People,dc=company,dc=local
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
J'avais minutieusement vérifié mes paramètres, allant même jusqu'à utiliser la ligne de sortie "Mappage utilisateur" du fichier journal pour configurer une commande manuelle ldapsearch et vérifier que mon utilisateur était correctement extrait.
Pour une raison quelconque, spécifier ce paramètre le corrige pour moi:
ldap.user.realNameAttribute=cn
Cet attribut est supposé être facultatif et cn par défaut quand même, mais il ne fonctionne que si je le spécifie manuellement. Cela pourrait être un bug.
ldapsearch peut vous permettre d’ignorer directement la requête d’application LDAP.
J'ai regardé dans le fichier journal pour cette ligne:
INFO web[o.s.p.l.LdapSettingsManager] User mapping: LdapUserMapping{baseDn=DC=my-ad,DC=example,DC=com, request=(&(objectClass=user)(sAMAccountName={0})), realNameAttribute=cn, emailAttribute=mail}
Et puis construit une commande ldapsearch comme:
ldapsearch -D CN=myldapuser,CN=Users,DC=my-ad,DC=example,DC=com -W -h my-ad.example.com -b "DC=my-ad,DC=example,DC=com" "(&(objectClass=user)(sAMAccountName=myuser))"
Si vous obtenez de vraies informations utilisateur, cela signifie que vos paramètres de base sont corrects. Ceci est un indice que quelque chose ne va pas.
Avec la nouvelle version 1.5, une seule ligne est requise:
sonar.security.realm = LDAP
Utiliser le port 3268 a fait l'affaire pour moi. Voici ma configuration qui fonctionne avec SonarQube 5.0.1 et Active Directory:
sonar.security.realm=LDAP
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
sonar.authenticator.createUsers=true
ldap.url=ldap://dc101.office.company.com:3268
ldap.bindDn=CN=Service Account,OU=Windows Service,OU=Accounts,OU=Resources,DC=office,DC=company,DC=com
ldap.bindPassword=PASSWORD
ldap.user.baseDn=DC=office,DC=company,DC=com
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
Aucune solution auparavant ne fonctionnait pour moi, mais ceci:
# Configuration
sonar.realm=myreal.domain.com
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
ldap.url=ldap://myreal.domain.com:389
ldap.bindDn=cn=CNUser,dc=domain,dc=com
ldap.bindPassword=password
# User Configuration
ldap.user.baseDn=ou=people,dc=domain,dc=com
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
#logeo lo que pasa
wrapper.console.loglevel=DEBUG
Mon serveur LDAP a besoin d'une authentification, je ne peux donc pas l'éviter. Si cela ne fonctionne pas pour vous, essayez de ne pas spécifier le ldap.user.request
: tout dépend de la configuration du serveur LDAP de votre réseau.