如何在没有 appsettings 部分的情况下使用 AddMicrosoftIdentityWebApiAuthentication?
How use AddMicrosoftIdentityWebApiAuthentication without appsettings section?
我正在 .NET 5 中实施 Azure Active Directory API。
我目前在 .NET Core 2.2 上完美地 API 运行。
这是旧的工作代码:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options =>
{
options.Instance = "https://login.microsoftonline.com/";
options.Domain = backOfficeADDomain;
options.TenantId = backOfficeADTenantId;
options.ClientId = $"api://{backOfficeADAPIClientId}";
options.ClientSecret = backOfficeADAPISecret;
});
但是自从更新到 .NET 5 后,我收到了这个警告:
'AzureADAuthenticationBuilderExtensions.AddAzureADBearer(AuthenticationBuilder, Action)' is obsolete: 'This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.'
所以我尝试将其更新为:
services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
appsettings.json 中的“AzureAd”部分似乎是传递凭据的唯一方法。如何手动输入实例、域、ClientId 等?我不使用 appsettings.json,所有数据都是从 AzureKeyVault 手动检索的。
谢谢!
好的,我找到了!
其实很简单:
IConfigurationSection azureAdSection = _configuration.GetSection("AzureAd");
azureAdSection.GetSection("Instance").Value = "https://login.microsoftonline.com/";
azureAdSection.GetSection("Domain").Value = backOfficeADDomain;
azureAdSection.GetSection("TenantId").Value = backOfficeADTenantId;
azureAdSection.GetSection("ClientId").Value = backOfficeADAPIClientId;
azureAdSection.GetSection("ClientSecret").Value = backOfficeADAPISecret;
services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
经过一整天的复杂代码重构,我的大脑似乎无法理解如此简单的解决方案。
请注意,我还必须从 clientId 中删除“api://”。好像是新版本自动添加的。它试图验证“api://api://”。
假设您有充分的理由不使用设置中的配置值,您可以添加内存提供程序。
您还可以创建仅用于此扩展方法的配置:
var azureAdConfig = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string>
{
{"AzureAd:Instance", "https://login.microsoftonline.com/"},
{"AzureAd:Domain", backOfficeADDomain}
//...
})
.Build();
services.AddMicrosoftIdentityWebApiAuthentication(azureAdConfig);
我正在 .NET 5 中实施 Azure Active Directory API。 我目前在 .NET Core 2.2 上完美地 API 运行。
这是旧的工作代码:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options =>
{
options.Instance = "https://login.microsoftonline.com/";
options.Domain = backOfficeADDomain;
options.TenantId = backOfficeADTenantId;
options.ClientId = $"api://{backOfficeADAPIClientId}";
options.ClientSecret = backOfficeADAPISecret;
});
但是自从更新到 .NET 5 后,我收到了这个警告:
'AzureADAuthenticationBuilderExtensions.AddAzureADBearer(AuthenticationBuilder, Action)' is obsolete: 'This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.'
所以我尝试将其更新为:
services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
appsettings.json 中的“AzureAd”部分似乎是传递凭据的唯一方法。如何手动输入实例、域、ClientId 等?我不使用 appsettings.json,所有数据都是从 AzureKeyVault 手动检索的。
谢谢!
好的,我找到了!
其实很简单:
IConfigurationSection azureAdSection = _configuration.GetSection("AzureAd");
azureAdSection.GetSection("Instance").Value = "https://login.microsoftonline.com/";
azureAdSection.GetSection("Domain").Value = backOfficeADDomain;
azureAdSection.GetSection("TenantId").Value = backOfficeADTenantId;
azureAdSection.GetSection("ClientId").Value = backOfficeADAPIClientId;
azureAdSection.GetSection("ClientSecret").Value = backOfficeADAPISecret;
services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
经过一整天的复杂代码重构,我的大脑似乎无法理解如此简单的解决方案。
请注意,我还必须从 clientId 中删除“api://”。好像是新版本自动添加的。它试图验证“api://api://”。
假设您有充分的理由不使用设置中的配置值,您可以添加内存提供程序。
您还可以创建仅用于此扩展方法的配置:
var azureAdConfig = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string>
{
{"AzureAd:Instance", "https://login.microsoftonline.com/"},
{"AzureAd:Domain", backOfficeADDomain}
//...
})
.Build();
services.AddMicrosoftIdentityWebApiAuthentication(azureAdConfig);