2016-06-30 48 views
1

我正在尝试用于我的Web App的Cognito用户池的登录功能。我能够获得令牌,但我不知道在哪里找到解密它的秘密。我在其中一篇文章中读到,该秘密是用户池中应用程序的秘密标识。但是,对于Javascript SDK,秘密标识是空白的。这是否意味着我的秘密也应该是空白的?我试过这个,但我收到一条消息,说“错误:PEM_read_bio_PUBKEY失败”。在哪里可以从认知中找到JWT的秘密密钥

+0

关键是可以作为json的键,你可以从用户池下载。然后您需要将其转换为PEM密钥以便用它来解码智威汤逊。 –

回答

0

AWS使用RS256算法不需要保密,但公共密钥进行解码。

在这里,你会发现你的游泳池JWKS:https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json(见http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html#amazon-cognito-identity-user-pools-using-id-and-access-tokens-in-web-api

这里描述转化JWK公钥的过程:https://mobile.awsblog.com/post/Tx3JK25U7Z9EUIU/Integrating-Amazon-Cognito-User-Pools-with-API-Gateway(第“了解代码”)。

+2

抱歉,但这是明显错误的--RS256是一种不对称算法,需要公钥和私钥。正确的是,为了验证JWT,您不需要用于签名的私钥。 –

+0

同意B M评论。 – javierfdezg

+0

我回答的问题是“在哪里找到解密的秘密”(而不是关于RS256的一般功能),所以我认为我的答案是正确的。 – JakubM

2

要纠正对方的回答:RS256是一种非对称加密算法,需要公共和私有密钥。另见RS256 vs HS256: What's the difference?https://en.wikipedia.org/wiki/RSA_(cryptosystem)

正确的是,对于验证JWT,您不需要用于对其进行签名的私钥,而只需要AWS根据https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json提供的公钥。

+0

我从那里得到了一个Json数组,哪个属性包含令牌的公钥?尝试使用“n”属性中的值抛出签名是无效的 –

+0

@JefreeSujit您需要将JWK转换为pem格式,并根据已经共享的引用链接进行转换。 JWT将包含一个“孩子”,它决定你需要使用哪个JWK。 – ecoe

相关问题