Tag: 亚马逊认知

使用Amazon AWS Cognito`.well-known / jwks.json`数据无法base64解码一些字段

使用Amazon AWS Cognito 联合身份验证时 ,请在以下位置解析数据: 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()) 但是当使用具有以下形式的URL的数据的Cognito 用户池时: https://cognito-idp.${REGION}.amazonaws.com/${POOLID}/.well-known/jwks.json 它具有相同类型的数据,但不会解码。 相反,我最终会遇到以下错误: 非法base64字符5f 由于这是一个下划线_和Base64 URL字母表,我试着改变我的解码为: Base64.getUrlDecoder().decode(encodedN.toByteArray()) 但是,第一组数据不能正确解码,因为它包含Base64 URL编码的/和其他无效字符。 有没有一种方法可以处理这两个jwks数据集同一个解码器?!? 注意: 这个问题是由作者故意编写和回答的( 自我回答问题 ),所以在SO中共享有趣问题的解决方案。