Защитите один ресурс API с несколькими IDServer - PullRequest
0 голосов
/ 23 марта 2019

Итак, у меня есть веб-API .Net Core, давайте назовем его «CMS», и в настоящее время он защищен сервером IdentityServer4 в качестве ресурса API. Я настроил сервер ID4 для получения претензии IDP MyIDP.

По деловым причинам мне нужно предоставить клиенту собственный IdentityServer, но они также хотели бы, чтобы их пользователи имели доступ к тому же API-интерфейсу CMS.

Возможно ли это? В StartUp.cs моего API CMS он в настоящее время выглядит так

services.AddAuthentication("Bearer")
    .AddIdentityServerAuthentication(options =>
                {
                    options.Authority = "http://www.idserver1.com";   
                    options.RequireHttpsMetadata = true; 
                    options.ApiName = "cmsapi"; 
                });

поэтому, чтобы добавить защиту для другого id-сервера, я предполагаю, что я мог бы просто скопировать AddAuthentication, но изменить имя схемы с Bearer на другое, но это кажется неправильным?

Причина, по которой я считаю, что это возможно, потому что я смог добавить несколько внешних провайдеров в свое веб-приложение таким образом. Но это для знака s в потоке, а не для API.

Если это возможно, как мне поступить?

1 Ответ

0 голосов
/ 23 марта 2019

Это может быть достигнуто довольно просто. Предположим, вы хотите выдать отдельный поддомен для каждого из ваших клиентов: auth0.yourdomain.com, auth1.yourdomain.com и хотите, чтобы ресурс API соответствовал токену любого из этих провайдеров идентификации.

Предполагая, что ключ подписи тот же, вы можете настроить URI общего эмитента на стороне сервера идентификации в Startup.cs->ConfigureServices(...):

        var builder = services.AddIdentityServer(options => {
                              options.IssuerUri = "auth.yourdomain.com";
                              })
                 ...

А затем на стороне API вы можете уважать URI одного эмитента, не дублируя схемы аутентификации:

services.AddAuthentication("Bearer")
    .AddIdentityServerAuthentication(options =>
                {
                    options.Authority = "auth.yourdomain.com";   
                    options.RequireHttpsMetadata = true; 
                    options.ApiName = "cmsapi"; 
                });    

Единственное, что я не могу вспомнить, это то, что схема запроса (http / https) выведена для uri эмитента или нет, поэтому вам может потребоваться указать и это (https:\\auth.yourdomain.com). Помимо этого, такого рода реализация должна быть достаточно прозрачной для ваших клиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...