如何将“AzureAd”详细信息显式传递给 AddMicrosoftIdentityWebApi 方法以进行令牌验证
Posted
技术标签:
【中文标题】如何将“AzureAd”详细信息显式传递给 AddMicrosoftIdentityWebApi 方法以进行令牌验证【英文标题】:How to explicitly pass the"AzureAd" details to AddMicrosoftIdentityWebApi method for token validation 【发布时间】:2021-03-29 01:54:03 【问题描述】:我正在使用 Microsoft.Identity.Web
库来验证我的 .Net Core Web API 中的令牌。
public void ConfigureServices(IServiceCollection services)
------------
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration);
------------
但根据文档here,我需要通过 IConfiguration 实例将 AzureAd(将包含tenantId、ClientId、域、实例等的对象)对象传递给AddMicrosoftIdentityWebApi
方法.截至目前,此方法尝试从本地 appsettings.json 文件加载此对象。我想将这些详细信息显式传递给方法AddMicrosoftIdentityWebApi
,因为我们没有在本地 appsettings.json 文件中存储任何键值(所有都来自 Consul 和 Vault)。
我试图覆盖配置对象但无法做到。
如何将此 AzureAd 对象传递给 AddMicrosoftIdentityWebApi
方法,以便它可以为我验证令牌?
由于我是这个图书馆的新手,我在这里错过了什么吗?可能是错误的验证方法?
提前谢谢....
更新: 嘿.. 我设法明确地传递了这些值。
Action<JwtBearerOptions> configureJwtBearerOptions = Test1;
static void Test1(JwtBearerOptions t1)
t1.Audience = $"appSettings.adCredentials.Instance/appSettings.adCredentials.TenantId";
t1.TokenValidationParameters.ValidAudiences = new string[] appSettings.adCredentials.ClientId, $"api://appSettings.adCredentials.ClientId" ;
Action<MicrosoftIdentityOptions> configureMicrosoftIdentityOptions = Test2;
static void Test2(MicrosoftIdentityOptions t2)
t2.TenantId = appSettings.adCredentials.TenantId;
t2.ClientId = appSettings.adCredentials.ClientId;
t2.Instance = appSettings.adCredentials.Instance;
t2.Domain = appSettings.adCredentials.Domain;
t2.ClientSecret = appSettings.adCredentials.ClientSecret;
IdentityModelEventSource.ShowPII = true;
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(configureJwtBearerOptions, configureMicrosoftIdentityOptions) ;
现在当我从邮递员调用 API 时,它会抛出错误以及状态码 500:
System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://graph.microsoft.com/tenantId/v2.0/.well-known/openid-configuration'.
---> System.IO.IOException: IDX20807: Unable to retrieve document from: 'https://graph.microsoft.com/tenantId/v2.0/.well-known/openid-configuration'. HttpResponseMessage: 'StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent
你能解释一下这个问题以及如何解决这个问题吗?
【问题讨论】:
我认为它有一个你可以使用的重载,它允许你指定一个接受选项的函数。这使您可以根据需要在其中设置值。 您能否举例回答,因为我完全是新手 @samirjamadar 您需要将 tenantId 替换为您的 directoryId 【参考方案1】:在Configuration
之后用"AzureAd"
重载您的AddMicrosoftIdentityWebApi
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
【讨论】:
他在问如果没有可用的 IConfiguration 怎么做。我有同样的问题,我们使用自己的配置格式,需要明确地传递这些值。【参考方案2】:.net 6
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
【讨论】:
以上是关于如何将“AzureAd”详细信息显式传递给 AddMicrosoftIdentityWebApi 方法以进行令牌验证的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GET 或 POST 方法将对象详细信息传递给 index.html 并在 HTML <pre> 标记中显示