为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过google idToken获取userInfo

如何通过google idToken获取userInfo

Go
沧海一幻觉 2023-03-29 15:16:22
现在我有一个 google Idtoken,我想通过令牌获取用户信息,从这个页面我找到了如何验证和获取 tokenInfo,在 Go 中验证 Google 登录 ID 令牌 ,但 tokenInfo 不包含用户图片。我应该怎么做才能获取用户信息?
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

id_token 是一个 jwt。我首先使用validating-google-sign-in-id-token-in-go检查令牌是否可用。

authService, err := oauth2.New(http.DefaultClient)

if err != nil {

    return err

}

// check token is valid

tokenInfoCall := authService.Tokeninfo()

tokenInfoCall.IdToken(idToken)

ctx, cancelFunc := context.WithTimeout(context.Background(), 1*time.Minute)

defer cancelFunc()

tokenInfoCall.Context(ctx)

tokenInfo, er := tokenInfoCall.Do()

if err != nil {

    // invalid token

}

然后我将 id_token 解析为 jwt,将有效负载解码为 json。


token, _, err := new(jwt.Parser).ParseUnverified(idToken, &TokenInfo{})

if tokenInfo, ok := token.Claims.(*TokenInfo); ok {

    return tokenInfo, nil

} else {

    // parse token.payload failed

}


// TokenInfo struct

type TokenInfo struct {

        Iss string `json:"iss"`

    // userId

    Sub string `json:"sub"`

    Azp string `json:"azp"`

    // clientId

    Aud string `json:"aud"`

    Iat int64  `json:"iat"`

    // expired time

    Exp int64 `json:"exp"`


    Email         string `json:"email"`

    EmailVerified bool   `json:"email_verified"`

    AtHash        string `json:"at_hash"`

    Name          string `json:"name"`

    GivenName     string `json:"given_name"`

    FamilyName    string `json:"family_name"`

    Picture       string `json:"picture"`

    Local         string `json:"locale"`

    jwt.StandardClaims

}

价值如:


{

 // These six fields are included in all Google ID Tokens.

 "iss": "https://accounts.google.com",

 "sub": "110169484474386276334",

 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",

 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",

 "iat": "1433978353",

 "exp": "1433981953",


 // These seven fields are only included when the user has granted the "profile" and

 // "email" OAuth scopes to the application.

 "email": "testuser@gmail.com",

 "email_verified": "true",

 "name" : "Test User",

 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",

 "given_name": "Test",

 "family_name": "User",

 "locale": "en"

}

然后我得到了照片。


查看完整回答
反对 回复 2023-03-29
  • 1 回答
  • 0 关注
  • 338 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信