using System; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Microsoft.AspNetCore.Authentication { public static class AzureAdServiceCollectionExtensions { public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder) => builder.AddAzureAdBearer(_ => { }); public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder, Action configureOptions) { builder.Services.Configure(configureOptions); builder.Services.AddSingleton, ConfigureAzureOptions>(); builder.AddJwtBearer(); return builder; } private class ConfigureAzureOptions: IConfigureNamedOptions { private readonly AzureAdOptions _azureOptions; public ConfigureAzureOptions(IOptions azureOptions) { _azureOptions = azureOptions.Value; } public void Configure(string name, JwtBearerOptions options) { options.Audience = _azureOptions.ClientId; options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}"; } public void Configure(JwtBearerOptions options) { Configure(Options.DefaultName, options); } } } }