亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

驗(yàn)證 Google ID Token 的 Go 語(yǔ)言教程

DDD
發(fā)布: 2025-10-08 11:03:34
原創(chuàng)
996人瀏覽過(guò)

驗(yàn)證 google id token 的 go 語(yǔ)言教程

本文介紹了如何使用 Go 語(yǔ)言在 AppEngine 后端驗(yàn)證從 Android 客戶端獲取的 Google ID Token。通過(guò) google-api-go-client 庫(kù)的 oauth2/v2 包,可以輕松驗(yàn)證 Token 的有效性并提取 payload 信息。同時(shí),本文還提供了在 AppEngine 環(huán)境下使用該庫(kù)所需的必要配置調(diào)整。

在 Android 應(yīng)用中,你可以按照 Google 官方博客上的教程獲取用戶的 ID Token (例如:http://ipnx.cn/link/46093577f6da15ca5de89e2752b62b6a)。接下來(lái),我們需要在 Go AppEngine 后端驗(yàn)證這個(gè) Token,并提取用戶信息。

使用 google-api-go-client 驗(yàn)證 ID Token

google-api-go-client 庫(kù)提供了方便的工具來(lái)驗(yàn)證 Google ID Token。 具體來(lái)說(shuō),我們可以使用 oauth2/v2 包中的功能。

首先,確保你已經(jīng)安裝了 google-api-go-client 庫(kù):

go get google.golang.org/api/oauth2/v2
登錄后復(fù)制

然后,你可以使用以下代碼驗(yàn)證 ID Token:

云雀語(yǔ)言模型
云雀語(yǔ)言模型

云雀是一款由字節(jié)跳動(dòng)研發(fā)的語(yǔ)言模型,通過(guò)便捷的自然語(yǔ)言交互,能夠高效的完成互動(dòng)對(duì)話

云雀語(yǔ)言模型54
查看詳情 云雀語(yǔ)言模型
package main

import (
    "context"
    "fmt"
    "log"
    "net/http"

    "google.golang.org/api/oauth2/v2"
    "google.golang.org/api/option"
)

func verifyIDToken(idToken string) (*oauth2.Tokeninfo, error) {
    ctx := context.Background()

    // 創(chuàng)建 oauth2 v2 服務(wù)的客戶端
    oauth2Service, err := oauth2.NewService(ctx, option.WithoutAuthentication())
    if err != nil {
        return nil, fmt.Errorf("failed to create oauth2 service: %v", err)
    }

    // 調(diào)用 Tokeninfo 方法驗(yàn)證 ID Token
    tokenInfoCall := oauth2Service.Tokeninfo()
    tokenInfoCall.IdToken(idToken)

    tokenInfo, err := tokenInfoCall.Do()
    if err != nil {
        return nil, fmt.Errorf("failed to verify id token: %v", err)
    }

    return tokenInfo, nil
}

func handler(w http.ResponseWriter, r *http.Request) {
    idToken := r.URL.Query().Get("id_token") // 從請(qǐng)求中獲取 ID Token
    if idToken == "" {
        http.Error(w, "Missing id_token parameter", http.StatusBadRequest)
        return
    }

    tokenInfo, err := verifyIDToken(idToken)
    if err != nil {
        http.Error(w, fmt.Sprintf("Failed to verify token: %v", err), http.StatusInternalServerError)
        return
    }

    // 驗(yàn)證成功,提取用戶信息
    fmt.Fprintf(w, "User ID: %s\n", tokenInfo.UserId)
    fmt.Fprintf(w, "Email: %s\n", tokenInfo.Email)
    fmt.Fprintf(w, "Audience: %s\n", tokenInfo.Audience)
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}
登錄后復(fù)制

代碼解釋:

  1. 導(dǎo)入必要的包: 導(dǎo)入 oauth2/v2 包以及其他必要的包,如 context、fmt、log 和 net/http。
  2. verifyIDToken 函數(shù):
    • 接受一個(gè) ID Token 字符串作為輸入。
    • 創(chuàng)建一個(gè) oauth2.NewService 實(shí)例,用于與 Google OAuth2 服務(wù)交互。 option.WithoutAuthentication() 表示我們不需要客戶端憑據(jù)來(lái)進(jìn)行 token 驗(yàn)證。
    • 調(diào)用 Tokeninfo 方法,并傳入 ID Token。
    • 執(zhí)行 Do 方法來(lái)發(fā)送請(qǐng)求并獲取 Tokeninfo 結(jié)果。
    • 如果驗(yàn)證失敗,返回錯(cuò)誤信息。
    • 如果驗(yàn)證成功,返回 Tokeninfo 結(jié)構(gòu)體,其中包含用戶信息。
  3. handler 函數(shù):
    • 從 HTTP 請(qǐng)求的查詢參數(shù)中獲取 id_token。
    • 調(diào)用 verifyIDToken 函數(shù)驗(yàn)證 ID Token。
    • 如果驗(yàn)證成功,從 Tokeninfo 結(jié)構(gòu)體中提取用戶信息,并將其寫入 HTTP 響應(yīng)。
    • 如果驗(yàn)證失敗,返回 HTTP 錯(cuò)誤。
  4. main 函數(shù):
    • 注冊(cè) HTTP handler。
    • 啟動(dòng) HTTP 服務(wù)器。

在 AppEngine 中使用 google-api-go-client 的注意事項(xiàng)

在 AppEngine 環(huán)境中使用外部 API 時(shí),可能需要進(jìn)行一些配置調(diào)整。 你可以參考這篇文章:http://ipnx.cn/link/e321abd135c19b6d4cee4da276d4970e。 通常,這涉及到設(shè)置正確的 HTTP 客戶端,并確保 AppEngine 能夠訪問外部服務(wù)。 具體步驟可能包括:

  • 使用 AppEngine 的 urlfetch 包來(lái)發(fā)起 HTTP 請(qǐng)求,而不是標(biāo)準(zhǔn)的 net/http 包。
  • 確保你的 AppEngine 應(yīng)用具有訪問 Google OAuth2 服務(wù)的權(quán)限。

總結(jié)

通過(guò)使用 google-api-go-client 庫(kù)的 oauth2/v2 包,你可以方便地在 Go AppEngine 后端驗(yàn)證從 Android 客戶端獲取的 Google ID Token。 記住,在 AppEngine 環(huán)境中使用外部 API 時(shí),可能需要進(jìn)行一些配置調(diào)整。 驗(yàn)證成功后,你可以安全地提取用戶信息,并用于身份驗(yàn)證和授權(quán)。

以上就是驗(yàn)證 Google ID Token 的 Go 語(yǔ)言教程的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)