挑战
从由以下机构颁发的 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 库,验证和解析 AWS Cognito 颁发的 JWT 令牌的过程变得显着简化。这种方法为 Go 中的身份验证和授权提供了清晰简洁的解决方案。
以上是如何在 Go 中轻松解析和验证 AWS Cognito JWT 令牌?的详细内容。更多信息请关注PHP中文网其他相关文章!