Google認証を使用してユーザーにログインするIonicアプリがあります。 id_tokenとaccess_tokenをノードサーバーに渡します。ノードサーバーはid_tokenを使用してユーザーを確認し、access_tokenはユーザーのGoogleアカウントに呼び出しを行います。https://www.googleapis.com/oauth2/v4/tokenは常にunsupported_grant_typeを返します/ Androidではgrant_typeが無効です
ブラウザからIonicアプリを使用すると、gapiを使ってユーザーをログインさせてトークンを取得しますが、これはうまくいきます。 iOSとAndroidの場合、公式のCordovaプラグイン(cordova-plugin-googleplus)を使用します。
iOSの場合、プラグインは常に両方のトークンを返し、すべてが良好です。 Androidの場合、access_tokenは返されません。私は指示に従ってserverAuthCodeを取得しました。代わりにserverAuthCodeも動作します。 access_tokenのserverAuthCodeを交換するのは、問題がある場所です。
公式のGoogle命令は、私がserverAuthCodeを取得するための呼び出しで使用されるのclient_idとclient_secretを供給サンプル要求
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
を提供しています。私は、 "4 /"で始まるserverAuthCodeが正しく表示されていることを確認しました。 redirect_uriは少し謎です。私は、client_id、null、この例のURI、およびWebからの多くの奇妙な提案に関連付けられている許可されたリダイレクトURIを含む、私が考えることができるすべてを試しました。何があって、アプリからかSOAPUIからか、私は
{
"error": "unsupported_grant_type",
"error_description": "Invalid grant_type: "
}
This postを受けるREDIRECT_URIがserverAuthCodeを取得するための呼び出しで使用されることを一致しなければならないことを言っているようです。しかし、これはプラグインによって設定され、コードを見ればどこにも設定されていないことがわかります。
私の質問は次のとおりです。Androidでaccess_tokenを取得する方法を教えてください。上記の投稿が正しい場合、プラグインがredirect_uriをどのように使用しているかを知る方法はありますか?それとも、access_tokenを取得する別の方法がありますか? This issueは、プラグインがaccess_tokenを直接返すようにするためのハックを提供していますが、GoogleがserverAuthCodeに代わって非難していることを意味しているため、serverAuthCodeからaccess_codeを取得するのが最善の方法です。
(アップデート:また、上記の回避策は、我々の場合には動作しませんでしたので、我々はこの時点で立ち往生しているように見える)
Googleの指示[こちら](https://developers.google.com/identity/protocols/OAuth2WebServer#exchange-authorization-code)このタグを監視するユーザーは誰ですか? – Adam