2017-08-23 2 views
1

Nous avons un nouveau projet Web dans lequel nous avons décidé d'utiliser identityserver en tant que service de gestion d'identité centralisée. L'idée étant à long terme, nous pouvons migrer d'autres projets et maintenir les utilisateurs en un seul endroit.Comment gérer les données de profil spécifiques au site pour une API protégée par un serveur d'identité

Le site lui-même se compose d'un SPA angulaire (client), d'un backend api Web (ressource api) et d'un site MVC noyau aspnet distinct exécutant un serveur d'identité.

Les utilisateurs suivent un flux de connexion openid, en redirigeant depuis l'interface vers le serveur d'identité pour se connecter, puis en utilisant le jeton d'accès résultant pour se connecter à l'API.

Tout cela fonctionne très bien, et nous pouvons utiliser des données de l'utilisateur de base de l'API à partir du jeton d'accès comme sujet, e-mail, nom, etc.

Jusqu'à présent, très bien. Le problème est que nous avons des données de profil supplémentaires qui sont spécifiques à l'application - dans la conception originale (sans serveur d'identité) tout cela était contenu dans un seul JWT, donc il était très facile de consommer depuis le frontend, backend ou via un middleware intégré comme l'identité ASP.net. Notre solution de contournement est que le client doit effectuer un appel à l'API après la connexion pour récupérer un jeton distinct de l'API contenant les données de profil spécifiques à ce domaine de problème - par exemple les autorisations et rôles que l'utilisateur a dans ce système .

Cette dernière étape me semble un peu maladroite. Par exemple, nous ne pouvons pas maintenant utiliser l'identité ASPNET dans l'API pour obtenir les rôles car ils sont dans le second jeton et non dans le jeton d'accès.

Existe-t-il une meilleure pratique ou approche pour gérer ce scénario?

par exemple. Devrions-nous demander au serveur d'identité de demander les données de profil de l'API au moment de la connexion ou est-ce mauvais parce que le serveur d'identité ne devrait pas connaître la mécanique du client?

Répondre

1

Question intéressante. Je crois dans ce scénario que j'utiliserais le «principe de responsabilité unique». Je voudrais interroger qui a la capacité "réponse-capacité" pour fournir les données de profil. Si c'est votre application que vous vous dirigez dans la bonne direction pour obtenir les informations de profil de l'API elle-même. Si c'est dans la capacité du fournisseur d'identité d'aller de l'avant et de le mettre en œuvre le fournisseur d'identité. L'architecture est sur les décisions et une bonne architecture vous permettrait de changer ces décisions facilement, donc si le profil est juste pour cette application, alors gardez-le dans cette application. J'espère que cela a du sens.

+0

Merci, oui, cela a du sens - je pensais que ce serait finalement un choix de conception pour nous, mais j'espérais que quelqu'un pourrait avoir des exemples concrets d'un projet qui a traité cela. –

+0

En fin de compte, je suis allé avec le garder dans le serveur d'identité, car nous avons décidé qu'il était plus important que l'application web ne doit pas déranger avec l'interface utilisateur pour les données de profil. Nous avons également utilisé ce qui suit pour mettre des données de profil dans le jeton: https://stackoverflow.com/questions/41687659/how-to-add-additional-claims-to-be-included-in-the-access-token-using -asp-net-id –