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

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

Mary-Kate Olsen
發布: 2024-12-27 08:32:14
原創
215 人瀏覽過

How to Verify AWS Cognito JWT Tokens in Go?

在Go 中驗證AWS Cognito JWT 令牌

簡介

從J🎜>

從JWT 驗證和驗證提取資訊Amazon Cognito 發行的令牌在Go 中可能是一個挑戰。本文提供了有效處理此任務的簡明指南。

先決條件

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

AWS Cognito 使用者必須從JWKS 終端節點擷取公用JSON Web 金鑰(JWK) 集:

解析JWK並驗證JWT
  • 要解析 JWK 集並驗證JWT,請考慮使用:
[jwk](https://github.com/lestrrat-go/jwx):對於JWK解析

[jwt-go](https://github.com/dgrijalva/jwt-go):用於JWT驗證

  1. 實作
  2. 使用以下指令取得並解析 JWK 集jwk.Fetch()。
  3. 使用 jwt.Parse() 解析 JWT 令牌。
  4. 從JWT 標頭中提取「kid」字段,以標識JWK 集中匹配的公鑰.
使用keySet.LookupKeyID(kid) 檢索與「kid」關聯的公鑰header.

解析JWT token 時將公鑰分配給func(token *jwt.Token) (interface{}, error) 回呼。

package main

import (
    "fmt"

    jwt "github.com/dgrijalva/jwt-go"
    "github.com/lestrrat-go/jwx/jwk"
)

func main() {
    // Replace with your Cognito token and Cognito JWKS endpoint
    tokenString := "YOUR_JWT_TOKEN"
    endpoint := "YOUR_COGNITO_JWKS_ENDPOINT"

    keySet, err := jwk.Fetch(endpoint)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Parse the JWT token and validate its signature using the public key
    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
    })

    if err != nil {
        fmt.Println(err)
        return
    }

    // Access the claims from the validated JWT token
    claims := token.Claims.(jwt.MapClaims)
    fmt.Println("User ID: ", claims["sub"])
}
登入後複製

範例程式碼

結論透過利用jwk 和jj-wtgo 等庫,開發jwt-go人員可以在Go 中有效地驗證和檢索Cognito JWT令牌中的數據,提供一種安全、便捷的方式來對應用程式中的使用者進行身份驗證。

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

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