2022-05-09 20:31:03 +08:00
|
|
|
## 如何验证响应签名?
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### 验签流程
|
|
|
|
|
|
|
|
每个响应对象均包含键为 `TBEP-Authorization` 的响应标头,你可根据官方文档的规则利用本库提供的 `RSAUtility` 工具类自行进行签名验证。
|
|
|
|
|
|
|
|
下面给出一个使用 `RSAUtility` 工具类验证签名的示例代码:
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
string data = "拼接好的验签数据";
|
|
|
|
string sign = "待验证的签名";
|
2023-04-11 15:42:49 +08:00
|
|
|
string tbepPublicKey = "微企付公钥";
|
2022-05-09 20:31:03 +08:00
|
|
|
bool ret = RSAUtility.VerifyWithSHA256(tbepPublicKey, data, sign);
|
|
|
|
```
|
|
|
|
|
|
|
|
此外,本库还封装了直接验证响应签名的扩展方法,下面给出一个示例代码:
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
bool ret = client.VerifyResponseSignature(response);
|
|
|
|
```
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### 调试验签错误:
|
|
|
|
|
2024-02-07 18:02:46 +08:00
|
|
|
由于 `VerifyResponseSignature()` 方法内部会 `try-catch` 捕获所有异常,并直接返回 `false`。为方便开发者在调试阶段排查验签的错误信息,你可以在验证响应签名时指定返回值类型为 `ErroredResult` 而非 `Boolean`,该返回值中包含了一些异常的原因和相关堆栈信息。
|
2022-05-09 20:31:03 +08:00
|
|
|
|
|
|
|
```csharp
|
2024-02-07 11:22:05 +08:00
|
|
|
ErroredResult res = client.VerifyResponseSignature(response);
|
|
|
|
if (!res.Result)
|
2022-05-09 20:31:03 +08:00
|
|
|
{
|
2024-02-07 11:22:05 +08:00
|
|
|
Console.WriteLine(res.Error);
|
2022-05-09 20:31:03 +08:00
|
|
|
}
|
|
|
|
```
|