
本文将介绍如何使用 Go 语言验证从 Android 应用获取的 Google ID Token,并提取其中的 payload。我们将使用 google-api-go-client 库的 oauth2/v2 包来实现这一目标,并针对 Google App Engine 环境进行必要的配置调整,确保验证过程顺利进行。
验证 Google ID Token 的步骤
要验证 Google ID Token 并获取 payload,需要以下几个步骤:
安装 google-api-go-client 库:
首先,你需要安装 google-api-go-client 库。可以使用 go get 命令:
go get google.golang.org/api/oauth2/v2
导入必要的包:
在你的 Go 代码中,导入以下必要的包:
import ( "context" "fmt" "log" "google.golang.org/api/oauth2/v2" "google.golang.org/api/option")
创建 OAuth2 服务:
使用 oauth2/v2 包创建一个 OAuth2 服务。你需要提供一个 context.Context 和一些配置选项。
Otter.ai
一个自动的会议记录和笔记工具,会议内容生成和实时转录
91 查看详情
func verifyToken(idToken string) (*oauth2.Tokeninfo, error) { ctx := context.Background() // 如果在 App Engine 环境中运行,需要配置 transport // 参见:http://golangtutorials.blogspot.co.il/2011/11/using-external-api-in-go-appengine.html // 例如: // client, err := google.DefaultClient(ctx, oauth2.Oauth2ReadonlyScope) // if err != nil { // return nil, err // } // srv, err := oauth2.New(client) srv, err := oauth2.NewService(ctx, option.WithoutAuthentication()) // For non-App Engine if err != nil { log.Printf("Failed to create oauth2 service: %v", err) return nil, err } tokenInfoCall := srv.Tokeninfo() tokenInfoCall.IdToken(idToken) tokenInfo, err := tokenInfoCall.Do() if err != nil { log.Printf("Failed to verify ID token: %v", err) return nil, err } return tokenInfo, nil}
验证 ID Token:
调用 Tokeninfo 方法,传入 ID Token。这将验证 Token 的有效性。
获取 Payload:
如果 Token 验证成功,你可以从返回的 Tokeninfo 结构体中获取 Payload 信息,例如 UserId、Email 等。
func main() { idToken := "YOUR_ID_TOKEN" // 替换为你的 ID Token tokenInfo, err := verifyToken(idToken) if err != nil { log.Fatalf("Failed to verify token: %v", err) } fmt.Printf("User ID: %sn", tokenInfo.UserId) fmt.Printf("Email: %sn", tokenInfo.Email) fmt.Printf("Audience: %sn", tokenInfo.Audience)}
在 Google App Engine 环境中使用
如果在 Google App Engine 环境中使用,需要进行一些额外的配置。App Engine 默认情况下不允许直接访问外部 API。你需要使用 google.DefaultClient 获取一个经过配置的 HTTP 客户端,并将其传递给 oauth2.NewService 方法。
import ( "context" "fmt" "log" "google.golang.org/api/oauth2/v2" "google.golang.org/api/option" "golang.org/x/oauth2/google")func verifyToken(idToken string) (*oauth2.Tokeninfo, error) { ctx := context.Background() client, err := google.DefaultClient(ctx, oauth2.Oauth2ReadonlyScope) if err != nil { return nil, err } srv, err := oauth2.NewService(ctx, option.WithHTTPClient(client)) if err != nil { log.Printf("Failed to create oauth2 service: %v", err) return nil, err } tokenInfoCall := srv.Tokeninfo() tokenInfoCall.IdToken(idToken) tokenInfo, err := tokenInfoCall.Do() if err != nil { log.Printf("Failed to verify ID token: %v", err) return nil, err } return tokenInfo, nil}
注意事项
确保你的 Android 应用正确地获取了 ID Token。替换示例代码中的 YOUR_ID_TOKEN 为实际的 ID Token。在 App Engine 环境中,确保你的应用有访问 oauth2.Oauth2ReadonlyScope 的权限。始终处理错误,并记录日志以便调试。
总结
通过使用 google-api-go-client 库的 oauth2/v2 包,可以方便地在 Go 语言中验证 Google ID Token,并获取其中的 Payload 信息。对于 Google App Engine 环境,需要进行一些额外的配置以允许访问外部 API。 遵循本文的步骤,你就可以轻松地在你的 Go 后端中集成 Google ID Token 验证功能。
以上就是使用 Go 验证 Google ID Token的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1134469.html
微信扫一扫
支付宝扫一扫