我正在构建一个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令牌获取用户信息。
答案 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"));