ruby on rails pour Avantages de l'utilisation de l'authentification OAuth Password Credentials sur l'authentification d'accès Token




oauth2 jwt (2)

Je crée une API pour une application mobile utilisant Rails 5. Pour le moment, je n'ai pas besoin d'autorisation à trois pattes, car l'API ne sera utilisée que par nos propres applications mobiles.

Je pense à choisir l'une de ces deux options:

  1. Doorkeeper + Devise: Je peux implémenter OAuth 2.0 en utilisant Doorkeeper, mais j'utiliserai seulement la Grant Credentials Grant, au moins pour l'instant.
  2. Le propre ActionController::HttpAuthentication::Token Rails ActionController::HttpAuthentication::Token Module ActionController::HttpAuthentication::Token + Devise : Cela semble être le moyen le plus simple d'aller.

Honnêtement, je ne peux pas voir la différence entre la méthode d' authentification Token Access et OAuth 2.0 Password Credentials Grant .

Comment choisir l'un par rapport à l'autre? Y a-t-il une autre option à prendre en compte?


Les deux sont conceptuellement différentes choses:

  • "Token Access Authentication" spécifie un protocole décrivant comment un jeton (éventuellement de longue durée) doit être présenté au serveur de manière sécurisée. Il ne dit rien de l'origine du jeton ni de la manière dont il doit être interprété.
  • "Grant Credentials Grant" fait partie du flux OAuth à part entière, décrivant les moyens d' obtenir un jeton (généralement de courte durée) .

Dans un sens, vous pouvez utiliser Grant Credentials Grant pour obtenir un jeton à l'aide de OAuth, puis utiliser ce jeton dans l'en-tête d'autorisation Token pour accéder.

La question devient alors: est-il utile de faire l'aller-retour supplémentaire pour échanger les informations d'identification (permanentes et secrètes) pour un jeton (temporaire), alors que nous pourrions utiliser le jeton (permanent et secret) stocké dans l'application pour autoriser immédiatement.

Comme je le vois, il y a deux avantages potentiels de l'utilisation du flux OAuth complet. Premièrement, il vous permet d'ajouter naturellement d'autres moyens d'autorisation pour des tiers. Deuxièmement, il vous permet de révoquer le jeton à tout moment et de forcer une nouvelle autorisation en utilisant ces autres moyens (si vous les implémentez, bien sûr) sans avoir à inventer de roues.

D'un autre côté, vous pouvez toujours ajouter d'autres pièces de "génération de jetons" plus tard, lorsqu'elles sont nécessaires. Ainsi, si votre plan actuel consiste à coder de toute façon les informations d'identification dans le code, il est probable que vous feriez mieux de vous fier à l'autorisation Token .

Non seulement cette requête est plus courte, mais elle peut également être légèrement plus sécurisée que l'authentification Bearer utilisée dans OAuth: si un attaquant renifle un jeton Bearer , il obtiendra (généralement) un accès token complet au serveur jusqu'à son expiration. Ce n'est pas le cas avec les jetons Token (normalement). Ce n'est pas grave si l'attaquant peut extraire le secret partagé de votre application.


Si tout ce que vous avez, c'est l'API à usage unique (uniquement pour les applications mobiles), il n'y a pas de grande différence en termes de sécurité.

Mais si vous souhaitez étendre cette API à utiliser par les services externes, vous serez dans une meilleure position avec OAuth 2.0 implémenté en utilisant Doorkeeper, car vous pouvez facilement configurer, par exemple, une autorisation de code d'autorisation pour leur. Donc, je dirais que l'option "Doorkeeper + Devise" est plus à l'épreuve du futur, car elle offre plus d'options, alors que l' authentification par jeton HTTP est beaucoup plus simple pour l'implémentation.







rails-api