如何使用使用GoogleAuthUtil类获取的令牌来获取用户信息?

时间:2015-06-04 07:47:38

标签: java android oauth-2.0 google-oauth

我正在构建一个Android应用,我想使用他们的Google帐户对用户进行身份验证。我正在使用GoogleAuthUtil类从谷歌获取令牌,如下所示

protected String fetchToken() throws IOException{
    try {
        return GoogleAuthUtil.getToken(act, email, scope);
    } catch (GoogleAuthException e) {
        e.printStackTrace();
    }
    return null;
}

此处,act是当前活动,email是使用accountpicker获得的值,scope = audience:server:client_id:X其中X是Web应用程序的客户ID。

我得到了一些长期结果,例如eyJhbGciOiJSUzI1NiIsImtpZCI6ImFhMTkwMjZlYTgwNjYxNjI4ZjdiYzM5OTgyNDczZTFlYTE0NTVhNWQifQ.eyJpc3MiOiJhY2Nvd .......作为id令牌,但我不知道如何使用此ID令牌从中检索用户信息。

请帮助我了解如何从ID令牌获取用户信息。

1 个答案:

答案 0 :(得分:0)

经过一番研究,我得到了关注。

ID令牌用于验证用户的真实性,访问令牌用于了解用户即将登录的电子邮件ID的信息。访问令牌的获取方式与id令牌相同,如下所示。

 oAuthscopes = "oauth2:"+"https://www.googleapis.com/auth/userinfo.email"+" "+"https://www.googleapis.com/auth/plus.login";

protected String fetchAccessToken() throws IOException{
    try {
        return GoogleAuthUtil.getToken(act, email, oAuthscopes);
    }
    catch(GooglePlayServicesAvailabilityException e){
        act.handleException(e);
    }
    catch(UserRecoverableAuthException e){
        act.handleException(e);
    }
    catch (GoogleAuthException e) {
        e.printStackTrace();
    }
    return null;
}

注意oAtuthScopes的calue。您可以根据应用程序的要求指定任意数量的带有空格的范围,以请求用户许可。

现在,要从这些范围获取用户信息,请执行以下操作。

URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token="+accessToken);
        StringBuffer val = returnJson(url);
url = new URL("https://www.googleapis.com/oauth2/v1/tokeninfo?alt=json&id_token="+idToken);
        StringBuffer valVerify = returnJson(url);

方法returnjSon(URL)是

StringBuffer returnJson(URL url) throws IOException {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    InputStream iStream = conn.getInputStream();

    BufferedReader read = new BufferedReader(new InputStreamReader(iStream));

    String line;
    StringBuffer val = new StringBuffer();

    while((line = read.readLine())!=null){
        val.append(line);
    }

    return val;
}

访问令牌将返回类似的内容,

{“id”:“10271045940xxxxxx”,“email”:“xxxx”, “verified_email”:true,“name”:“XXXX”,“given_name”:“XXXX”, “family_name”:“XXXX”,“link”:“https://plus.google.com/+XXXX”, “picture”:“https://lh4.googleusercontent.com/xxxx”,“gender”:“male”,“locale”:“XX”}

id令牌会返回类似的东西。您可以在logcat中打印它以进行预览。

然后,

        JSONObject reader = new JSONObject(val.toString());

        String email = (String)reader.get("email"));
        String name = (String)reader.get("name"));

        reader = new JSONObject(valVerify.toString());
        boolean verified = reader.getBoolean("email_verified"));