首頁 >後端開發 >Golang >如何在 Go 中驗證來自 AWS Cognito 的 JWT 令牌?

如何在 Go 中驗證來自 AWS Cognito 的 JWT 令牌?

Linda Hamilton
Linda Hamilton原創
2024-12-15 01:40:11763瀏覽

How to Validate JWT Tokens from AWS Cognito in Go?

在Go 中驗證來自AWS Cognito 的JWT 令牌

本文解決了從Amazon Cognito 頒發的JWT 令牌驗證和令牌驗證的挑戰。討論了與 Google 身份驗證和 Cognito 令牌端點的整合過程以及常見陷阱。

取得公鑰

要驗證 JWT 令牌,需要公鑰。 Cognito 在以下位置提供了包含公鑰的JSON Web 金鑰(JWK) 集:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/ jwks.json

這個檔案結構可以手動解析產生公鑰,但是使用像jwx這樣的函式庫(https://github.com/lestrrat-go/jwx) 簡化了流程。

使用JWT-Go 進行令牌驗證

一旦公鑰可用,jwt可以利用-go (https://github.com/dgrijalva/jwt-go ) 來驗證令牌。以下步驟概述了這個過程:

  1. 使用 jwx 解析 JWK 集:
keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)
  1. 使用 jwt-go 解析令牌時,使用 " kids"欄位來尋找適當的金鑰驗證:
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    if _, ok := token.Method.(*jwt.SigningMethodRS256); !ok {
        return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
    }
    kid, ok := token.Header["kid"].(string)
    if !ok {
        return nil, errors.New("kid header not found")
    }
    keys := keySet.LookupKeyID(kid)
    if !ok {
        return nil, fmt.Errorf("key with specified kid is not present in jwks")
    }
    var publickey interface{}
    err = keys.Raw(&publickey)
    if err != nil {
        return nil, fmt.Errorf("could not parse pubkey")
    }
    return publickey, nil
})

透過以下步驟,開發人員可以在Go 中有效驗證和解析來自AWS Cognito 的JWT 令牌,確保令牌的真實性和完整性。

以上是如何在 Go 中驗證來自 AWS Cognito 的 JWT 令牌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn