Недавно я настраивал аутентификацию JWT с использованием Asp.NET Core 2.0, но с последним обновлением с 1.0 до 2.0 не было учебника или документации, поэтому я делюсь.

В этой публикации мы будем использовать Entity Framework Core с MySQL и Identity с JWT. Итак, это будет небольшой длинный пост.

Если вы не знаете, что такое JWT, посмотрите это введение.

Источник

Исходный проект доступен на github: https://github.com/ozgurrgul/WebApiJwt

Давайте создадим новый проект для нашего примера проекта WebApiJwt:

# mkdir WebApiJwt

# cd WebApiJwt

# dotnet new webapi

Наш проект будет создан через несколько секунд.

Сначала мы начнем с подключения MySQL к нашему приложению, но перед тем, как открыть проект, используя предпочитаемую вами IDE, я буду использовать Rider, так как я использую Mac OS. .

Шаг 1

Создайте базу данных с именем webapijwt в MySQL.

Шаг 2

Добавьте зависимости Entity Framework Core и MySQL, наш новый файл .csproj будет выглядеть так:

Шаг 3

Создайте в нашем проекте каталог с именем Entities и создайте в нем файл ApplicationDbContext.cs :

Это в основном расширяет IdentityDbContext, и нам не нужно вручную создавать необходимые таблицы в нашей базе данных.

Шаг 4

Настройте наш ApplicationDbContext в файле Startup.cs, он будет выглядеть так:

Теперь, когда вы запустите приложение, вы увидите, что эти таблицы создаются автоматически:

Шаг 5

Теперь наша личность должна работать. Настроим аутентификацию JWT

В методе ConfigureServices () добавьте материал jwt после добавления идентификатора, чтобы новый файл запуска был:

Мы использовали Configuration [«JwtIssuer»] и Configuration [«JwtKey»] при добавлении JWT, поэтому давайте добавим эти ключи и значения в appsettings.json:

{
  "JwtKey": "SOME_RANDOM_KEY_DO_NOT_SHARE",
  "JwtIssuer": "http://yourdomain.com",
  "JwtExpireDays": 30
}

ШАГ 6

Создайте контроллер с именем AccountController для аутентификации, который будет содержать конечные точки / Account / Login и / Account / Register. Он будет генерировать токены JWT с помощью нашего метода GenerateJwtToken (…) при успешном входе в систему и регистрации:

Шаг 7.

Давайте протестируем наш метод Register с помощью curl:

Теперь он должен ответить примерно так:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtZUBvemd1ci5kayIsImp0aSI6ImMwMTgxMmQ4LTI3MjktNGJhYS04YWQwLTk1ZTI4YjgzNzc1NCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiZDc2MTRiNzEtN2MyOS00OTk3LTlmODUtNDNkYzlmMDI2NzZlIiwiZXhwIjoxNTExNDIwNTQ3LCJpc3MiOiJodHRwOi8veW91cmRvbWFpbi5jb20iLCJhdWQiOiJodHRwOi8veW91cmRvbWFpbi5jb20ifQ.v8YLTMTUraD7KqoHTskvcg9X_zH5WdWkcpGuHHeqYKM

Возвращенный токен должен храниться в вашем клиентском приложении и будет отправлять все запросы с HTTP-заголовком Авторизация:

Авторизация: предъявитель eyJhbGciOiJI…

Это зависит от вас, как вы храните свой токен. Например, в Android вы можете сохранить его в SharedPreferences и назначить HTTP-запросам, или вы можете использовать localStorage в Интернете.

Шаг 8

Создайте защищенную зону только для авторизованных пользователей с помощью атрибута Авторизовать:

[Authorize]
[HttpGet]
public async Task<object> Protected()
{
    return "Protected area";
}

Когда вы выполняете запрос GET без правильного токена, вы получите ошибку HTTP 401. Но если вы сделаете правильный запрос, он будет работать так, как ожидалось:

Заключение

В этом руководстве мы настроили Entity Framework Core с помощью Identity и добавили аутентификацию JWT с использованием Asp.NET Core 2.0 Web Api. Я также использовал внедрение зависимостей, например, при создании AccountController.

Бесстыдный плагин: подписывайтесь на меня в твиттере и проверяйте мой новый проект Landly (генератор посадочных страниц). Кроме того, я обещаю, что начну писать в Твиттере. :)