Google Play サービスを使用して、Android アプリで Google 認証を機能させる際に問題が発生しています。まず、ライブラリで提供されているサンプルを使用して、以下のスコープを使用してトークンを取得しました
GoogleAuthUtil.getToken(getActivity(), mEmail,"oauth2:https://www.googleapis.com/auth/userinfo.profile");
次に、トークンを使用してユーザーに関する詳細情報を取得しました。
URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + token);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
それはうまくいきました。次に、Verifying Back-End Calls from Android Apps post on Google Developers Blog を使用して、Web サーバーに対してアプリ ユーザーを認証しました。だから私は getToken のスコープを
audience:server:client_id:<webapp_clientId_for_localhost>.apps.googleusercontent.com
また、この記事のチェッカーと同様のチェッカーを使用して、サーバー側でオーディエンスと clientId (Android クライアント ID) を確認しました。これも機能しましたが、ユーザーに関する詳細情報 (姓名) を Android アプリまたは Web アプリから取得しようとすると、userinfo API を使用して次のように取得します。
{ "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": " Authorization" } ], "code": 401, "message": "Invalid Credentials" } }
私が使用するコードは次のとおりです。
URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Authorization", "OAuth " + token);
con.setRequestProperty("ContentType", "application/json; charset=UTF-8");
userinfoが機能しない理由は何ですか? スコープに追加する必要があるものは他にありますか?