2017-10-14 5 views
0

J'ai une application Ionic qui connecte les utilisateurs en utilisant Google auth. Il passe un id_token et access_token à un serveur de noeud qui utilise ensuite id_token pour vérifier l'utilisateur, et access_token pour faire des appels au compte Google de l'utilisateur. Lorsque l'application Ionic est utilisée à partir d'un navigateur, elle utilise gapi pour connecter l'utilisateur et obtenir les jetons, ce qui fonctionne bien. Pour iOS et Android, il utilise le plugin Cordova officiel (cordova-plugin-googleplus).https://www.googleapis.com/oauth2/v4/token renvoie toujours unsupported_grant_type/Invalid grant_type sur Android

Pour iOS, le plugin renvoie toujours les deux jetons, et tout va bien. Pour Android, aucun access_token n'est renvoyé. J'ai donc suivi les instructions pour obtenir un serveurAuthCode à la place, ce qui fonctionne également. Échanger le serverAuthCode pour un access_token est où le problème réside.

Les instructions officielles Google fournissent la demande de l'échantillon

POST /oauth2/v4/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& 
client_id=your_client_id& 
client_secret=your_client_secret& 
redirect_uri=https://oauth2.example.com/code& 
grant_type=authorization_code 

Je fourni les client_id et client_secret utilisé dans l'appel pour obtenir le serverAuthCode. J'ai vérifié que le serverAuthCode que j'envoie semble correct, en commençant par "4 /". Le redirect_uri est un peu un mystère. J'ai essayé tout ce que je pouvais penser, y compris les URI de redirection autorisées associées au client_id, null, l'URI de l'exemple, et beaucoup de suggestions bizarres du web. Peu importe ce que, que ce soit de l'application ou de SoapUI, je reçois

{ 
"error": "unsupported_grant_type", 
"error_description": "Invalid grant_type: " 
} 

This post semble dire que le redirect_uri doit correspondre à celui utilisé dans l'appel pour obtenir le serverAuthCode. Ceci est cependant défini par le plugin, et en regardant son code, je ne trouve pas qu'il soit défini n'importe où.

Donc ma question est: quelqu'un peut-il s'il vous plaît me dire comment obtenir un access_token sur Android? Si le message ci-dessus est correct, existe-t-il un moyen de savoir ce que redirect_uri est utilisé par le plugin? Ou y a-t-il un autre moyen d'obtenir access_token? This issue offre un hack pour obtenir le plugin pour retourner un access_token directement, mais implique également que Google déprécie en faveur de serverAuthCode, il semble donc préférable d'obtenir le access_code du serverAuthCode.

(Mise à jour: la solution de contournement ci-dessus aussi ne fonctionne pas dans notre cas, donc nous semble être coincé à ce stade)

+0

Instructions de Google [ici] (https://developers.google.com/identity/protocols/OAuth2WebServer#exchange-authorization-code). Quelqu'un de Google surveille-t-il ce tag? – Adam

Répondre

0

Après des jours d'essayer des choses, nous avons finalement trouvé que le codage du poste n'a pas été correct. Inutile de dire que certaines informations dans la réponse aux erreurs seraient utiles - en particulier dans ce cas, car en testant divers formats de corps, il était clair que les paramètres étaient reconnus, mais néanmoins une erreur était renvoyée.

Toujours aucune idée pourquoi sur Android le access_token a soudainement cessé d'être retourné, rendant cet appel nécessaire en premier lieu. Espérons que cela aidera les autres!