我有以下JavaScript代码
auth2.grantOfflineAccess().then(function(codeData) {
if (!codeData) {
alert("Something went wrong");
return;
}
$.post("/do/signIn/google", codeData, function() { ... });
});
我发送了Google登录golang网络应用的代码。
我成功地从POST https://www.googleapis.com/oauth2/v4/token
获得了访问令牌。
我的问题是,我无法获取用户的个人资料信息(例如电子邮件,显示名称等)。
我已尝试向GET https://www.googleapis.com/auth/userinfo.profile?access_token=xxx
发送请求,但我收到空回复(空白正文)。
答案 0 :(得分:0)
您必须解码POST https://www.googleapis.com/oauth2/v4/token
返回的Google ID令牌才能将其转换为Google+ ID,然后您可以使用GET https://www.googleapis.com/plus/v1/people/[gplusID]?access_token=[accessToken]
使用Go,您可以使用以下内容解码google ID令牌 功能。通常,验证ID令牌至关重要 在使用它之前,但是因为你直接与之通信 Google通过中间免费HTTPS渠道并使用您的客户端 向Google证明自己的秘密,你可以自信 您收到的令牌真的来自Google并且有效。如果你的 服务器将ID令牌传递给应用程序的其他组件,它是 其他组件验证令牌非常重要 在使用之前。
使用Go,您可以使用以下功能解码ID令牌。
func decodeGoogleIDToken(idToken string) (gplusID string, err error) {
var set struct {
Sub string
}
if idToken != "" {
// Check that the padding is correct for a base64decode
parts := strings.Split(idToken, ".")
if len(parts) < 2 {
return "", fmt.Errorf("Malformed ID token")
}
// Decode the ID token
s := parts[1]
switch len(s) % 4 {
case 2:
s += "=="
case 3:
s += "="
}
b, err := base64.URLEncoding.DecodeString(s)
if err != nil {
return "", fmt.Errorf("Malformed ID token: %v", err)
}
err = json.Unmarshal(b, &set)
if err != nil {
return "", fmt.Errorf("Malformed ID token: %v", err)
}
}
return set.Sub, nil
}
查看示例