spring boot oauth2.0 et spring security: comment accorder l'autorisation (autorités) à la connexion de l'utilisateur via facebook ou slack

Ananda

J'ai un serveur d'authentification construit à l'aide de spring boot oauth2.0 et suit le modèle david_syer.

Mon serveur d'authentification suit -

  1. Laissez l'utilisateur se connecter via un fournisseur tiers tel que Google ou laissez l'utilisateur créer son compte sur notre serveur en utilisant le nom d'utilisateur et le mot de passe et générer un jeton.

  2. Ainsi, lorsque l'utilisateur utilise un oauth externe comme google pour se connecter, je stocke simplement le jeton et transmets le même jeton (google) à mon application d'interface utilisateur pour accéder aux serveurs api de ressources. J'ai un filtre d'authentification qui vérifie le jeton et autorise l'accès à l'API.

  3. Lorsque l'utilisateur utilise un nom d'utilisateur et un mot de passe pour obtenir un jeton, nous stockons l'utilisateur et ses autorisations et générons un jeton pour lui. Désormais, l'interface utilisateur utilise le jeton généré par nos serveurs d'authentification pour accéder aux serveurs API de ressources.

Maintenant ma question est

  1. Est-ce la bonne façon d'utiliser le jeton de l'API externe et de l'utiliser pour accéder à notre serveur API de ressources?
  2. Et comment puis-je ajouter des autorités aux utilisateurs qui s'inscrivent à l'aide d'un fournisseur oauth tiers puisque je n'ajoute pas d'entrée d'utilisateur et d'autorités pour eux?

Ainsi, la sécurité de printemps qui charge les autorités des utilisateurs et des utilisateurs (loadUserByUsername () de UserDetailsService) n'aura rien si l'utilisateur provient d'un fournisseur éternel.

Mitra Ghorpade

J'ai une suggestion pour l'étape 2: une fois que l'utilisateur utilise l'authentification google et est redirigé vers votre page d'application, effectuez la transformation des revendications sur votre serveur et générez votre propre jeton émis par le serveur d'identité que vous avez.

La raison en est que vous serez en mesure de fournir des revendications spécifiques et que les noms des revendications ne doivent pas nécessairement correspondre.

De cette façon, vous continuez à vérifier votre propre jeton tout le temps sur l'application cliente. Disons donc que l'utilisateur utilise Facebook au lieu de Google et même dans ce scénario, car vous attribuerez votre propre jeton, vous n'avez pas besoin de vérifier le jeton provenant de différents serveurs d'identité tiers.

De cette façon, votre serveur d'identité fait confiance à Facebook, le jeton fourni par Google et votre application ne fera confiance qu'à votre serveur d'identité afin que votre application n'ait pas besoin de savoir quel IDP émet le jeton.

Et avec l'approche que j'ai suggérée ci-dessus, vous pourrez même modifier vous-même les revendications de l'utilisateur et ne pas avoir à dépendre du serveur d'identité tiers pour fournir des revendications.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Filtrer le dataframe basé sur plusieurs colonnes d'un autre dataframe

  2. 2

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  3. 3

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  4. 4

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  7. 7

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  8. 8

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  9. 9

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  10. 10

    comment afficher un bouton au-dessus d'un autre élément ?

  11. 11

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  12. 12

    Filtrer les données en fonction des conditions d'une trame de données

  13. 13

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  14. 14

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  15. 15

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  16. 16

    Pourquoi Phantomjs ne fonctionne pas avec ce site ?

  17. 17

    Stop jQuery execution after one time execution

  18. 18

    Concaténer des variables dans ansible

  19. 19

    Comment calculer la probabilité du graphique de densité?

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

chaudétiquette

Archive