【问题标题】:Getting user info in an Android Google Authentication with Server Side Verification setup使用服务器端验证设置在 Android Google 身份验证中获取用户信息
【发布时间】:2013-02-17 14:07:20
【问题描述】:

我在使用 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 上的 Verifying Back-End Calls from Android Apps 帖子向我的 Web 服务器验证应用程序用户。所以我用

替换了getToken的范围
audience:server:client_id:<webapp_clientId_for_localhost>.apps.googleusercontent.com

并使用与文章中类似的检查器来验证服务器端的受众和 clientId(Android 客户端 ID)。这也有效,但是,如果我尝试使用 userinfo API 从 android 应用程序或 Web 应用程序获取有关用户(名字和姓氏)的更多信息,我会得到:

{“错误”:{“错误”:[{ “域”:“全球”, “原因”:“authError”, "message": "无效凭证", “位置类型”:“标题”, “位置”:“授权”}],“代码”: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");

知道为什么用户信息不起作用吗?还有什么我应该添加到范围的吗?

【问题讨论】:

    标签: android google-oauth google-play-services


    【解决方案1】:

    您用于后端验证的令牌适用于您的服务器,而带有 oauth2: 的令牌适用于 Google。此时没有同时请求两个令牌的机制,因此您需要对 GoogleAuthUtil 进行两次调用。在一个同意步骤之后,您应该能够请求两者(一次一个)。实际上,oauth2: 令牌的使用频率应该较低,因为您可以将用户的个人资料数据与您在家庭服务器中从他们那里获得的帐户相关联。

    【讨论】:

    • 是的,这就是我最终所做的。
    • 嘿@breno,这曾经对我有用,但就在几天前它停止工作,现在它抛出这个错误 com.google.android.gms.auth.GoogleAuthException: Unknown。知道为什么吗?我的瞄准镜有问题吗? gist.github.com/lawloretienne/7351151
    • 糟糕,没有注意到这个问题。您是否仍然遇到此问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2011-11-04
    • 2020-04-22
    • 2014-10-03
    • 2011-10-06
    • 2019-06-10
    • 2013-06-18
    相关资源
    最近更新 更多