Je dois vérifier que j'ai ce droit. Je construis une action sur Google en utilisant le SDK Actions. Pour l'authentification, je souhaite utiliser Google Sign In pour que tout soit relativement simple pour l'utilisateur final. Mon accomplissement sera assis sur les fonctions Firebase. Mon serveur OAUTH sera installé en dehors de Firebase.Actions sur Google - Connexion et échange de jeton d'accès pour UID
La première chose que je note est que la plupart de la connexion frontale se fait en JavaScript.
var provider = new firebase.auth.GoogleAuthProvider();
De là, si l'utilisateur ouvre une session, nous pouvons utiliser:
firebase.auth().getRedirectResult().then(function(result) { }
et nous avons accès à result.user.uid
Ma première question ici est la sécurité - parce que le API Key
, DatabaseURL
et authDomain
sont exposées dans JavaScript côté client et, à l'aide d'une Developer Console dans Chrome, l'utilisateur final a accès à son ID et à son jeton. Je me demandais si utiliser le jeton uid ou id sous result.user.De
pour une raison quelconque, mais comme il semble que vous pouvez facilement utiliser un décodeur JWT sur Internet pour extraire toutes les informations de sorte qu'il rend vraiment peu différent d'un point de vue de sécurité - je peut aussi prendre l'uid ici.
Il semble que le côté administrateur des choses est disponible dans Node.js et PHP où je peux me connecter à la base de données et valider les jetons et créer des utilisateurs, mais je ne peux pas me connecter. Donc JavaScript semble le chemin à parcourir. La prochaine étape, je pense, est de renvoyer mon uid sur le serveur oauth pour que nous sachions à qui nous ouvrons une session et que nous puissions lier le jeton d'accès oauth/rafraîchir le jeton/code d'authentification à l'uid. Et que nous stockions ce lien dans Firebase ou une base de données MySQL sur le serveur Oauth, cela n'a pas vraiment d'importance.
Puis pour l'accomplissement dans les fonctions Firebase, nous avons alors une userId par:
let ActionsSdkApp = require('actions-on-google').ActionsSdkApp;
const app = new ActionsSdkApp({request: request, response: response});
app.getUser().userId);
Mais cela ne correspond pas à l'uid nous avons récupéré à partir du résultat ... Mais nous avons accès à la AccessToken nous avons produit sur le serveur Oauth, nous avons donc besoin d'échanger le jeton d'accès pour l'uid correct - que nous cherchions à partir de Firebase ou du serveur MySQL OAuth, je suppose que cela n'a pas d'importance.
Si tout est réuni, est-ce que tout sonne correctement? Ou y a-t-il quelque chose qui pourrait être mieux fait? J'espérais qu'il y avait une meilleure façon d'identifier l'utilisateur dans Firebase Functions. Mais cela ne semble pas possible.
Merci Prisonnier! Il m'a fallu longtemps pour envelopper ma tête, mais j'arrive lentement. Donc, au lieu d'utiliser l'id_utilisateur, je peux à la place passer l'idToken en utilisant peut-être Post à un script PHP backend qui peut faire la validation JWT et stocker les Tokens générés et Id utilisateur décodé. – Simon