diff --git a/mes/客户端代码(C#).md b/mes/客户端代码(C#).md index 143cfdd..f091863 100644 --- a/mes/客户端代码(C#).md +++ b/mes/客户端代码(C#).md @@ -1,7 +1,7 @@ Client3.cs -``` +```csharp using System; using System.IO; using System.Net; @@ -103,7 +103,7 @@ public sealed class Client3 Program.cs -``` +```csharp using System; class Program diff --git a/mes/获取认证信息(测试).md b/mes/获取认证信息(测试).md index 7338853..65608cf 100644 --- a/mes/获取认证信息(测试).md +++ b/mes/获取认证信息(测试).md @@ -24,7 +24,7 @@ URL: http://localhost:8033/open/checked 示例 1:要求必须认证 -``` +```json { "data": { strict: true @@ -47,7 +47,7 @@ URL: http://localhost:8033/open/checked 认证成功时,响应如下: -``` +```json { "clock": "2023-06-25 20:00:00.000", "status": "ok", @@ -63,7 +63,7 @@ URL: http://localhost:8033/open/checked 服务端和客户端的系统时钟必须准确,若某一端的时钟偏差较大,则会出现以下响应: -``` +```json { "clock": "2023-06-25 20:00:00.000", "status": "exception", diff --git a/mes/认证方式.md b/mes/认证方式.md index 8aa3006..85704e8 100644 --- a/mes/认证方式.md +++ b/mes/认证方式.md @@ -3,36 +3,8 @@ 除了少部分的查询接口以外,大部分开放接口都需要认证,认证失败时候无法获取内容。 目前已启用的认证方式有: -- 基本认证 - 请求体签名认证 - ---- - -### 基本认证 - -基本认证使用固定的明文在网络中传输认证信息,存在被劫持的风险,因此不建议使用。 - -基本认证仅需使用一个 `token` 参数,加入 HTTP 头部即可,以下为 HTTP 请求示例: - -``` -POST /open/checked HTTP/1.1 -Host: 127.0.0.1 -Content-Type: application/json -Content-Length: 30 -Token: token1 - -{ "data": { "strict": true } } -``` - -认证成功时响应内容由接口控制;认证失败时会得到以下响应体: - -``` -{ - "status": "exception", - "message": "令牌不存在。", - "data": {} -} -``` +- 基本认证 --- @@ -51,7 +23,7 @@ HTTP 请求中与认证有关的字段有 3 个: 根据当前时钟生成 UTC 时毫秒间戳,获取字符串: -``` +```js // JavaScript 生成时间戳 var stamp = String(Number(new Date())); @@ -61,20 +33,20 @@ var stamp = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 获取请求体的字符串: -``` +```json { "data": { "strict": true } } ``` 使用 UTF-8 对请求体的文本进行编码,获取到 30 个字节,这与 HTTP 请求头中的 `Content-Length: 30` 一致,计算 SHA256,获取小写的十六进制: -``` +```js // sha256 bd1f3e0163a759712739476ef49425ea93753fe690f5edd589c0e43bd0d1f653 ``` 将请求体哈希、时间戳和 secret 使用换行符拼接成一个字符串: -``` +```js var secret = "secret3"; var stamp = "1687723200000"; var sha256 = "bd1f3e0163a759712739476ef49425ea93753fe690f5edd589c0e43bd0d1f653"; @@ -89,7 +61,7 @@ secret3 bd1f3e0163a759712739476ef49425ea93753fe690f5edd589c0e43bd0d1f653 ``` -对待签名字符串进行 UTF-8 编码后,计算 SHA256,即为签名: +将待签名字符串进行 UTF-8 编码后,对其字节数组计算 SHA256,以十六进制输出,即为签名: ``` 64235f1ae5900039b5e5c370aebbe8081b8b24b08b2bc3806a9a359304fc1e3b @@ -99,7 +71,7 @@ bd1f3e0163a759712739476ef49425ea93753fe690f5edd589c0e43bd0d1f653 将令牌(Token)、时间戳(Stamp)和签名(Signature)加入 HTTP 请求头中,即可发起请求。 -``` +```http POST /open/checked HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json @@ -111,12 +83,50 @@ Signature: 64235f1ae5900039b5e5c370aebbe8081b8b24b08b2bc3806a9a359304fc1e3b { "data": { "strict": true } } ``` -认证成功时响应内容由接口控制;认证失败时会得到以下响应体: +认证成功时,响应内容中将会包含 status = "ok" 的内容,例如: +```json +{ + "status": "ok", + "data": {} +} ``` + +认证失败时,会返回其它值(包括 error、exception、forbidden 等),例如: + +```json { "status": "exception", "message": "令牌不存在。", "data": {} } ``` + +--- + +### 基本认证 + +基本认证使用固定的明文在网络中传输认证信息,存在被劫持的风险,因此仅用于临时测试。 + +基本认证仅需使用一个 `token` 参数,加入 HTTP 头部即可,以下为 HTTP 请求示例: + +```http +POST /open/checked HTTP/1.1 +Host: 127.0.0.1 +Content-Type: application/json +Content-Length: 30 +Token: token1 + +{ "data": { "strict": true } } +``` + +认证成功时响应内容由接口控制;认证失败时会得到以下响应体: + +```json +{ + "status": "exception", + "message": "令牌不存在。", + "data": {} +} +``` +