ホームページ >バックエンド開発 >Golang >Go で AWS Cognito JWT トークンを簡単に解析して検証する方法は?

Go で AWS Cognito JWT トークンを簡単に解析して検証する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-28 08:33:11298ブラウズ

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 ライブラリ、JWT トークンを検証および解析するプロセスAWS Cognito によって発行される処理が大幅に簡素化されます。このアプローチは、Go での認証と認可のための明確かつ簡潔なソリューションを提供します。

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

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