Я решил создать проект, внешний интерфейс в Vue, внутренний API в .net core и Identity Server 4.
На основе шаблона чистой архитектуры мне нужно разделить свое решение на проекты:
- идентификационный сервер
- API
- инфраструктура (структура и модели объектов)
- ядро
- приложение Vue
Я настроил проект для работы с объектами в памяти и успешно вошел в систему с внешними учетными записями и локальными учетными записями alice / bob.
Теперь мне нужно создать миграции для создания базы данных, в которой будут храниться эти пользователи (и другие объекты).
ДО включения сервера идентификации в проект:
Я создал библиотеку классов для проекта инфраструктуры, включая EF и Identity (не сервер идентификации, а идентификатор), и на данный момент у меня есть модели и ApplicationDbContext, также модель ApplicationUser, которая наследует IdentityUser (в целях расширения таблицы AspNetUser с помощью моего собственные свойства). Миграции папок содержат только init для базы данных, в которой таблицы идентичности создаются с другими моделями.
В моем проекте api (startup.cs) я зарегистрировал ApplicationDbContext в качестве службы и создал базу данных.
ПОСЛЕ включения сервера идентификации в проект:
Identity Server, из JS Client QuickStart, я мог войти, но с использованием пользователей в памяти или внешнего входа. Теперь я хочу, чтобы мое приложение работало с одной базой данных.
Я прочитал это:
http://docs.identityserver.io/en/latest/quickstarts/7_entity_framework.html
И успешно удалось создать миграции в проекте сервера идентификации (хотел те, что в инфраструктуре, но ...), обновить базу данных, и теперь у меня есть база данных с таблицами идентификации (AspNetUser, AspNetRoles ...) и новыми таблицами, сгенерированными с сервера идентификации (клиенты, ClientScopes ...) с моими старыми моделями для проекта.
Мой API еще не имеет никаких контроллеров, кроме ValuesController, мой IdentityServer Quickstart имеет контроллеры, представления и модели представления для учетной записи, согласия, устройства, диагностики, предоставления и дома, а моя библиотека классов инфраструктуры имеет EF (контекст и модели) с миграциями.
При запуске API я добавляю ApplicationDbContext в качестве службы со ссылкой на проект инфраструктуры, а имя MigrationsAssembly - Инфраструктура.
При запуске сервера Identity я добавляю хранилище конфигурации и хранилище операций с теми же параметрами (строка подключения к той же базе данных, что и API и инфраструктура).
Когда в моем приложении vue я использую iodc-client, который связывается с сервером Identity в качестве прав доступа, я установил для маршрутов своего приложения аутентификацию, и если ни один пользователь не вошел в систему, вы будете перенаправлены на сервер идентификации / account / login стр. Отображается с двумя вариантами: локальный вход в систему и внешний вход в Google, а при входе в систему внешним способом пользовательский объект не добавляется в базу данных. Я еще не создал регистрацию, поэтому при использовании учетных записей Алисы / Боба (в памяти) они не записываются в базу данных. Клиент iodc входит в систему и может просматривать аутентифицированные маршруты.
Проблема:
1. Мне действительно нужны обе таблицы фреймворков?
2. Если я это сделаю, то в какую таблицу я (фреймворк) напишу своих пользователей и как мне получить этот класс в своем коде, чтобы я мог расширить его своими реквизитами?
3. Контроллеры не были изменены мной, они генерируются шаблонами, поэтому я думаю, что мне нужен способ заставить эти контроллеры работать с моим контекстом и EF для записи и сохранения изменений. Если да, то какая это ответственность? Создаю ли я еще один контроллер учетных записей в моем API, который будет запрошен для создания и записи этого пользователя, или есть какой-то способ с фреймворком, с которым я не знаком, так как я только изучаю Identity Server?
Заранее спасибо за чтение и за попытку понять. Извините за длинный пост.