2017-10-11 3 views
4

Je travaille sur un service qui fournit l'intégration intelligente (espérons-le) de différents services prenant en charge OAuth 2.0. L'objectif de notre outil est sur l'amélioration de l'équipe de flux de travail, de sorte que nous combinons Slack, GitHub, Asana (numéro suivi), Cezanne (h outil), etc.Comment déléguer l'autorisation aux services Auth 2.0 externes

Nous avons ui et back-end qui fonctionnent avec tous ces outils (l'utilisateur est autorisé à tous, j'ai donc besoin d'accéder et de rafraîchir les jetons). Nous devons être capables de cacher différentes parties de l'interface utilisateur en fonction du rôle de la personne dans un outil spécifique. Prenons le GitHub comme exemple. L'utilisateur peut être un propriétaire de référentiel, un contributeur, un propriétaire d'entreprise (pour un compte d'entreprise), etc., de sorte que ces utilisateurs peuvent avoir besoin d'un autre utilisateur en fonction de leurs droits. Au départ, j'étais hésitant à implémenter l'autorisation moi-même (un autre système d'autorisation personnalisé est la dernière chose dont ce monde a besoin), je voulais profiter des mécanismes d'autorisation des autres services et créer un wrapper léger autour d'eux. Cela m'a semblé une idée raisonnable au début, mais je n'arrive pas à comprendre comment l'implémenter et Google ne donne pas de précieux conseils ce qui signifie: 99,99% J'essaie de faire quelque chose de stupide, 00,01% J'essaie de faire quelque chose de rare/innovant.

J'espérais tirer parti de OAuth 2.0 mais il ne semble pas supporter ce dont nous avons besoin. La chose la plus proche est celle des portées, mais elle ne semble pas très pertinente pour notre scénario.

La seule idée que j'ai pour l'instant est de créer notre propre système d'autorisation et d'intégrer d'autres services en utilisant le type de reverse engineering. Je demande donc les détails du compte GitHub de l'utilisateur à l'aide de l'API et lui applique les rôles dans notre système: Propriétaire du référentiel A, contributeur du référentiel B, propriétaire de la société C, etc. Je devrai inverser la permission pour chaque rôle (c.-à-d. le propriétaire du référentiel ne peut pas changer le nom de la société). Et nous devrons garder des rôles d'utilisateur pour chaque service: ainsi, au lieu de Admin/User/Manager/etc. nous aurons: OwnerOfGitHubRepository (pour repositoryA), ManagerOfAsanaTeam (pour l'équipe B), etc.

Ce serait génial si OAuth 2.0 services avaient un point final qui les autorisations retourner disponibles pour un utilisateur en cours. Je ne suis pas un ingénieur de sécurité, donc je pourrais manquer quelque chose d'évident. Donc, je voulais vous demander des conseils avant d'investir dans la mise en œuvre mentionnée ci-dessus.

Répondre

6

Le mot «autorisation» est utilisé dans deux contextes différents.

Dans un contexte, autorisation signifie "qui a quelles autorisations". Les solutions pour cette autorisation sont "gestion d'identité".

Dans l'autre contexte, l'autorisation signifie « qui accorde les autorisations à qui ». Les solutions pour cette autorisation sont "OAuth".

Dans certains cas, vous devrez peut-être gérer ces deux autorisations simultanément. Voir this question et this answer pour plus de détails.

+0

Merci d'avoir prouvé qu'OAuth 2.0 n'est pas la solution au problème décrit. J'adorerais entendre vos pensées sur la solution décrite dans la question (je l'ai un peu modifiée pour être plus clair). – SiberianGuy

2

Vous avez tagué votre question avec identityserver4.

This Issue pour identityserver3 de l'année dernière peut vous intéresser. Mais je crains que la plupart des fournisseurs ne supportent pas (encore) ce profil oauth2.
UMA semble être un moyen oauth2 d'activer l'autorisation à granularité fine, mais peut ne pas être la meilleure solution.