IdentityServer и клиентский внешний вход

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

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

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

1 ответ

Решение

Вы можете настроить 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.

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