【问题标题】:Google Access token server side validation for android app安卓应用程序的谷歌访问令牌服务器端验证
【发布时间】:2013-10-28 23:14:10
【问题描述】:

我正在开发基于与服务器通信的android应用程序,我想使用Google(g+)身份验证机制。

基本上,我认为它应该像这样工作:

  1. 在我的 Android 应用中,用户使用他的电子邮件和密码登录 Google。
  2. 用户允许访问他的相关 Google 应用程序的数据。
  3. 成功登录后,我的 android 应用收到访问令牌。
  4. 在与我的服务器进一步通信时,我的 android 应用程序应使用收到的 Google 访问令牌(例如:在查询中)。
  5. 当我的服务器收到来自 android 应用程序的一些带有访问令牌的查询时,它应该询问 Google 这个令牌是否有效(以及对谁有效),如果是,服务器应该假定用户已通过 Google 进行身份验证。

我的问题是:如果给定的访问令牌有效,服务器应该如何询问 Google?我想我应该以某种方式检查令牌是否对我的 android 应用有效。

我已经尝试了许多对 Google API 的 Google 查询,但我发现这些查询都没有按我的预期工作。可以举个例子吗?

【问题讨论】:

  • 我不确定这个问题。由于您的应用程序直接与谷歌服务器通信,您的个人服务器在哪里出现?您可以在您的 android 应用程序本身中检查令牌的有效性。你能详细说明一下吗?
  • 我已经从客户端应用程序(android)中的 g+ 获取访问令牌,我将该访问令牌发送到我的服务器,在该服务器中我想重新验证从 Google 触发的访问令牌与否,我需要获取用户信息...使用该访问令牌....感谢您的回复
  • 尝试任何操作。像搜索或上传或任何令牌有效时,您将收到响应,否则您将收到“未经授权”的响应。通常,令牌每隔一小时或当用户明确更改谷歌密码时过期。如果您已正确完成身份验证,则您必须收到带有访问令牌的刷新令牌。使用此刷新令牌获取新的访问令牌。
  • @BhargavMethuku 您能否提供您获取访问令牌并发送到服务器的代码。此外,我想您也必须验证它。你能帮帮我吗?

标签: java android spring-mvc oauth-2.0 google-plus


【解决方案1】:

您可以验证access_token 是否有效。

您需要向 API 端点发送GET 请求:https://www.googleapis.com/oauth2/v1/tokeninfo,并在请求中包含您的 access_token。

你可以这样试试:

 String connection = new ConnectionService().connectionGoogle("https://www.googleapis.com/oauth2/v1/tokeninfo", "access_token=" + "YOUR_EXISTING_ACCESS_TOKEN");
        System.out.println(connection);

上面代码中用到的方法有:

public static String connectionGoogle(String url, String parameter) throws MalformedURLException, ProtocolException, IOException {

        URL url1 = new URL(url);
        HttpURLConnection request1 = (HttpURLConnection) url1.openConnection();
        request1.setRequestMethod("GET");
        request1.setDoOutput(true);
        request1.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        OutputStreamWriter wr = new OutputStreamWriter(request1.getOutputStream());
        wr.write(parameter);
        wr.flush();
        request1.connect();
        String responseBody = convertStreamToString(request1.getInputStream());
        wr.close();
        return responseBody;
    }

    private static String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line).append("\n");
            }
        } catch (IOException e) {
        } finally {
            try {
                is.close();
            } catch (IOException e) {
            }
        }

        return sb.toString();
    }

【讨论】:

  • 您好,感谢您的回复!但我们期待 UserInfo ...但现在我正在使用 Googlecredential Class 进行验证...
  • @BhargavMethuku 这样你现在就可以获取用户信息了。对吧??
  • 我的服务器是用node.js写的。我想将访问令牌发送到我的服务器,然后在那里验证它。!该怎么做?
【解决方案2】:

您可以使用 tokeninfo 端点来检查令牌(访问或 ID 令牌)。如果你只是想玩 API,可以使用TokenInfo API from the API Explorer

您可以使用 Google 为 OAuth v2 提供的库来执行 API 调用。

您还可以按照OAuth v2 Playground documentation 中的说明形成 URL 并执行 GET 查询。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2016-07-25
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多