【发布时间】:2017-02-20 03:33:22
【问题描述】:
使用 Amazon AWS Cognito Federated Identities 并解析位于:https://cognito-identity.amazonaws.com/.well-known/jwks_uri 的数据时,如下所示:
{"keys":[
{"kty":"RSA",
"alg":"RS512",
"use":"sig",
"kid":"ap-northeast-11",
"n":"AI7mc1assO5n6yB4b7jPCFgVLYPSnwt4qp2BhJVAmlXRntRZ5w4910oKNZDOr4fe/BWOI2Z7upUTE/ICXdqirEkjiPbBN/duVy5YcHsQ5+GrxQ/UbytNVN/NsFhdG8W31lsE4dnrGds5cSshLaohyU/aChgaIMbmtU0NSWQ+jwrW8q1PTvnThVQbpte59a0dAwLeOCfrx6kVvs0Y7fX7NXBbFxe8yL+JR3SMJvxBFuYC+/om5EIRIlRexjWpNu7gJnaFFwbxCBNwFHahcg5gdtSkCHJy8Gj78rsgrkEbgoHk29pk8jUzo/O/GuSDGw8qXb6w0R1+UsXPYACOXM8C8+E=",
"e":"AQAB"},
... }
这可以很好地使用此代码解码n 字段(Kotlin 调用 JDK 8 Base64 类):
Base64.getDecoder().decode(encodedN.toByteArray())
但是当使用 Cognito User Pools 时,其 URL 中的数据格式为:https://cognito-idp.${REGION}.amazonaws.com/${POOLID}/.well-known/jwks.json
它具有相同类型的数据,但不会解码。相反,我最终会遇到以下错误:
非法base64字符5f
因为这是一个下划线 _ 并且在 Base64 URL 字母表中,我尝试将我的解码更改为:
Base64.getUrlDecoder().decode(encodedN.toByteArray())
但随后第一组数据不再正确解码,因为它包含/ 和其他用于Base64 URL 编码的无效字符。
有没有一种方法可以用同一个解码器处理这两个jwks 数据集?!?
注意: 这个问题是作者(Self-Answered Questions)有意编写和回答的,以便在SO中分享有趣问题的解决方案。
【问题讨论】:
标签: java amazon-web-services kotlin amazon-cognito