我在使用 Google Play 服务让 Google 身份验证在我的 android 应用程序中工作时遇到了一些问题。首先,我使用库提供的示例使用以下范围获取令牌
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();
那行得通。然后,我使用Google Developers Blog 上的“验证来自 Android 应用程序的后端调用”帖子向我的 Web 服务器验证应用程序用户。所以我将 getToken 的范围替换为
audience:server:client_id:<webapp_clientId_for_localhost>.apps.googleusercontent.com
并使用与文章中类似的检查器来验证服务器端的受众和 clientId(Android 客户端 ID)。这也有效,但是,如果我尝试使用 userinfo API 从 android 应用程序或 Web 应用程序获取有关用户(名字和姓氏)的更多信息,我会得到:
{“错误”:{“错误”:[{“域”:“全局”,“原因”:“authError”,“消息”:“无效凭据”,“位置类型”:“标题”,“位置”:“授权”}],“代码”:401,“消息”:“无效凭证”}}
我使用的代码是:
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 不起作用吗?还有什么我应该添加到范围的吗?