【发布时间】:2021-12-09 00:28:43
【问题描述】:
上下文:我想用 Payconiq 实现支付。付款完成后,Payconiq 会调用我的 API 为我提供付款信息(状态等)。
我正在使用 Symfony 和 web-token/jwt-bundle 来验证 JWS。
1/ 我使用 'base64_decode' 从令牌中获取标头(令牌格式类似于:header.payload.signature 带有空负载)
2/ 我从 URL 获取 json JWK:似乎总是使用的 JWK 如下:
{
"kty": "EC",
"use": "sig",
"x5t#S256": "******************",
"crv": "P-256",
"kid": "kid.2021",
"alg": "ES256",
"x5c": [],
"x": *******,
"y": *******
3/ 我想用这个 JWK 验证签名。我愿意:
$serializerManager = new JWSSerializerManager([new CompactSerializer(),]);
$jws = $serializerManager->unserialize($token);
$isVerified = $jwsVerifier->verifyWithKey($jws, $jwk, 0, $payload);
(公共函数 verifyWithKey(JWS $jws, JWK $jwk, int $signature, ?string $detachedPayload = null): bool)
我的payload:Payconiq发送的body请求(支付信息)。
$isVerified 总是假的。
我不知道问题是来自我的有效负载还是我使用库的方式(文档显示了一个带有 JWK 之类的示例
{
"kty": "oct",
"k": "dzI6nbW4OcNF-AtfxGAmuyz7IpHRudBI0WgGjZWgaRJt6prBn3DARXgUR8NVwKhfL43QBIU2Un3AvCGCHRgY4TbEqhOi8-i98xxmCggNjde4oaW6wkJ2NgM3Ss9SOX9zS3lcVzdCMdum-RwVJ301kbin4UtGztuzJBeg5oVN00MGxjC2xWwyI0tgXVs-zJs5WlafCuGfX1HrVkIf5bvpE0MQCSjdJpSeVao6-RSTYDajZf7T88a2eVjeW31mMAg-jzAWfUrii61T_bYPJFOXW8kkRWoa1InLRdG6bKB9wQs9-VdXZP60Q4Yuj_WZ-lO7qV9AEFrUkkjpaDgZT86w2g'
}
有一个“k”键,结果没问题(isVerified = true)。
但是对于没有“k”和“x5c”的 JWK,isVerified 仍然为 false。
有人可以帮帮我吗?
【问题讨论】: