С учетом разделения интересов и единственной ответственности:
Не существует только одной пользовательской таблицы. Поля в таблице имеют только значение в контексте.
Пользователь может иметь учетную запись Google для входа, но для бизнеса, который не является учетной записью, где вы можете связаться с сотрудником.А как насчет отображения информации в отчете, который не является частью контекста?Предположим, вы храните город в контексте идентичности.Тогда как вы собираетесь показать эту информацию в отчете?Вам понадобится информация в бизнес-контексте.
Также подумайте, является ли контекст идентификации хорошим местом для хранения информации.Потому что пользователь контролирует.Что происходит, когда пользователь не дает согласия на использование информации или просто удаляет аккаунт?И какую стратегию использовать, когда вы хотите синхронизировать данные?
Обмен контекстами не нужен.За идентификацию отвечает IdentityServer, контекст идентификации должен содержать только информацию о личности и доступен только IdentityServer.Обратите внимание, что IdentityServer не привязан к одному приложению.
Вам понадобится таблица пользователя в каждом контексте. Если информация может показаться избыточной, но на самом деле это не так, потому что она является частью отдельного контекста.Например, когда вы входите через такого провайдера, как Google.Затем в контексте идентификации создается локальная копия пользователя.
Но, возможно, вам не следует называть ее «Пользователь» в бизнес-контексте.Потому что в бизнес-контексте нет пользователей.Скорее всего, это сотрудники, клиенты и т. Д. Кто может иметь логин, но не обязательно.Кроме того, можно иметь (удостоверяющих личность) пользователей, которые неизвестны бизнесу (например, в случае нескольких приложений).
IdentityServer - это орган для аутентификации пользователя.Авторизация может быть реализована на нескольких уровнях.Вы можете создать отдельный сервер авторизации (например, policyserver ).Или более низкий уровень ( на основе ресурсов ), где наличие пользователя внутри таблицы person означает, что пользователь имеет доступ к ресурсу.
Лучшая часть отдельных контекстов - эточто внутри контекста вы можете создавать отношения между таблицами, не мешая другим контекстам.Вы можете легко переключиться на другого поставщика oidc, если хотите.Но как только вы начнете смешивать контексты, пути назад уже не будет.
Единственное, что очень полезно в oidc - это утверждение sub
.Просто найдите пользователя по заявке sub
и используйте локальный идентификатор для бизнес-контекста.
О полях city
и country
в контексте идентификации: существует несколько уровней аутентификации, поэтомувам может действительно понадобиться информация в этом контексте.Но если вам нужна информация в другом контексте (например, для отображения в отчетах), ее следует добавить туда (также).