AddOpenIdConnect avec un service de configuration externe

voix
0

J'ajoute à mon application OpenID Connect comme ceci:

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

Je voudrais être en mesure d'utiliser un autre service pour obtenir le secret comme celui-ci:

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

J'ai vu il y a utilisation de app.UseOpenIdConnectAuthenticationmais je ne vois pas dans le package NuGet.

J'ai installé les éléments suivants:

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

Comment puis-je faire ceci?

Créé 13/02/2020 à 23:55
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Il est possible d'exécuter une classe de configuration post qui peut injecter des services. Ainsi:

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");
    }
}
Créé 14/02/2020 à 00:25
source utilisateur

voix
0

Dans le cas décrit, je vous recommande étendre la configuration plutôt que d'utiliser DI dans l'action.

Pour secrets d'accès, vous pouvez ajouter des fournisseurs de configuration et de continuer à utiliser Configuration.GetValue dans la méthode de ConfigureServices.

Pour Azure Key-Vault est sous Microsoft.Extensions.Configuration.AzureKeyVault paquet de.

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

Pour AWS - Amazon.Extensions.Configuration.SystemsManager

Créé 14/02/2020 à 00:46
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more