我们通过 ESIA 设置站点授权。
问题:点击生成的带有签名的链接后,进入授权页面,输入数据,报错“授权错误”,页面地址包含详细信息
error_description=ESIA-007005%3A+The+client+is+not+authorized+to+request+an+access+token+using+this+method
有一台带码头的机器。
安装 docker 容器https://hub.docker.com/r/required/cryptopro
安装了根证书、客户端证书,还有 CryptoPro 的试用密钥。
通过复制 %BE#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D1%86%D0%B5%D0验证的证书链%BF%D0% BE%D1%87%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA %D0%B0% D1%82%D0%BE%D0%B2 )
cryptcp -copycert -thumbprint "$thumbprint" -df tt.cer
在出口处
Certificate chains are checked
ESIA 需要以 UTF8 编码的 PKCS#7 分离签名,然后以 url 安全 base64 编码
谷歌搜索,我发现了这个选项:
csptest -sfsign -sign -detached -base64 -add -alg "GOST12_256" -in message -out sig
文件已签名,我检查
csptest -sfsign -verify -detached -base64 -add -alg "GOST12_256" -in message -signature sig
在出口处:
Detached Signature was verified OK
问题 - 可能是什么问题?在哪里挖?
UPD:有一个服务可以使用相同的证书进行签名,它是用 Java 编写的,并使用其 ESIA 签名进行授权。对比我们的链接和服务链接,我们发现差异仅在于client_secret这一行,即签名处。