Android应用的Google Access令牌服务器端验证

时间:2013-10-20 13:34:20

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

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

基本上,我认为它应该是这样的:

  1. 在我的Android应用中,用户使用他的电子邮件和密码登录Google。
  2. 用户可以访问相关Google应用程序的数据。
  3. 我的Android应用程序在成功登录后会收到访问令牌。
  4. 在与我的服务器进一步沟通时,我的Android应用程序应使用收到的Google访问令牌(例如:在查询中)。
  5. 当我的服务器从Android应用程序收到一些带有访问令牌的查询时,它应该向Google询问此令牌是否有效(以及是谁),如果是,服务器应该假定该用户已通过Google验证。
  6. 我的问题是:如果给定的访问令牌有效,服务器应该如何询问Google?我想我应该以某种方式检查令牌是否对我的Android应用程序有效。

    我已经尝试了许多针对Google API的Google查询,但我发现没有任何效果。你能举个例子吗?

2 个答案:

答案 0 :(得分:1)

您可以验证access_token是否有效。

您需要将GET请求发送到api终点: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();
    }

答案 1 :(得分:0)

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

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

您还可以按照OAuth v2 Playground documentation

中的说明形成网址并执行GET查询