Как реализовать функциональность Multi-Tenant в asp.net-ядре

У меня есть приложение Asp.net Core. Я хочу, чтобы несколько / разные Арендаторы (Клиенты) имели доступ к одному и тому же приложению, но с разными URL. У меня есть общая база данных для всех арендаторов (клиентов). Так что это основная часть, я хочу разместить свое приложение в домене, скажем... www.myapplication.com, а затем разрешить другому Арендатору (клиенту) получить доступ к одному и тому же приложению, используя

1.www.TenantOne.myapplication.com

2.www.TenanatTwo.myapplication.com.

3.www. {TENANCY_NAME}.myapplication.com

Я не могу найти информацию о том, как это сделать, и я застрял. Как это сделать? Пожалуйста, предоставьте код. Благодарю.

3 ответа

Как и предполагал Сараванан, эти типы вопросов не относятся к SO. Для начала, я предлагаю вам начать поиск, есть ли какие-либо фреймворки, такие как SaaSKit, для добавления многопользовательского уровня в конвейер.

Важной частью является знать, откуда поступает каждый запрос. Использование поддоменов - хороший способ для достижения этой цели, а промежуточное ПО - хорошее место для "идентификации" вашего арендатора. У вас может быть база данных для постоянных клиентов, но реализация полностью зависит от вас. Я также написал небольшую статью на эту тему. Хотя это не ядро ​​ASP.NET, принципы все еще применяются.

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

https://dotnetthoughts.net/building-multi-tenant-web-apps-with-aspnet-core/

В нем автор разбивает запрашивающий URL на массив строк, разделенных точкой в ​​адресе. Переменная 'поддомен' затем устанавливается на первый элемент этого массива. В вашем вопросе похоже, что вы можете использовать второй элемент в массиве, но вы поняли идею.

var fullAddress = actionExecutingContext.HttpContext?.Request?
     .Headers?["Host"].ToString()?.Split('.');

var subdomain = fullAddress[0];
//do something, get something, return something

Как вы используете эти данные, зависит от вас. Автор статьи создал атрибут фильтра, но есть много возможностей, таких как передача имени арендатора в качестве параметра сервисной функции.

Извините, вам нужно начать с чего-то, а потом вернуться, чтобы люди помогли вам.

Я бы сказал, что это все сопоставление доменных имен и изменение логики аутентификации для получения идентификатора клиента из URL. После того, как вы определили арендатора, вы просто входите в систему, а затем продолжаете. Как будто у вас может быть база данных с подробностями арендатора, как

tenant1 | tenant1.company.com | guid-ofthe-tenant | etc...

Получив URL-адрес, вы просматриваете приведенную выше таблицу и получаете код арендатора, затем выбираете режим входа и продолжаете.

Если вы уже попробовали что-то, мы будем рады сообщить вам, если это еще не работает.

Другие вопросы по тегам