0

我想知道如何使用 JWS Detached 验证 HTTP 消息。目前,我在标题中收到 x-sign-jws 请求,如下所示

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..UXwjHxU3tFlrzPMupG04zROiEcHFQpCg3l7J4Axr1fE

我需要使用我的密钥验证请求是否正确

例如:12345678

我正在使用 firebase/jwt 并尝试了下面的代码

$hed = getallheaders();
$recievedJwt = $hed["X-Sign-Jws"];
$decoded = JWT::decode($recievedJwt, $secret_key, array('JWT','HS256'));```

但我没有得到任何结果。

我在网上搜索我找到了提到以下步骤的文章:

验证带有 JWS 分离的 HTTP 消息:a) 获取 HTTP 标头“x-sign-jws”,b) 获取 BASE64URL HTTP 正文 c) 将生成字符串 b) 放入 Payload 部分 d) 验证 JWS

但我对如何获取 Base64URL HTTP 正文感到困惑

任何帮助将不胜感激,因为只有几篇关于这个主题的文章。

4

1 回答 1

0

JWS 格式为base64url(header).base64url(payload).base64url(signature),请注意 3 个组件之间的点分隔符。

分离的 JWS 仍然包含 3 个组件,但有效负载被移除并在其他地方提供,通常有效负载在 HTTP 正文中提供。

要验证分离的 JWS,您需要将 base64url 编码的有效负载添加到分离的 JWS。有效负载可从您的 HTTP 正文获得。

例如;

x-sign-jws = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..UXwjHxU3tFlrzPMupG04zROiEcHFQpCg3l7J4Axr1fE

//split x-sign-jws into array using delimiter .
    
x-sign-jws-attached = x-sign-jws-split[0] + '.' + base64Url(HTTPRequest.Body) + '.' + x-sign-jws-split[1]

现在您可以验证x-sign-jws-attached如下所示;

$decoded = JWT::decode($x-sign-jws-attached, $secret_key, array('JWT','HS256'));```
于 2022-01-07T13:59:45.193 回答