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