web-dev-qa-db-fra.com

Authentification unique [SSO] sur différents domaines à l'aide de Java

Nous mettons en œuvre l'authentification unique [SSO] sur plusieurs applications, qui sont hébergées sur différents domaines et différents serveurs.

enter image description here

Maintenant, comme indiqué dans l'image, nous introduisons un serveur d'authentification qui interagit réellement avec LDAP et authentifie les utilisateurs. Les applications qui seront utilisées/parler à Authenticate Server sont hébergées sur différents serveurs et domaines.

pour l'authentification unique, je ne peux pas utiliser de variables de session, car il existe différents serveurs et différentes applications, différents domaines, un cookie de niveau domaine/variable de session n'est pas utile.

Je cherche une meilleure solution qui peut être utilisée pour SSO à travers eux. Une implémentation démontrée existe-t-elle? Si oui, veuillez le poster ou me diriger dans la bonne direction pour cela.

22
Reddy

Vous pouvez y parvenir en faisant en sorte que toutes vos connexions se produisent sur le serveur d'authentification. Les autres applications peuvent communiquer avec le serveur d'authentification via un canal arrière. Le principe général est le suivant:

  1. L'utilisateur accède à l'application 1.
  2. L'application 1 nécessite que l'utilisateur se connecte, elle envoie donc un jeton au serveur d'authentification via le canal arrière. L'application 1 redirige ensuite l'utilisateur vers la page de connexion sur le serveur d'authentification avec le jeton comme paramètre sur la demande.
  3. L'utilisateur se connecte au serveur d'authentification. Le serveur d'authentification définit un cookie, marque le jeton comme authentifié et lui associe les détails de l'utilisateur. Le serveur d'authentification redirige ensuite l'utilisateur vers l'application 1.
  4. L'application 1 reçoit la demande de l'utilisateur et appelle le serveur d'authentification sur le canal arrière pour vérifier si le jeton est OK. Réponse du serveur d'authentification avec les détails de l'utilisateur.
  5. L'application 1 sait maintenant que l'utilisateur est autorisé et dispose de quelques informations de base sur l'utilisateur.

Maintenant, c'est là qu'intervient le bit SSO:

  1. L'utilisateur accède à l'application 2.
  2. L'application 2 nécessite que l'utilisateur se connecte, elle envoie donc un jeton au serveur d'authentification via le canal arrière. L'application 2 redirige ensuite l'utilisateur vers la page de connexion sur le serveur d'authentification avec le jeton comme paramètre sur la demande.
  3. Le serveur d'authentification voit qu'il existe un cookie de connexion valide, il peut donc dire que l'utilisateur est déjà authentifié et sait qui il est. Le serveur d'authentification marque le jeton comme authentifié et lui associe les détails de l'utilisateur. Le serveur d'authentification redirige ensuite l'utilisateur vers l'application 2.
  4. L'application 2 reçoit la demande de l'utilisateur et appelle le serveur d'authentification via le canal arrière pour vérifier si le jeton est OK. Réponse du serveur d'authentification avec les détails de l'utilisateur.
  5. L'application 2 sait maintenant que l'utilisateur est autorisé et dispose de quelques informations de base sur l'utilisateur.

Il existe des implémentations existantes de cette méthode, par exemple CAS (Central Authentication Service). Notez que CAS est pris en charge hors de la boîte dans Spring Security . Je vous conseille de considérer l'utilisation d'une implémentation existante, car écrire la vôtre sera difficile. J'ai simplifié les choses dans ma réponse et il y a beaucoup de potentiel pour introduire des failles de sécurité si vous êtes nouveau dans ce domaine.

38
Qwerky

Je vous recommanderai de vérifier OAuth. C'est un bon protocole d'authentification et d'autorisation utilisé par plusieurs grandes organisations, notamment Facebook, Google, Windows Live et autres. Il peut avoir une courbe d'apprentissage initiale, mais c'est une solution de qualité de production.

Il possède également des bibliothèques pour Java, Ruby, PHP et une gamme d'autres langages de programmation.

Par exemple, les implémentations côté serveur suivantes sont disponibles pour Java.

  • Apache Amber (brouillon 22)
  • Spring Security pour OAuth
  • Serveur d'autorisation Apis (v2-31)
  • Cadre Restlet (ébauche 30)
  • Apache CXF

Côté client Java sont également disponibles:

  • Apache Amber (brouillon 22)
  • Spring Social
  • Spring Security pour OAuth
  • Cadre Restlet (ébauche 30)

Veuillez vous référer ici pour plus de détails:

3
Gursev Kalra

La plus grande question est de savoir comment vous implémentez l'authentification unique. De nombreuses offres open source et même propriétaires (IBM Tivoli) valent leur capacité de connexion unique inter-domaines. Ce serait le moyen le plus simple et le meilleur de mettre en œuvre un sso interdomaine. Vous pouvez configurer le serveur LDAP que vous utilisez dans le serveur sso que vous choisissez.

En prenant par exemple open sso, voici un article pour configurer l'authentification unique interdomaine http://docs.Oracle.com/cd/E19681-01/820-5816/aeabl/index.html

Pour configurer LDAP dans sso ouvert, http://docs.Oracle.com/cd/E19316-01/820-3886/ghtmw/index.html

La référence sur la question est présentée dans un diagramme soigné ici http://docs.Oracle.com/cd/E19575-01/820-3746/gipjl/index.html

Selon l'offre que vous utilisez, vous pouvez configurer l'authentification unique interdomaine.

Avec cela, votre diagramme ressemblera à ceci, avec le serveur d'authentification étant votre utilitaire pour interagir avec le serveur sso de votre choix.

Avoir un serveur d'authentification qui communique avec sso est un principe d'architecture solide. Je suggérerais de faire des appels pour s'authentifier comme points de terminaison REst qui pourraient être appelés via http à partir de différentes applications.

Cross Domain single sign on

1
Ravi

Vous ne pouvez pas utiliser Rest Service.

Vous pouvez utiliser ce que j'appelle un Refferer Url Authentication Supposons que vous ayez une application d'authentification en cours d'exécution sur www.AAAA.com Dans les applications, où vous souhaitez vous authentifier, you could have a filter which looks for a authenticated cookie in its domain else redirect to www.AAAA.com for authentication

Sur Successfull authentication , vous pourriez pass the user profile information as encrypted GET / POST data back to the application

0
Sudhakar