web-dev-qa-db-fra.com

Comment construire l'intégration LDAP pour mon application web?

Mon entreprise développe et vend une application SaaS qui compte des centaines de clients. Certains de nos clients nous ont demandé de prendre en charge l'intégration LDAP pour l'authentification des comptes utilisateurs par rapport à leurs systèmes existants au lieu d'avoir à créer un autre compte de connexion pour chacun de leurs employés. Cela ressemble à ce que l'on appelle l'authentification unique (SSO) dans de nombreux endroits? Naturellement, notre système dispose déjà d'un mécanisme pour maintenir les profils de compte d'utilisateur et authentifier ces comptes d'utilisateur à partir de notre page de connexion.

Nous ignorons un peu LDAP et sommes confus à propos de certaines choses. Veuillez excuser l'utilisation possible d'une mauvaise terminologie (rappelez-vous, nous sommes un peu ignorants à ce sujet).

Nous pensons que nous comprenons les bases de la façon dont cela pourrait fonctionner:

  • Notre client configure son compte pour "activer" la fonction "authentification à distance" de son compte. Ils fournissent l'URL distante qui authentifiera leurs utilisateurs.
  • Les utilisateurs viennent sur notre page de connexion et tentent de se connecter en utilisant leur nom d'utilisateur et mot de passe fournis par le système LDAP de leur entreprise.
  • Notre page de connexion transmettra en toute sécurité les informations de connexion (vraisemblablement cryptées et hachées dans un format convenu) à l'URL "d'authentification à distance" fournie par notre client.
  • Le script du client authentifiera l'utilisateur puis le redirigera vers notre site avec le "statut d'authentification".
  • Notre page analysera le "statut d'authentification" et acceptera l'utilisateur comme étant connecté ou non.

En supposant que les informations ci-dessus soient même semi-correctes, nous aurons toujours besoin que chaque utilisateur ait un compte dans notre système. N'aurons-nous pas besoin d'un moyen de synchroniser nos profils de compte d'utilisateur avec les profils d'utilisateur dans l'annuaire LDAP? S'agit-il simplement d'un "ID externe" qui fait référence à l'ID de l'utilisateur dans le système LDAP? Serait-il alors nécessaire que le script "d'authentification à distance" du client fournisse cet ID à notre système afin que nous sachions à quel compte utilisateur de notre système associer la connexion?

Que nous manque-t-il?

BTW, notre plate-forme est IIS, ASP.Net 2.0 et SQL Server 2005.

36
chief_wampum

Il existe plusieurs options. Si vous voulez vraiment dire LDAP, par opposition à simplement Active Directory, je chercherais probablement à utiliser System.DirectoryServices.Protocols pour effectuer une liaison LDAP en utilisant les informations d'identification fournies via un canal sécurisé.

Strictement, ce n'est pas l'authentification unique. L'authentification unique signifie que vous n'avez à soumettre vos informations d'identification qu'une seule fois lors de votre première connexion. Cela réduit simplement la complexité pour les utilisateurs en n'ayant qu'un seul ID. Habituellement, pour les clients Windows dans un environnement d'entreprise avec un mélange de plates-formes et de technologies, l'authentification unique est réalisée par un client ajouté au bureau qui gère l'authentification auprès de divers systèmes. Dans un environnement MS uniquement, vous pouvez obtenir l'authentification unique si toutes vos applications Web sont sur IIS, vous utilisez IE et utilisez l'authentification Windows intégrée, l'emprunt d'identité et tout le reste).

Vous pouvez envisager d'inscrire automatiquement un utilisateur authentifié dans votre système, sauf si vous avez besoin que les données de type profil soient préconfigurées. Si vous avez besoin d'une préconfiguration d'utilisateurs, vous pouvez envisager d'importer régulièrement (tous ou un sous-ensemble filtré) des utilisateurs à partir de l'annuaire LDAP et de les avoir dans un état non configuré, de sorte que les administrateurs choisissent dans une liste existante de non utilisateurs configurés plutôt que de taper des identifiants. Sinon, vous risquez que vos administrateurs tapent le mauvais ID utilisateur et présentent des décalages.

Vous pouvez fournir une API telle que les solutions de gestion des identités et des accès (compte tenu de votre orientation Microsoft, voir ILM2 007 comme exemple) peuvent s'intégrer à votre système et effectuer toute la gestion des comptes d'utilisateurs pour vous.

12
serialhobbyist

Comme toujours, n'oubliez pas de valider le test d'authentification pour vous assurer que le mot de passe envoyé n'est pas vierge.

Une liaison avec un nom d'utilisateur et aucun mot de passe est considérée comme une liaison anonyme, selon la norme, et semble avoir réussi! En fait, ce n'était vraiment pas le cas.

C'est un problème que l'application doit gérer, car le serveur LDAP ne fait que suivre la norme, une norme ennuyeuse, mais néanmoins une norme.

5
geoffc

Pensez peut-être à l'authentification et à l'autorisation

Authentification - quel utilisateur est-ce? Autorisation - qui devrait pouvoir utiliser l'application, les utilisateurs spécifiés, les groupes?

Actuellement, vous impliquez une autorisation via l'authentification, car seuls ceux qui sont enregistrés dans votre application sont autorisés à l'utiliser.

Si vous utilisez un répertoire au lieu de votre banque de données personnalisée,

  • utiliser la méthode de connexion à l'annuaire pour authentifier l'utilisateur
  • vous (pouvez) obtenir l'authentification gratuitement - l'utilisateur est connu de windows, windows peut s'identifier à iis et sqlserver, peut-être pas besoin de demander à l'utilisateur qui il est.
  • vous en saurez plus sur les utilisateurs que vous avez d'autorisation et devez appliquer des restrictions - limiter les connexions à un groupe particulier.
  • pourrait stocker les données utilisateur dans le répertoire, plutôt qu'avec les données de votre application sur le serveur SQL.

Si vos utilisateurs veulent vraiment LDAP générique, alors vous voulez regarder dans (C) ldap_connect, ldap_bind_s (C #) LDAPConnection System.DirectoryServices.Protocols

Ou encore, revenez à AD this connexion unique démystifiée .Net App pourrait aider

2
Greg Domjan

La façon dont cela fonctionne dans notre système:

  • Lorsqu'un utilisateur accède à l'application Web, la variable de serveur REMOTE_USER est supposée être le jeton utilisateur
  • Le code de connexion se connecte au répertoire ldap avec un compte spécifique à la recherche
  • Le code de connexion recherche un compte LDAP qui "correspond" à REMOTE_USER
  • Le code de connexion essaie ensuite de faire correspondre ce compte avec un compte dans notre système
  • Si la correspondance est possible tout au long du processus, supposez que l'utilisateur s'est connecté en tant que compte correspondant, continuez normalement

De cette façon, l'utilisateur peut réutiliser son authentification de domaine Windows dans notre application.

1
Joeri Sebrechts

Voici un logiciel utile qui permet d'accéder aux répertoires LDAP sur le Web, à l'aide de JSON-RPC: Json2Ldap

1
Vladimir Dzhuvinov

Vous devez décider comment vous envisagez de lier un utilisateur LDAP à un compte dans votre application.

Par exemple, vous pouvez exiger que le nom d'utilisateur dans le système LDAP corresponde au nom d'utilisateur dans votre application, ou vous pouvez exiger que quelqu'un spécifie explicitement un nom d'utilisateur LDAP dans chaque compte d'utilisateur de votre application.

Une fois que vous avez compris ce lien, vous pouvez simplement exécuter une liaison LDAP pour tester les informations d'identification de l'utilisateur.

1
Kyle W. Cartmell