update:简化验证
This commit is contained in:
@@ -52,7 +52,7 @@ namespace QRCodeService.Controllers.Api
|
||||
}
|
||||
}
|
||||
|
||||
[CheckSign(typeof(CreateLinkModel))]
|
||||
[CheckSign]
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> Create(CreateLinkModel input)
|
||||
{
|
||||
@@ -62,7 +62,7 @@ namespace QRCodeService.Controllers.Api
|
||||
{
|
||||
return BadRequest();
|
||||
}
|
||||
return Ok(link.ShortCode);
|
||||
return Created($"{option.Value.BaseUrl}r/{link.ShortCode}",link.ShortCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,11 +37,12 @@ namespace QRCodeService.Controllers
|
||||
}
|
||||
var t = DateTime.Now.ToString("yyyyMMddHHmmss");
|
||||
var sign = BitConverter.ToString($"{t}{app.Appkey}".ToMD5()).Replace("-", "");
|
||||
link.FullUrl = QueryHelpers.AddQueryString(link.FullUrl, new Dictionary<string, string> {
|
||||
ViewBag.FullUrl = QueryHelpers.AddQueryString(link.FullUrl, new Dictionary<string, string> {
|
||||
{ "s",sign },
|
||||
{ "t",t}
|
||||
});
|
||||
return View(link);
|
||||
|
||||
return View();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,11 +8,8 @@ namespace QRCodeService.Infrastructure.Middlewares
|
||||
{
|
||||
public class CheckSignAttribute:Attribute
|
||||
{
|
||||
public Type ModelType { get; set; }
|
||||
|
||||
public CheckSignAttribute(Type type)
|
||||
public CheckSignAttribute()
|
||||
{
|
||||
ModelType = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,11 +40,10 @@ namespace QRCodeService.Infrastructure.Middlewares
|
||||
var requestReader = new StreamReader(context.Request.Body);
|
||||
|
||||
var requestContent = await requestReader.ReadToEndAsync();
|
||||
var param = JsonSerializer.Deserialize(requestContent,attribute.ModelType);
|
||||
var props = attribute.ModelType.GetProperties();
|
||||
var appid = (int)props.Single(p=>p.Name=="AppId").GetValue(param);
|
||||
var time = props.Single(p => p.Name == "Time").GetValue(param) as string;
|
||||
var sign = props.Single(p => p.Name == "Sign").GetValue(param) as string;
|
||||
var param = JsonSerializer.Deserialize<Dictionary<string,JsonElement>>(requestContent);
|
||||
var appid = param.Where(kv=>kv.Key.ToLower()=="appid").Single().Value.GetInt32();
|
||||
var time = param.Where(kv=>kv.Key.ToLower()=="time").Single().Value.GetString();
|
||||
var sign = param.Where(kv=>kv.Key.ToLower()== "sign").Single().Value.GetString();
|
||||
var timeDate = time.ToDate("yyyyMMddHHmmss");
|
||||
if (timeDate == null||Math.Abs((timeDate.Value - DateTime.Now).TotalSeconds) > 60)//时间不同步
|
||||
{
|
||||
@@ -60,7 +59,7 @@ namespace QRCodeService.Infrastructure.Middlewares
|
||||
return;
|
||||
}
|
||||
var appKey = app.Appkey;
|
||||
var signStr = string.Join(null, props.Where(p => p.Name != "Sign").OrderBy(p => p.Name).Select(p => p.GetValue(param).ToString()));
|
||||
var signStr = string.Join(null, param.Where(kv =>kv.Key.ToLower() != "sign").OrderBy(kv => kv.Key).Select(kv => kv.Value.ToString()));
|
||||
var checkSign = BitConverter.ToString( (signStr + appKey).ToMD5()).Replace("-","");
|
||||
if(checkSign.ToLower() != sign.ToLower())
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.1" NoWarn="NU1605" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.1" NoWarn="NU1605" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace QRCodeService
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
//提供等待界面优化用户体验
|
||||
services.AddControllersWithViews();
|
||||
services.AddControllersWithViews().AddRazorRuntimeCompilation();
|
||||
services.AddSwaggerGen(c =>
|
||||
{
|
||||
c.SwaggerDoc("v1", new OpenApiInfo { Title = "QRCodeService", Version = "v1" });
|
||||
|
||||
@@ -3,18 +3,29 @@
|
||||
*@
|
||||
@{
|
||||
}
|
||||
@model QRCodeService.Application.Queries.Link
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<style>
|
||||
body{
|
||||
margin:0;
|
||||
padding:0;
|
||||
border:0;
|
||||
height:100vh;
|
||||
width:100%;
|
||||
display:flex;
|
||||
justify-content:center;
|
||||
align-items:center;
|
||||
font-size:3em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
loading...
|
||||
</div>
|
||||
<script>
|
||||
location.href = "@Html.Raw(Model.FullUrl)"
|
||||
location.href = "@Html.Raw(ViewBag.FullUrl as string)";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user