IdentityServer и клиентский внешний вход - PullRequest
0 голосов
/ 19 октября 2018

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

Например, один клиент поддерживает только Facebook, другой - только Twitter?

... или одни и те же внешние логины всегда используются для всех клиентов в одном экземпляре сервера идентификации, поэтому мне потребуется дваотдельные экземпляры сервера идентификации?

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете настроить Client для поддержки определенного внешнего поставщика с помощью свойства IdentityProviderRestrictions.Это свойство содержит список имен провайдеров, которые могут быть использованы для клиента.Пустой список (по умолчанию) означает, что разрешены все поставщики.

например

new Client {
    ClientId = "yourclient",
    ClientName = "Your Client",
    .
    .
    .
    IdentityProviderRestrictions = {"Facebook", "Google"};
}

Это свойство используется для фильтрации внешних поставщиков в примере IdentityServer AccountController:

    if (context?.ClientId != null)
    {
        var client = await _clientStore.FindEnabledClientByIdAsync(context.ClientId);
        if (client != null)
        {
            allowLocal = client.EnableLocalLogin;

            if (client.IdentityProviderRestrictions != null && client.IdentityProviderRestrictions.Any())
            {
                providers = providers.Where(provider => client.IdentityProviderRestrictions.Contains(provider.AuthenticationScheme)).ToList();
            }
        }
    }

В вашем AccountController вы можете идентифицировать клиента, делающего запрос аутентификации, используя AuthorizationRequest.ClientId.Затем вы можете изменить функциональность входа в систему на основании запроса от клиента.

AuthorizationRequest можно получить из IIdentityServerInteractionService.GetAuthorizationContextAsync, а IIdentityServerInteractionService - через DI.

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