Généralement, OAuth dans Rails est géré par OmniAuth, directement utilisé ou avec Devise. Cependant, cela ne semble pas fonctionner dans un backend API uniquement; OmniAuth s'appuie sur des cookies et possède son propre middleware (opaque), alors que les cookies ne sont pas très intéressants avec les clients natifs. C'est pourquoi je cherche un moyen de faire OAuth sans cookies. J'essaye de construire un site Web avec l'interface et le backend séparés; le flux de travail OAuth par page Web, dans mon esprit, estOAuth dans Rails sans cookies?
- utilisateur clique sur un bouton à mon frontend, lié au fournisseur de OAuth, avec un rappel à mon frontend.
- L'utilisateur s'authentifie et autorise sur la page du fournisseur, et est redirigé vers mon interface avec des informations d'identification.
- Mon frontend attrape le jeton de la chaîne de requête, et les envoie au serveur pour se connecter ou enregistrer un nouveau compte, comme AJAX. Le serveur vérifie et enregistre le jeton avant de répondre avec un identificateur de session.
- AJAX à venir de frontend a l'identifiant de session attaché, soit dans un en-tête ou dans une chaîne de requête.
Je pense que je sais comment faire cela à partir de zéro; En fait, j'ai déjà créé un magasin de sessions Redis qui ignore les cookies, et l'identificateur de session est extrait de l'en-tête Authorization
. (Non, JWT n'est pas la solution car elle ne peut pas être révoquée facilement.) Mais je veux quand même savoir s'il y a une solution prête à l'emploi, ou si Devise ou OmniAuth couvre déjà le serveur cookie. FWIW, je suis sur macOS Sierra, toutes les dernières versions de gem.