7
votes

Identity Server - Portée d'identité / ressource - Comment le client peut-il obtenir des revendications de ressources sur l'utilisateur

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.

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 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 étendue (périmètre d'identité avec Rôle revendique), userinfo 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: Responsantype = "ID_Token Token", Scope = "API de profil OpenID" . L'API (ressource) utilise IdentityServerBertokeArtoke Auth -ware et exigences: requisScopes = "API" . Le client contient des éléments UI qui devraient être visibles sur la base du rôle API . Comment les rôles peuvent-ils être accessibles à partir du client, car le point d'extrémité userinfo 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?

Merci pour toute aide.


0 commentaires

3 Réponses :


0
votes

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 


0 commentaires

2
votes

Les choses sont différentes entre IdentityServer3 et ItalyServer4. Mon exemple ci-dessous est basé sur IdentityServer4.

Vous devez faire quelques points:

  1. Définissez un identitéResource qui accède à l'accès au rôle réclamation.
  2. Inclure ce nouveau identitéResource dans le autorisé du client
  3. Demandez au client de demander votre nouveau identitéResource en tant que portée.

    alors ce que j'ai fait était comme suit:

    où j'ai défini mes ressources: xxx

    défini mon client comme: xxx

    puis utilisé ce qui suit dans mon client JavaScript: xxx

    i a ensuite été capable de voir tout le Jwtclaimtype.roole affirmations que j'avais ajoutées au revendiquentPRisciPal dans mon client JavaScript.


2 commentaires

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



-1
votes

corrigé, je devais ajouter les étendues OpenID et profiler au client;

AllowedScopes = new List<string>
                    {
                        "customAPI.read",
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile
                    }


0 commentaires