| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.AspNetCore.Mvc.Filters; |
| | | using Newtonsoft.Json.Linq; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | |
| | | var request = context.HttpContext.Request; |
| | | |
| | | // 获取请求中的时间戳和签名 |
| | | //var timestamp = request.Headers["Timestamp"].FirstOrDefault(); |
| | | var timestamp = "1718873584"; |
| | | var signature = "1718873584"; |
| | | var timestamp = request.Headers["Timestamp"].FirstOrDefault(); |
| | | var signature = request.Headers["Signature"].FirstOrDefault(); |
| | | //var timestamp = "1718873584"; |
| | | //var signature = "1718873584"; |
| | | |
| | | if (string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(signature)) |
| | | { |
| | |
| | | string jsonParams; |
| | | using (var reader = new System.IO.StreamReader(request.Body, Encoding.UTF8, true, 1024, true)) |
| | | { |
| | | char[] buffer = new char[500]; |
| | | int bytesRead = await reader.ReadAsync(buffer, 0, buffer.Length); |
| | | jsonParams = new string(buffer, 0, bytesRead); |
| | | // 将请求体流位置重置到起始位置 |
| | | request.Body.Seek(0, System.IO.SeekOrigin.Begin); |
| | | jsonParams = await reader.ReadToEndAsync(); |
| | | } |
| | | |
| | | // 反序列化 JSON 参数为 JObject |
| | | JObject jObject = null; |
| | | try |
| | | { |
| | | jObject = JObject.Parse(jsonParams); |
| | | } |
| | | catch (JsonReaderException) |
| | | { |
| | | // JSON 格式错误,返回未经授权 |
| | | context.Result = new UnauthorizedResult(); |
| | | return; |
| | | } |
| | | // 过滤掉数组类型的属性 |
| | | var filteredProperties = jObject.Properties() |
| | | .Where(p => p.Value.Type != JTokenType.Array) |
| | | .ToDictionary(p => p.Name, p => p.Value.ToString()); |
| | | filteredProperties.Add("timestamp", timestamp); |
| | | filteredProperties.Add("appKey", appKey); |
| | | |
| | | // 构建待签名字符串 |
| | | var signatureBaseString = appKey + jsonParams + timestamp; |
| | | var signatureBaseString = string.Join("&", filteredProperties.OrderBy(p => p.Key).Select(p => p.Key + "=" + p.Value)); |
| | | |
| | | // 计算 MD5 值 |
| | | var computedSignature = Md5Tools.CalcMd5(Encoding.UTF8.GetBytes(signatureBaseString)); |
| | |
| | | } |
| | | return false; |
| | | |
| | | //try |
| | | //{ |
| | | // var requestDateTime = DateTimeOffset.FromUnixTimeSeconds(long.Parse(timestamp)); |
| | | // var currentDateTime = DateTimeOffset.UtcNow; |
| | | |
| | | // // 计算时间差 |
| | | // var timeDifference = currentDateTime - requestDateTime; |
| | | |
| | | // // 比较时间差是否在允许的范围内 |
| | | // return timeDifference.TotalMinutes <= Minutes; |
| | | //} |
| | | //catch (Exception) |
| | | //{ |
| | | // return false; |
| | | //} |
| | | } |
| | | } |
| | | public class SignConfig |