2009-04-17 11 views
28

Mon entreprise développe et commercialise 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 authentifier les comptes d'utilisateurs par rapport à leurs systèmes existants au lieu de devoir créer un autre compte de connexion pour chacun de leurs employés. On dirait que cela s'appelle Single Sign On (SSO) dans de nombreux endroits? Naturellement, notre système dispose déjà d'un mécanisme de gestion des profils de compte utilisateur et d'authentification de ces comptes utilisateurs depuis notre page de connexion.Comment créer une intégration LDAP pour mon application Web?

Nous sommes un peu ignorants de LDAP et nous sommes confus à propos de certaines choses. Veuillez excuser l'utilisation possible d'une mauvaise terminologie (souvenez-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 « d'authentification à distance » pour leur compte. Ils fournissent l'URL distante qui authentifiera leurs utilisateurs.
  • Les utilisateurs accèdent à notre page de connexion et tentent de se connecter à l'aide de leur nom d'utilisateur et de leur mot de passe fournis par le système LDAP de leur entreprise.
  • Notre page de connexion transmet en toute sécurité les informations de connexion (probablement cryptées et hachées dans un format convenu) à l'URL «d'authentification à distance» fournie par notre client.
  • Le script du client va authentifier l'utilisateur et ensuite les rediriger vers notre site avec le "statut d'authentification".
  • Notre page analyse le "statut d'authentification" et accepte l'utilisateur comme connecté ou non.

En supposant que les informations ci-dessus sont même semi-correctes, nous aurons toujours besoin de chaque utilisateur pour avoir un compte dans notre système. N'aurons-nous pas besoin d'un moyen de synchroniser nos profils de compte utilisateur avec les profils utilisateur dans l'annuaire LDAP? Est-ce simplement un "identifiant externe" qui fait référence à l'identifiant 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 d'utilisateur dans notre système associer la connexion?

Qu'est-ce qui manque?

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

Répondre

9

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, il ne s'agit pas d'une authentification unique. SSO signifie seulement avoir à soumettre vos creds une fois lors de votre première connexion. Cela réduit simplement la complexité pour les utilisateurs en n'ayant qu'un seul identifiant. 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 poste de travail qui gère l'authentification sur différents systèmes. Dans un environnement MS uniquement, vous pouvez réaliser l'authentification unique si toutes vos applications Web se trouvent sur IIS, que vous utilisez IE et que vous utilisez l'authentification Windows intégrée, l'emprunt d'identité et tout ce genre de choses.

Vous pouvez envisager d'inscrire automatiquement un utilisateur authentifié dans votre système, sauf si vous avez besoin de préconfigurer des données de type profil. Si vous avez besoin d'une pré-configuration des utilisateurs, vous pouvez envisager d'importer régulièrement (tous ou un sous-ensemble filtré) les utilisateurs de l'annuaire LDAP et de les avoir dans un état non configuré, de sorte que les administrateurs sélectionnent dans une liste existante. utilisateurs configurés plutôt que de taper des ID. Dans le cas contraire, vous risquez que vos administrateurs ne tapent pas le bon identifiant et ne correspondent pas. Vous pouvez fournir une API telle que les solutions de gestion des identités et des accès (compte tenu de votre inclinaison Microsoft, voir par exemple ILM2 007) peuvent s'intégrer à votre système et gérer tous les comptes utilisateur pour vous.

1

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 du système LDAP corresponde au nom d'utilisateur de votre application ou que quelqu'un d'autre spécifie explicitement un nom d'utilisateur LDAP dans chaque compte d'utilisateur de votre application. Une fois que vous avez trouvé ce lien, vous pouvez simplement exécuter une liaison LDAP pour tester les informations d'identification de l'utilisateur.

3

Comme toujours, n'oubliez pas de valider le test d'authentification pour être sûr que le mot de passe envoyé n'est pas vide.

Une liaison avec un nom d'utilisateur et sans mot de passe est considérée comme une liaison anonyme, selon la norme, et semble avoir réussi! Quand en fait, ça n'a vraiment pas marché.

Il s'agit d'un problème que l'application doit gérer, car le serveur LDAP ne fait que suivre la norme, un standard ennuyeux, mais néanmoins standard.

2

peut-être envisager d'authentification Vs autorisation

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

Actuellement, vous indiquez une autorisation par 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 magasin de données personnalisé puis

  • utiliser la méthode de connexion de répertoire pour authentifier l'utilisateur
  • vous (peut) obtenir l'authentification gratuitement - l'utilisateur est connu aux fenêtres, fenêtres peut identifier à iis et sqlserver, peut-être pas besoin de demander à l'utilisateur qui ils sont.
  • vous connaissez plus d'utilisateurs que vous en avez besoin et que vous devez appliquer des restrictions - limiter les connexions à un groupe particulier.
  • peut stocker les données utilisateur dans le répertoire, plutôt que les données de votre application dans 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 revenir à AD ce Demystified .Net App single sign on pourrait aider

1

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

  • Lorsqu'un utilisateur accède à l'application Web, la variable serveur REMOTE_USER est supposé ê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 ldap compte que « correspond à » la remote_user
  • Le code de connexion essaie alors de faire correspondre ce compte avec un compte dans notre système
  • Si une correspondance est possible tout au long, on suppose que l'utilisateur connecté en tant que compte apparié, continuent normalement

de cette façon, l'utilisateur peut réutiliser leurs fenêtres authentification de domaine dans notre application.

1

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

Questions connexes