首頁 > 後端開發 > Golang > 如何在 Go 中輕鬆解析和驗證 AWS Cognito JWT 令牌?

如何在 Go 中輕鬆解析和驗證 AWS Cognito JWT 令牌?

Barbara Streisand
發布: 2024-12-28 08:33:11
原創
296 人瀏覽過

How to Easily Parse and Verify AWS Cognito JWT Tokens in Go?

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

挑戰

從以下機構頒發的JWT 令牌中驗證和提取資訊由於缺乏合適的Go 軟體包,AWS Cognito 可能是一項艱鉅的任務。儘管使用了常用的庫,但該過程仍然很複雜。本文旨在透過使用適當的函式庫提供逐步解決方案來簡化此任務。

驗證的關鍵:公鑰

驗證 JWT 令牌,對應的公鑰是必不可少的。這些金鑰可以從AWS Cognito 提供的JWK(JSON Web Key)URL 取得:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
登入後複製

解析金鑰並驗證令牌

建議的方法是串聯使用jwk 和jwt-go 函式庫。 jwx 簡化了從JWK URL 解析公鑰,而jwt-go 協助處理JWT 令牌:

// Parse public keys
keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)

// Verify JWT token
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    // Check signing method
    if _, ok := token.Method.(*jwt.SigningMethodRS256); !ok {
        return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
    }

    // Extract key ID ("kid") from JWT header
    kid, ok := token.Header["kid"].(string)
    if !ok {
        return nil, errors.New("kid header not found")
    }

    // Find the public key
    keys := keySet.LookupKeyID(kid)
    if !ok {
        return nil, fmt.Errorf("key with specified kid is not present in jwks")
    }

    // Parse public key
    var publickey interface{}
    err = keys.Raw(&publickey)
    if err != nil {
        return nil, fmt.Errorf("could not parse pubkey")
    }

    return publickey, nil
登入後複製

Go 中重新獲得簡單性

透過利用jwx和jwt-go 函式庫,驗證和解析AWS Cognito 頒發的JWT 令牌的過程變得顯著簡化。這種方法為 Go 中的身份驗證和授權提供了清晰簡潔的解決方案。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板