ホームページ >バックエンド開発 >Golang >Go で AWS Cognito JWT トークンを確認する方法は?

Go で AWS Cognito JWT トークンを確認する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 08:32:14217ブラウズ

How to Verify AWS Cognito JWT Tokens in Go?

Go での AWS Cognito JWT トークンの検証

概要

JWT からの情報の検証と抽出Amazon Cognito によって発行されたトークンは、Go では困難になる可能性があります。この記事では、このタスクを効果的に処理するための簡潔なガイドを提供します。

前提条件

AWS Cognito ユーザーは、JWKS エンドポイントからパブリック JSON Web キー (JWK) セットを取得する必要があります。

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

JWK の解析と検証JWT

JWK セットを解析して JWT を検証するには、次の使用を検討してください:

  • [jwk](https://github.com/lestrat-go/jwx): JWKの場合parsing
  • [jwt-go](https://github.com/dgrijalva/jwt-go): JWT 検証用

実装

  1. 次を使用して JWK セットを取得して解析しますjwk.Fetch().
  2. jwt.Parse() を使用して JWT トークンを解析します。
  3. JWT ヘッダーから「kid」フィールドを抽出して、JWK セット内の一致する公開キーを識別します.
  4. keySet.LookupKeyID(kid) を使用して、「kid」に関連付けられた公開キーを取得します。 header.
  5. JWT トークンの解析時に公開キーを 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 や jwt-go などのライブラリを利用することで、開発者は Go で効率的に Cognito JWT トークンのデータを検証および取得できます、アプリケーションでユーザーを認証するための安全かつ便利な方法を提供します。

以上がGo で AWS Cognito JWT トークンを確認する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。