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]
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);
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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())
{

View File

@@ -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>

View File

@@ -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" });

View File

@@ -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>