在 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 令牌,确保令牌的真实性和完整性。
以上是如何在 Go 中验证来自 AWS Cognito 的 JWT 令牌?的详细内容。更多信息请关注PHP中文网其他相关文章!