Лучшие практики интеграции ASP.NET Identity — существуют ли они?
-
20-12-2019 - |
Вопрос
Я использую ASP.NET Identity с новым веб-сайтом, и, похоже, не так уж много (каких-то?) примеров того, как это сделать отдельно.Мне не нужна модель моего домена DomainUser
класс, от которого нужно наследовать Microsoft.AspNet.Identity.EntityFramework.User
, поэтому я создал класс, который выглядит следующим образом:
public class IdentityUser : User
{
public virtual DomainUser DomainUser { get; private set; }
}
Я переместил DbSet
необходимые для ASP.NET Identity, в тот же производный DbContext
класс как мои модели домена как показано в этом ответе.Я связал IdentityUser
однонаправленно к DomainUser
через Fluent API вот так:
modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();
Это позволяет мне в основном отделить проблемы авторизации и аутентификации от поведения, определенного в DomainUser
сорт.Это лучше, чем объединять их в один класс, но все равно выглядит некрасиво.У меня все еще есть ссылки на необходимые сборки ASP.NET Identity в моем проекте домена.Я мог бы создать еще один проект, который содержал бы только мой класс IdentityUser и ссылку на мою сборку Domain, чтобы обеспечить свойство навигации, но это начинает казаться запутанным.
Я считаю, что должен быть лучший, более чистый и модульный способ связать Identity с доменом, не приводя к жесткой связи.
Кто-нибудь придумал лучший способ справиться с этим?Я надеюсь привлечь внимание участников проекта ASP.NET Identity (Хао Кунг и др.), чтобы указать здесь направление.
Решение 2
Дело в том, что если вы собираетесь наследовать от IdentityUser, вам понадобятся сборки, связанные с ASP.NET Identity.Вы не можете отделить Identity от ASP.NET.Исходные примеры в вопросе мало что вам дадут - в большинстве случаев вам, вероятно, лучше просто наследовать от IdentityUser
если ты собираешься использовать IdentityUser
в вашем доменном проекте.
Если ваш доменный проект действительно должен быть свободен от сборок, связанных с ASP.NET, вы можете оставить классы, связанные с идентификацией, в своем веб-проекте и создать отдельный User
модель в вашем проекте домена, свяжите их программно, как предложено здесь.
Другие советы
Eсть обсуждение разделения идентификации ASP.NET здесь.И вы можете найти примеры того, как это реализовано в проект с открытым исходным кодом SimpleSecurity.