J'ai lu Publication du blog de Dominik sur l'authentification VS Modélisation d'autorisation à l'aide d'Identity Server ( https://leastprivilege.com/2016/12/16/ididity-vs-permissions/ ). Puisque j'utilise principalement une autorisation basée sur le rôle, je vais bien à l'aide d'ItalyServer comme point d'extrémité d'authentification / autorisation pour différents clients et API. P>
Ma question est de savoir comment modéliser les carottes d'identité et de ressources correctement? Le client peut-il savoir quels rôles sont autorisés pour l'utilisateur sur une ressource spécifique? Si oui, la clientèle peut-elle connaître uniquement les rôles de l'utilisateur pour les slopes de ressources demandées (et non tous les rôles de tous les champs).
Pour autant que je comprends le concept, si je demande des réclamations sur l'utilisateur via userinfo em> terminal, je reçois des revendications qui sont filtrées par des pièces détachées énumérées à l'intérieur des champs d'identité demandés. Cela signifie que si le client demande rôles em> étendue (périmètre d'identité avec Rôle em> revendique), userinfo em> point de terminaison répondra avec toutes les revendications de rôle, y compris d'autres applications. < / p>
Prenons un exemple de MVC simple, où le client MVC communique avec API via le repos.
Le client MVC (client) utilise le middleware et les requêtes d'authentification Cookie / OIDC: Merci pour toute aide. P> Responsantype = "ID_Token Token", Scope = "API de profil OpenID" code>.
L'API (ressource) utilise IdentityServerBertokeArtoke Auth -ware et exigences:
requisScopes = "API" code>.
Le client contient des éléments UI qui devraient être visibles sur la base du rôle API EM>. Comment les rôles peuvent-ils être accessibles à partir du client, car le point d'extrémité userinfo em> ne renvoie que les réclamations basées sur l'image d'identité?
Si le client doit demander à l'API (ressource), quelles actions sont possibles? Et basé sur la réponse Afficher / masquer les éléments UI? P>
3 Réponses :
Vous pouvez mettre les rôles dans votre id_token. Mettre en œuvre GetProfileDataAsync code> et ajouter vos rôles lorsque:
context.Caller == Constants.ProfileDataCallers.UserInfoEndpoint
Les choses sont différentes entre IdentityServer3 et ItalyServer4. Mon exemple ci-dessous est basé sur IdentityServer4.
Vous devez faire quelques points: p>
identitéResource code> qui accède à l'accès au rôle code> réclamation. li>
- Inclure ce nouveau
identitéResource code> dans le autorisé du client code> li>
- Demandez au client de demander votre nouveau
identitéResource code> en tant que portée. LI>
ol> alors ce que j'ai fait était comme suit: p>
où j'ai défini mes ressources: p> xxx pré> défini mon client comme: p> xxx pré> puis utilisé ce qui suit dans mon client JavaScript: p> xxx pré> i a ensuite été capable de voir tout le Jwtclaimtype.roole code> affirmations que j'avais ajoutées au revendiquentPRisciPal code> dans mon client JavaScript. P> p>
Bonjour, j'essaie ce code mais cela n'a pas ajouté les rôles au jeton, mais je peux ajouter les rôles au jeton si je l'ajoute à Apireource, je ne comprends pas pourquoi ???
Vous êtes sûr que vous avez fait toutes les choses mentionnées? 1) Créer une nouvelle portée et ajouter une réclamation de rôle à celui-ci 2) Ajoutez que la nouvelle portée à la définition du client côté serveur 3) incluait cette portée dans la connexion côté client
corrigé, je devais ajouter les étendues OpenID et profiler au client;
AllowedScopes = new List<string> { "customAPI.read", IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile }