3 votes

Authentification des utilisateurs OAuth combinée à l'authentification des serveurs et aux couches d'accès

Je travaille sur l'une de mes premières solutions OAuth, en utilisant une solution Visual Studio préinstallée.

Mon authentification fonctionne bien, et quand un client appelle /token ils reçoivent un jeton de porteur et tout va bien. Ce jeton est un jeton de "niveau utilisateur", que vous pouvez voir sur chaque requête au serveur. Cela signifie que je peux ajouter [Authorize] sur les points d'extrémité auxquels seul l'utilisateur doit accéder.

Cependant, je souhaite également que mes applications serveur disposent de "droits d'accès complets". Elles doivent être en mesure d'obtenir des listes de plusieurs utilisateurs, de supprimer des éléments, etc.

Voici mes questions, auxquelles je suppose que l'on peut répondre ensemble très facilement :

  1. Comment gérer à la fois les jetons de courte durée (jetons au porteur ?) et les jetons permanents (jetons d'API ?)?
  2. Comment différencier les niveaux d'accès, pour que certaines méthodes nécessitent le jeton permanent ?
  3. Comment puis-je différencier les niveaux d'accès dans la même méthode (par exemple, les méthodes GET typiques, où un utilisateur ne peut obtenir que "ses articles" alors qu'un jeton d'administration peut obtenir "tous") ?

C'est probablement très simple - et le plus souvent, je ne sais pas quels mots-clés rechercher sur Google !

1voto

Webruster Points 7275

Il peut sembler simple mais il implique de nombreux concepts, dont certains seront justifiés par vos questions :

Comment gérer à la fois les jetons de courte durée (jetons au porteur ?) et les jetons permanents (jetons d'API ?)?

En règle générale, un projet web-api peut être utilisé comme jeton porteur en tant que mécanisme d'authentification, mais il ne prend pas en charge les scénarios d'autorisation avancés tels que ceux que vous demandez, donc pour répondre à ces besoins, vous devez utiliser l'outil de gestion des autorisations. Customization of Identity model and implementation of the authorization based on the role

Comment puis-je différencier les niveaux d'accès, de sorte que certaines méthodes nécessitent le jeton permanent ?

Vous devez créer un Rolemanager et vous devez l'ajouter à la classe Owin Context et maintenant dans le Authorize vous pouvez modifier l'attribut pour retenir les rôles comme suit [Authorize(Roles="Admin")]

Comment puis-je différencier les niveaux d'accès, de sorte que certaines méthodes nécessitent le jeton permanent ?

Vous devez créer une logique personnalisée basée sur l'option Role de sorte que si cet utilisateur est Admin ou non et sur la base de cela, vous pouvez créer la permanent token pour les personnes qui ont un accès administrateur. j'espère que mon deuxième point d'explication répond également à cette question.

Comment puis-je différencier les niveaux d'accès dans une même méthode (par exemple, les méthodes GET classiques, où un utilisateur ne peut obtenir que "ses articles", tandis qu'un jeton d'administrateur peut obtenir "ses articles") ? peut obtenir "tous")

en fonction des rôles, vous pouvez obtenir la liste des all les utilisateurs ou un Single utilisateurs Voici un pseudo-code pour votre compréhension

    if (userManager.IsInRole(user.Id, "Admin")) {

     // this roles is authorized to get the All records

    }
else{

  // Send a single record ...
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X