2017-08-01 3 views
0

J'utilise WSO2IS en tant que fournisseur de OIDC pour l'authentification et l'autorisation. En utilisant l'attribution de code d'authentification, j'ai obtenu le jeton d'accès. Je dois autoriser les utilisateurs à accéder à des services spécifiques en fonction de leurs rôles.WSO2IS Openid-connect: Contrôle d'accès en utilisant un accès jeton

J'ai essayé d'utiliser XACML pour résoudre ce problème, mais je trouve que je dois passer l'encodage base64 de nom d'utilisateur: mot de passe dans l'en-tête de la demande API REST XACML. Au lieu de cela, est-ce que je peux autoriser l'utilisateur à accéder à des services en fonction de leurs rôles, en utilisant access-token?

Cette partie de l'autorisation arrive dans le serveur de ressources. Je pensais pouvoir utiliser le point de terminaison d'introspection pour autoriser l'utilisateur en fonction du jeton d'accès à l'aide d'étendues. Mais je ne comprends pas comment les portées peuvent être utilisées pour fournir un contrôle d'accès aux utilisateurs?

Répondre

0

Pour obtenir un jeton d'accès avec toutes les étendues disponibles pour un utilisateur, le client OAuth2 doit demander toutes les étendues qui l'intéressent et le jeton ne contiendra que celles auxquelles l'utilisateur a accès. Voir this question.

Oui, il est lourd, mais OAuth2 est avant tout un protocole de délégation d'autorisation - il permet aux utilisateurs de déléguer certains de leurs droits (champs) à un client.

Sinon, si vous pouvez décider des autorisations en fonction des rôles, vous pourriez probablement obtenir une liste des rôles d'utilisateur à partir d'un jeton d'identification.

+0

Comment puis-je ajouter/carte rôles utilisateur en signe identifiant dans WSO2IS? Maintenant, je viens d'obtenir des champs comme at_hash, acr, sous, aud, azp, nom, iss etc dans le id_token. –

+0

Je ne sais pas comment faire, les rôles (en tant que revendication) ne sont pas couverts par le RFC OpenID Connect, mais ils pourraient être fournis par votre implémentation. Il y a aussi le point de terminaison 'userinfo' qui pourrait vous donner l'information si le jeton d'accès le permet. –

+0

A travers la poste pour obtenir des étendues pour un utilisateur. WSO2 API Manager est-il le seul moyen d'ajouter des étendues? Ne pouvons-nous le faire avec WSO2 IS? Mon exigence simple. Chaque utilisateur a des privilèges différents, comme user1 peut accéder à service1 et user2 peut accéder à service2. J'ai juste besoin des privilèges de l'utilisateur/rôle aussi simple qu'une paire de valeurs de clé, [Utilisateur1: Service1], [Utilisateur2: Service2]. Ce n'est pas forcément un accès à l'API REST. Mais je vois que dans WSO2IS, les privilèges sont mappés aux points de terminaison API et les actions HTTP telles que GET, POST et le contrôle d'accès se produisent uniquement via ces API. Pourquoi est-ce vrai? –