Ручное создание и проверка токена защиты от подделки в ASP.NET 5

Я играю с ASP vnext и AngularJS. Я настроил веб-API, использую некоторые контроллеры и использую angular для веб-магии.

Я следовал большей части этого руководства, чтобы запустить свой проект: http://stephenwalther.com/archive/2015/01/29/asp-net-5-and-angularjs-part-6-безопасность

... который отлично работает. Я настроил свою базу данных и тому подобное, и у меня все работает. У меня тоже настроена структура идентификации, но я пока ее не использую.

Я хочу опубликовать некоторые данные в WebAPI. Что также отлично работает, но теперь я хочу сделать это, используя токены защиты от подделки. Я много гуглил, и думаю, это имеет смысл: новоблог

Однако: это использует System.Web.Helpers для создания токенов и их проверки. Они больше не доступны в vnext. Я не могу понять, что использовать для создания и проверки токенов сейчас.

Любые идеи?


person Stefan    schedule 30.03.2015    source источник


Ответы (2)


Ниже приведен пример из примера MusicStore ASP.NET 5:

https://github.com/aspnet/MusicStore/blob/master/src/MusicStore/Controllers/ShoppingCartController.cs#L62

Фрагмент из приведенной выше ссылки (обратите внимание, что вы можете использовать [FromServices] AntiForgery antiforgery в качестве параметра действия, если вам не нравится, как работает ссылка выше):

[HttpPost]
public async Task<IActionResult> RemoveFromCart(int id)
{
    var formParameters = await Context.Request.ReadFormAsync();
    var requestVerification = formParameters["RequestVerificationToken"];
    string cookieToken = null;
    string formToken = null;

    if (!string.IsNullOrWhiteSpace(requestVerification))
    {
        var tokens = requestVerification.Split(':');

        if (tokens != null && tokens.Length == 2)
        {
            cookieToken = tokens[0];
            formToken = tokens[1];
        }
    }

    var antiForgery = Context.RequestServices.GetService<AntiForgery>();
    antiForgery.Validate(Context, new AntiForgeryTokenSet(formToken, cookieToken));
    ......
person Kiran Challa    schedule 30.03.2015
comment
Аааа, есть целый пример, который я могу использовать, круто! Спасибо что подметил это! Самый полезный! - person Stefan; 31.03.2015
comment
Вы можете найти клиентскую часть приведенного выше кода по адресу здесь - person cilerler; 17.04.2015
comment
У этой реализации есть проблема: если токен будет украден, он будет действителен для этого пользователя навсегда! Обычно часть файла cookie ДОЛЖНА находиться в файлах cookie, а другая часть — в заголовках (если вы отправляете JSON) или данных формы. Таким образом, если сайт имеет надлежащую безопасность, кто-то может украсть только часть токена данных формы, которая будет действительна только до тех пор, пока пользователь вошел в систему. - person user2173353; 16.02.2018
comment
Ссылка на гитхаб не работает. - person hina10531; 07.10.2019

ознакомьтесь с репозиторием MVC Github, ValidateAntiForgeryTokenAttribute существует.

И есть asp-anti-forgerytaghelper

person agua from mars    schedule 30.03.2015
comment
Спасибо! Что такое тэгхелпер? Это новая замена помощника @Html.AntiForgery? - person Stefan; 31.03.2015
comment
TagHelper являются помощниками в html, вы по-прежнему можете использовать старый помощник @Html, но также напишите такой код: <form asp-anti-forgery ><form> для получения дополнительной информации см. последний Выступление сообщества по этому поводу - person agua from mars; 31.03.2015