
本文将介绍如何使用 Go 语言验证从 Android 应用获取的 Google ID Token,并提取其中的 payload。我们将使用 google-api-go-client 库的 oauth2/v2 包来实现这一目标,并针对 Google App Engine 环境进行必要的配置调整,确保验证过程顺利进行。
要验证 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 和一些配置选项。
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: %s\n", tokenInfo.UserId)
fmt.Printf("Email: %s\n", tokenInfo.Email)
fmt.Printf("Audience: %s\n", tokenInfo.Audience)
}如果在 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
}通过使用 google-api-go-client 库的 oauth2/v2 包,可以方便地在 Go 语言中验证 Google ID Token,并获取其中的 Payload 信息。对于 Google App Engine 环境,需要进行一些额外的配置以允许访问外部 API。 遵循本文的步骤,你就可以轻松地在你的 Go 后端中集成 Google ID Token 验证功能。
以上就是使用 Go 验证 Google ID Token的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号