AddOpenIdConnect со службой внешней настройки - PullRequest
1 голос
/ 13 февраля 2020

Я добавляю OpenIdConnect в свое приложение следующим образом:

.AddOpenIdConnect("oidc", options =>
{
     var clientSecret = Configuration.GetValue<string>("clientSecret");
     options.ClientSecret = clientSecret;
});

Я бы хотел использовать другой сервис для получения секрета, подобного этому:

.AddOpenIdConnect("oidc", (services, options) =>
{
    var secretService = services.GetService<ISecretService>();
    var clientSecret = secretService.Get("clientSecret");
    options.ClientSecret = clientSecret;
});

I Я видел, что есть использование app.UseOpenIdConnectAuthentication, но я не вижу его в пакете nuget.

У меня установлено следующее:

<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.0" />

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Возможно выполнить класс постконфигурации, который может внедрять сервисы. Вот так:

public class OpenIdConnectPostConfigureOptions : IPostConfigureOptions<OpenIdConnectOptions>
{
    private readonly ISecretsService _secretsService;

    public OpenIdConnectPostConfigureOptions(ISecretsService secretsService)
    {
        _secretsService = secretsService;
    }

    public async void PostConfigure(string name, OpenIdConnectOptions options)
    {
        options.ClientSecret = await _secretsService.Get("clientSecret");
    }
}
0 голосов
/ 14 февраля 2020

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

Чтобы получить доступ к секретам, вы можете добавить поставщиков конфигурации и продолжать использовать Configuration.GetValue в ConfigureServices method.

Для Azure хранилище ключей находится под Microsoft.Extensions.Configuration.AzureKeyVault пакет nuget.

public static void Main(string[] args)
{
    CreateWebHostBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            if (env.IsLocal())
            {
                ...
            }
            else
            {
                config.AddAzureKeyVault(keyVaultUri);
            }
        })
        .Build()
        .Run();
}

Для AWS - Amazon.Extensions.Configuration.SystemsManager

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