栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中从AWS Cognito验证JWT令牌?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Go中从AWS Cognito验证JWT令牌?

Amazon Cognito的公钥

正如您已经猜到的那样,您将需要公共密钥才能验证JWT令牌。

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-
user-pools-using-tokens-verifying-a-jwt.html#amazon-cognito-user-pools-using-
tokens-第2步

为您的用户池下载并存储相应的公共JSON Web密钥(JWK)。它可作为JSON Web密钥集(JWKS)的一部分使用。您可以在https://
cognito-idp上找到它 。{region} .amazonaws.com /
{userPoolId} /。well-known / jwks.json

解析密钥并验证令牌

该JSON文件结构已在网络中记录,因此您可以潜在地手动解析,生成公钥等。

但是只使用一个库可能会更容易,例如,一个库:https :
//github.com/lestrrat-go/jwx

然后jwt-go处理JWT部分:https :
//github.com/dgrijalva/jwt-go

然后,您可以:

1)使用第一个库下载并解析公共密钥JSON

keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)

2)使用jwt-go解析令牌时,请使用JWT标头中的“ 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 len(keys) == 0 {         return nil, fmt.Errorf("key %v not found", kid)    }    return keys[0].Materialize()        })


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号