Skip to content

Instantly share code, notes, and snippets.

@conwid
Last active May 16, 2023 16:55
Show Gist options
  • Save conwid/8a8730193f81f58070d970349b5f846b to your computer and use it in GitHub Desktop.
Save conwid/8a8730193f81f58070d970349b5f846b to your computer and use it in GitHub Desktop.
Extending anti-forgery tokens in ASP.NET Core
public class Item
{
public int Data { get; set; }
}
@using AspNetSecurityDemos.Demos;
@model Item
@{
ViewData["Title"] = "CreateItem";
}
<h1>CreateItem</h1>
<h4>Item</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="CreateItem">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Data" class="control-label"></label>
<input asp-for="Data" class="form-control" />
<span asp-validation-for="Data" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
public class ExpiringAntiforgeryAddtionalDataProvider : IAntiforgeryAdditionalDataProvider
{
public string GetAdditionalData(HttpContext context)
{
return DateTime.UtcNow.AddMinutes(5).ToString();
}
public bool ValidateAdditionalData(HttpContext context, string additionalData)
{
var isDate = DateTime.TryParse(additionalData, out var expirationDate);
return isDate && DateTime.UtcNow < expirationDate;
}
}
builder.Services.AddSingleton<IAntiforgeryAdditionalDataProvider, ExpiringAntiforgeryAddtionalDataProvider>();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment