我正在使用JOSE 包与 Elixir 合作。我有一个使用身份验证侦听器规则的ALB,我在其中获取的数据x-amzn-oidc-data应该是包含用户声明的 JWT。然而,虽然该值主要采用 JWT 格式,但它是 base64 URL 编码的,但带有填充。因此,JOSE 无法验证大多数传入的令牌(如果令牌到达时没有填充,JOSE 验证它没有问题)。
我想我可以通过简单地=从标头、有效载荷和签名中的令牌中去除字符来解决这个问题,但是似乎没有任何组合可以工作。
我已经使用 jwt.io 尝试调试令牌,并且它会抱怨如果我尝试=从有效负载中删除字符(仅?),签名会变得无效。但是,我尝试使用Python JOSE 库和Javascript JOSE 库验证令牌,并且两者都可以。尽管如此,如果我从有效负载中去除填充字符,这两个库都会告诉我签名验证失败。我必须把它留在签名中才能通过。
有没有办法将此令牌转换为不包含填充的格式,并且可以通过 Elixir JOSE 包进行验证?我试图对这些库如何在其他库失败时解码令牌进行逆向工程,但我没有任何运气。
仅作为视觉示例,这就是令牌的外观
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.tyh-VfuzIxCyGYDlkBA7DfyjrqmSHu6pQ2hoZuFqUSLPNY2N0mpHb3nk5K17HWP_3cYHBw7AhHale5wky6-sVA
Run Code Online (Sandbox Code Playgroud)
但是 ALB 向我发送了类似的内容(注意负载和签名中添加的填充字符)
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0==.tyh-VfuzIxCyGYDlkBA7DfyjrqmSHu6pQ2hoZuFqUSLPNY2N0mpHb3nk5K17HWP_3cYHBw7AhHale5wky6-sVA==
Run Code Online (Sandbox Code Playgroud)