Как реализовать многопользовательский вход в систему с использованием удостоверения ASP.NET

Я разрабатываю многопользовательское решение и хочу использовать последнюю версию ASP.NET Identity, в частности Entity Framework.

В основном мне нужно разрешить двум пользователям иметь одно и то же имя пользователя, хотя оно должно быть уникальным в пределах клиента, я также хотел бы использовать внешние входы, такие как Twitter, Microsoft, Facebook и Google.

Насколько я могу судить, фреймворк не был разработан с учетом многопользовательской среды, хотя, похоже, он допускает расширяемость. Я бы предпочел использовать как можно больше существующих компонентов, хотя на данный момент думаю, что мне придется отказаться от Entity Framework и все это запрограммирую сам.

Кто-нибудь еще пробовал это, и сколько им пришлось кодировать сами.


person James Skimming    schedule 17.11.2013    source источник
comment
Вы можете хранить и обрабатывать пользователя Jim арендатора 7 как 7\Jim внутри.   -  person Slauma    schedule 18.11.2013
comment
Как все прошло? В настоящее время мы реализуем то же самое. 2.0 лучше? Библиотека нуждается в улучшении или есть проблемы?   -  person Bart Calixto    schedule 28.08.2014
comment
@Bart, все прошло нормально, см. Мой ответ stackoverflow.com/a/20230452   -  person James Skimming    schedule 28.08.2014


Ответы (2)


Теперь у меня есть рабочее решение, которым я поделился в репозитории GitHub:

https://github.com/JSkimming/AspNet.Identity.EntityFramework.Multitenant

Расширяемость, необходимая для поддержки мультитенантности, невозможна в версии 1.0.0 Microsoft. AspNet.Identity.EntityFramework (по крайней мере, без большой пользовательской работы), но доступен в альфа-версии 1.1, которая в настоящее время доступна через Ночные пакеты NuGet для веб-стека ASP.NET.

Я решил выпустить созданный мной пакет NuGet AspNet.Identity.EntityFramework.Multitenant, как указано, в настоящее время требуется Ночные пакеты NuGet веб-стека ASP.NET.

Я предоставил два простых сайта, которые используют этот пакет для обеспечения мультитенантности:

  1. Vanilla Implementation which is the standard MVC5 template project that uses a string primary keys.
    • The changes necessary to provide multi-tenancy have been isolated to this commit.
  2. Integer Primary Key Implementation which is making a few more customisations to use integer primary keys
    • The changes necessary to provide multi-tenancy have been isolated to this commit.

Я планирую обновить решение по мере выпуска версии 1.1 ASP.NET Identity.

Я надеюсь, что другие найдут применение в выпущенном мною пакете nuget, любые отзывы более чем приветствуются и, пожалуйста, поднять любые обнаруженные вами проблемы.


Обновлять

Теперь решение обновлено для использования версии 2.0 Microsoft.AspNet.Identity.EntityFramework < / а>.

person James Skimming    schedule 26.11.2013
comment
Привет, Джеймс, это именно то, что мне нужно в моем текущем проекте, но у меня возникли проблемы с его добавлением. Во-первых, пространство имен AspNet.Identity.EntityFramework.Multitenant; не сработает, у меня правильная версия EF, есть ли что-то очевидное, что я должен проверить? Спасибо - person Fred Johnson; 18.03.2015
comment
Как оказалось, не более чем через минуту я нашел ответ. Возможно, будет полезно добавить это к вашему описанию, и большое спасибо за эту работу! Установочный пакет AspNet.Identity.EntityFramework.Multitenant - person Fred Johnson; 18.03.2015
comment
Спасибо за это. Мой вопрос: можно ли это реализовать, как логины Facebook / Google / Microsoft? То есть у меня один из многих проектов. Когда пользователь щелкает логин из любого проекта, я хотел бы, чтобы они перешли на этот общий сайт входа, который (ваш код) позволяет им входить в систему или использовать FB / G / MS, а затем возвращает мне то, что мне нужно (Identity + Claims) обратно на какой бы сайт они ни пришли. Точно так же, как если я интегрирую FB / G / MS в любой сайт, он фактически переходит в FB / G / MS, аутентифицируется и возвращается обратно на мой сайт. Каким бы беспроблемным ни был вход в FB / G / MS, я хочу этого на этом мультитенантном сайте. - person Grandizer; 30.03.2015
comment
@Grandizer, если я вас правильно понимаю, да, он также работает с внешними логинами, например. FB / Google / MS. - person James Skimming; 02.04.2015
comment
@JamesSkimming спасибо за хорошую работу, Джеймс. Есть ли документация о том, как начать работу с примерами решений? Или, может быть, где-нибудь доступен более полный пример проекта? Я вижу, как вы передаете tenantid в конструкторе AccountController, но я немного не понимаю, как дальше двигаться дальше. - person darren; 16.05.2015
comment
@mongoose_za после того, как установил tenantid, вы сможете использовать UserManager, как и раньше, это и есть намерение. - person James Skimming; 18.05.2015
comment
привет, не могли бы вы обновить до 2.2 и установить контекст тената пользователя при входе в систему, чтобы фильтровать таблицы только для его тенната? - person Transformer; 25.02.2017

Да, мы явно оставили это как сценарий расширяемости. Вы должны иметь возможность сделать это, переопределив свойства UserManager и реализовав свой собственный IUserStore. Хотя вы также можете потенциально расширить EF UserStore и просто добавить tenantId для своего пользователя.

person Hao Kung    schedule 18.11.2013
comment
Спасибо за ответ, очень признателен. Я смотрел на ночные сборки, поскольку они обеспечивают большую расширяемость моделей. В настоящее время я создаю прототип решения. - person James Skimming; 19.11.2013