Is there a way to use IdentityModel for automated token manegement with HTTP Clients inside Azure Activity Functions?

996 views Asked by At

Let's say I have an HTTPClient configured in a custom FunctionsStartup class to be used inside an Azure Activity function, and I wanted that client to piggyback on IndentityModel's authentication token management, is there a reliable way to do this? I tried looking for solutions such as this one:

public override void Configure(IFunctionsHostBuilder builder)
{
    // Config setup code removed for brevity

    var identitySettings = _config
        .GetSection("AuthenticationConfiguration")
        .Get<AuthenticationConfiguration>();

    // Configure token management
    builder.Services.AddAccessTokenManagement(options =>
    {
         options.Client.Clients.Add("auth", new ClientCredentialsTokenRequest
         {
             Address = $"{identitySettings.Url}/connect/token",
             ClientId = identitySettings.ClientId,
             ClientSecret = identitySettings.ClientSecret,
             Scope = identitySettings.Scopes[0]
         });
    });

    // Piggyback token management to HTTPClient
    builder.Services.AddHttpClient<IService, Service>(x =>
    {
        var settings = _config
           .GetSection("Configuration")
           .Get<Configuration>();
        x.BaseAddress = new Uri(settings.Url);
    }).AddClientAccessTokenHandler("auth");
}

But it doesn't work because Azure function's IServiceCollection is different from ASP.NET Core's IServiceCollection.

I also looked at these links but that doesn't still answer the question.

1

There are 1 answers

0
terrible-coder On BEST ANSWER

Figrued it out. You need to install IdentityModel and IdentityModel.AspNetCore packages from NuGet as they expose the methods needed to setup automated token management.

More info