update:简化验证

This commit is contained in:
2021-03-03 16:53:55 +08:00
parent 8214973184
commit 5234d3358b
7 changed files with 27 additions and 18 deletions

View File

@@ -52,7 +52,7 @@ namespace QRCodeService.Controllers.Api
} }
} }
[CheckSign(typeof(CreateLinkModel))] [CheckSign]
[HttpPost] [HttpPost]
public async Task<IActionResult> Create(CreateLinkModel input) public async Task<IActionResult> Create(CreateLinkModel input)
{ {
@@ -62,7 +62,7 @@ namespace QRCodeService.Controllers.Api
{ {
return BadRequest(); return BadRequest();
} }
return Ok(link.ShortCode); return Created($"{option.Value.BaseUrl}r/{link.ShortCode}",link.ShortCode);
} }
} }
} }

View File

@@ -37,11 +37,12 @@ namespace QRCodeService.Controllers
} }
var t = DateTime.Now.ToString("yyyyMMddHHmmss"); var t = DateTime.Now.ToString("yyyyMMddHHmmss");
var sign = BitConverter.ToString($"{t}{app.Appkey}".ToMD5()).Replace("-", ""); 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 }, { "s",sign },
{ "t",t} { "t",t}
}); });
return View(link);
return View();
} }
} }
} }

View File

@@ -8,11 +8,8 @@ namespace QRCodeService.Infrastructure.Middlewares
{ {
public class CheckSignAttribute:Attribute public class CheckSignAttribute:Attribute
{ {
public Type ModelType { get; set; } public CheckSignAttribute()
public CheckSignAttribute(Type type)
{ {
ModelType = type;
} }
} }
} }

View File

@@ -40,11 +40,10 @@ namespace QRCodeService.Infrastructure.Middlewares
var requestReader = new StreamReader(context.Request.Body); var requestReader = new StreamReader(context.Request.Body);
var requestContent = await requestReader.ReadToEndAsync(); var requestContent = await requestReader.ReadToEndAsync();
var param = JsonSerializer.Deserialize(requestContent,attribute.ModelType); var param = JsonSerializer.Deserialize<Dictionary<string,JsonElement>>(requestContent);
var props = attribute.ModelType.GetProperties(); var appid = param.Where(kv=>kv.Key.ToLower()=="appid").Single().Value.GetInt32();
var appid = (int)props.Single(p=>p.Name=="AppId").GetValue(param); var time = param.Where(kv=>kv.Key.ToLower()=="time").Single().Value.GetString();
var time = props.Single(p => p.Name == "Time").GetValue(param) as string; var sign = param.Where(kv=>kv.Key.ToLower()== "sign").Single().Value.GetString();
var sign = props.Single(p => p.Name == "Sign").GetValue(param) as string;
var timeDate = time.ToDate("yyyyMMddHHmmss"); var timeDate = time.ToDate("yyyyMMddHHmmss");
if (timeDate == null||Math.Abs((timeDate.Value - DateTime.Now).TotalSeconds) > 60)//时间不同步 if (timeDate == null||Math.Abs((timeDate.Value - DateTime.Now).TotalSeconds) > 60)//时间不同步
{ {
@@ -60,7 +59,7 @@ namespace QRCodeService.Infrastructure.Middlewares
return; return;
} }
var appKey = app.Appkey; 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("-",""); var checkSign = BitConverter.ToString( (signStr + appKey).ToMD5()).Replace("-","");
if(checkSign.ToLower() != sign.ToLower()) if(checkSign.ToLower() != sign.ToLower())
{ {

View File

@@ -20,6 +20,7 @@
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" /> <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.JwtBearer" Version="5.0.1" NoWarn="NU1605" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" 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" Version="5.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View File

@@ -45,7 +45,7 @@ namespace QRCodeService
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
//提供等待界面优化用户体验 //提供等待界面优化用户体验
services.AddControllersWithViews(); services.AddControllersWithViews().AddRazorRuntimeCompilation();
services.AddSwaggerGen(c => services.AddSwaggerGen(c =>
{ {
c.SwaggerDoc("v1", new OpenApiInfo { Title = "QRCodeService", Version = "v1" }); c.SwaggerDoc("v1", new OpenApiInfo { Title = "QRCodeService", Version = "v1" });

View File

@@ -3,18 +3,29 @@
*@ *@
@{ @{
} }
@model QRCodeService.Application.Queries.Link
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <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> </head>
<body> <body>
<div> <div>
loading... loading...
</div> </div>
<script> <script>
location.href = "@Html.Raw(Model.FullUrl)" location.href = "@Html.Raw(ViewBag.FullUrl as string)";
</script> </script>
</body> </body>
</html> </html>