ASP.NET Core с IdentityServer4 - несколько арендаторов - изменение полномочий во время выполнения - PullRequest
1 голос
/ 06 октября 2019

У нас есть платформа SaaS, в которой мы находимся в процессе перехода на мультитенантную архитектуру. У нас есть несколько микро-сервисов и один Identity-сервер, который использует IdentityServer4.

В каждом сервисе в Startup.cs у нас есть следующий код:

services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(options =>
        {
            options.Authority = Configuration["URLs:IdentityServer"];
            options.RequireHttpsMetadata = false;

            options.ApiName = "apiInternal";
        });

Мы используем субдомены, чтобы различатьарендаторы и каждый арендатор имеет свою собственную базу данных.

Единственная проблема, с которой мы сталкиваемся, связана с IdentityServer.

Наша цель состоит в том, чтобы у нас был свой сервис идентификации для каждого арендатора. Но мы не могли понять, как заменить полномочия во время выполнения на основе субдомена (арендатора).

На самом деле, мы попробовали этот подход:

Как установить полномочия наПараметры промежуточного программного обеспечения OpenIdConnect динамически?

После некоторых изменений он работал только с одной проблемой, полномочия меняются только для первого запроса, то есть, если первый запрос был от tenant1.example.com, он будет использоватьполномочия пользователя tenant1, но любой другой запрос «изменит» полномочия, но будет использовать полномочия tenant1.

Например, если второй запрос от tenat2.example.com, мы увидим код, который изменяет полномочия, но на самом деле он не заменяет полномочия.

Я подозреваю, что произошло изменение прав доступа, но он не инициализирует данные IdentityServer.

Если это действительно проблема, у меня есть пара вопросов:

Как мне это решить?

Как вы думаете, какое влияние на производительность будет иметь тот факт, что при каждом запросе нам придется получать данные IdentityServer для проверки токена?

Любые другие идеи, что было бы наилучшей практикой для idenityserver4 с мультитенантным подходом?

...