如何解码 AWS Cognito 发送"state"请求参数?



几个月前,我一直在使用AWS Cognito在请求授权服务器的/authorize时发送的state请求参数。我使用它从AWS Cognito向我的授权服务器发送额外的信息。当时的值为base64。今天我正在尝试同样的事情,但我收到了一个不是base64的状态值。AWS更改了Cognito吗?还是我遗漏了什么?

经过一番调查,我发现Cognito以STRING1.STRING2.STRING3格式发送状态。String1base64url编码。从base64url解码STRING1后,发现它是gzip二进制。解压缩会产生state.

以前,Cognito使用base64编码对状态进行两次编码。显然,他们改变了逻辑。我没有找到任何说明这种情况的文档。

我发现,当我使用customState参数用于Cognito的联邦认证时,我在回调中得到一个状态参数,该参数不是gzip或base64编码的。它实际上由两个带破折号的不同字符串组成,比如:

[AWS-specific string]-[hex encoded customState]

特定于aws的字符串具有未知的(对我来说)编码和内容(可能只是uid),但是customState是一个十六进制编码的字符串。例如,customState字符串"hi"将有一个编码字符串值"6869"

我能够成功地传递和解码JSON字符串使用这个方法。

最新更新