ホームページ >バックエンド開発 >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) を利用してトークンを検証できます。次の手順でプロセスの概要を説明します。

    jwx を使用して JWK セットを解析します。
keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)
    jwt-go でトークンを解析するときは、「 kid" フィールドを使用して適切なキーを見つけます。検証:
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 中国語 Web サイトの他の関連記事を参照してください。

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