Можно ли использовать ASP.NET Core Identity (на основе файлов cookie) для защиты WebAPI? - PullRequest
0 голосов
/ 23 января 2019

Я думаю, у меня есть небольшое заблуждение, что

Identity = only MVC - returning Views

и WebAPI => you gotta go for token-ish way of authentication like JWT

Итак, я бы хотел спросить

Is it possible to use that default AspNetCore's Identity with WebAPI?

Или, может быть, я должен спросить Is javascript post/get attaching Cookies to it?

Ответы [ 4 ]

0 голосов
/ 24 января 2019

С технической точки зрения Cookie - это просто заголовок http, точно так же, как заголовок Authorization, поэтому вы можете защитить свой API с помощью cookie.

На самом деле, если ваш API просто обслуживает SPA в том же домене, cookie - лучший и более безопасный вариант.

Проверка подлинности на основе токена предназначена для сценариев, в которых API обслуживает несколько клиентов в разных доменах с разными уровнями доступа. В этих случаях имеет смысл отделить сервер аутентификации от сервера API.

Я рекомендую прочитать эти статьи:

Будьте осторожны с шумихой JWT

Пожалуйста, прекратите использование локального хранилища

0 голосов
/ 24 января 2019

Вы можете использовать или Identity (аутентификация куки-файлов) либо аутентификацию на основе токена (например, OAuth), либо даже обе, если хотите. Это зависит от ваших потребностей.

В javascript вы можете отправлять файлы cookie и заголовки авторизации для авторизации.

0 голосов
/ 24 января 2019

Можно ли использовать эту идентификацию AspNetCore по умолчанию с WebAPI?

Да. Он будет работать очень похоже, как и в шаблоне Asp.Net Mvc по умолчанию. Ваш AccountController может выглядеть так:

public class AccountController : Controller
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    public AccountController(SignInManager<ApplicationUser> signInManager)
    {
        _signInManager = signInManager;
    }

    public async Task<IActionResult> Login(string login, string password)
    {
        var result = await _signInManager.PasswordSignInAsync(login, password, true, lockoutOnFailure: false);

        if (result.Succeeded)
        { 
            //process successful result
        }
        else
        {
            //process failed result
        }
    }
}

SignInManager<>.PasswordSignInAsync() назначит необходимые файлы cookie для обработки аутентификации.

0 голосов
/ 24 января 2019

Да, это возможно. Однако для некоторых библиотек JS необходимо разрешить передачу файлов cookie. Например, Axios требует, чтобы вы установили withCredentials: true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...