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) を利用してトークンを検証できます。次の手順でプロセスの概要を説明します。keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)
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 トークンを検証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。