Как автоматически выбрать поставщика аутентификации AzureAD по умолчанию из IdentityServer4? - PullRequest
0 голосов
/ 08 апреля 2019

Хотите включить несколько провайдеров аутентификации для AzureAD из IdentityServer4. (Что-то вроде ссылки: Включить несколько AzureAd в Identityserver4 .NET Core )

Причина такого поведения заключается в том, что каждому веб-клиентскому приложению необходимо будет проходить проверку подлинности в разных клиентских приложениях AzureAD, причем разные роли в приложении определяются с помощью параметра Манифест в AzureAD.

(Итак, это было сделано.)

Другая проблема заключается в том, что вместо того, чтобы предоставлять пользователям несколько вариантов аутентификации при входе через IdentityServer4, они хотели бы автоматически выбрать один из нескольких вариантов аутентификации AzureAD на основе параметра конфигурации для приложения веб-клиента.

Это легко выполнимо с IdentityServer4 или уже доступно?

1 Ответ

0 голосов
/ 10 апреля 2019

Конечная точка авторизации имеет атрибут acr_values ​​, который принимает значение idp в формате idp: name_of_idp (см. В самом низу страницы) http://docs.identityserver.io/en/latest/endpoints/authorize.html

Скажем, у вас есть это в вашем IdentityServer Startup

.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
    // ..
    // Your serverside configuration here
    // ..
});

И это ваш Запуск клиента Mvc Core

.AddOpenIdConnect("oidc", options =>
{
    // ..
    // Your client side configuration here
    // ..
    options.Events.OnRedirectToIdentityProvider = n =>
    {
        n.ProtocolMessage.AcrValues = "idp:oidc"; // Refers to the oidc scheme in Server's startup

        return Task.FromResult(0);
    };
});

Теперь,если вы хотите получить доступ к защищенной конечной точке с помощью клиента, перенаправление авторизации сгенерирует URL-адрес примерно так:

https: // ...? client_id = ... & redirect_uri =... & response_type = ... & сфера = ... & response_mode = ... & ... = одноразовое значение & acr_values ​​= IDP: РСИН & состояние = ... & х-client-SKU = ... & x-client-ver = ...

Это пропустит страницу входа в IdentityServer и перенаправит на выбранный внешний Idp.

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

Не перенаправлять, но вы можете сузить список доступных Idp для клиентов на стороне сервера с помощью IdentityProviderRestrictions

Конфигурация клиента на стороне IdentityServer

new Client
{
    // serverside client configuration

    // ..

    IdentityProviderRestrictions = new string[]{"oidc"},

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