问题:
我有一个带有 OpenIdConnect 身份验证的 ASP.NET Core 3.1 Web 应用程序。我在一个单独的(非默认)策略上添加了 Microsoft 身份验证 (Azure Active Directory v2),以便在一个特定控制器上使用。
httpContext.GetTokenAsync("access_token")
当由使用我的原始 OpenIdConnect 实现授权的控制器调用时,使用以下行(在 Startup.cs 中)添加 Microsoft 标识会导致返回 null。httpContext
被调用的对象仍然具有来自原始 OpenIdConnect 实现的所有自定义声明。删除以下行可以解决问题,我可以成功获取访问令牌。
services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAd", "AzureAdOpenIdConnect", "AzureAdOpenIdCookies");
其他详情:
Microsoft 标识实施采用单独的策略
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("oidcFlow") // scheme name for my original OpenIdConnect auth implementation
.Build();
options.AddPolicy("AzureAdOidc", new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("AzureAdOpenIdConnect", "AzureAdOpenIdCookies") // scheme names used above when initializing Microsoft Identity
.Build());
});
AzureAdOidc
尝试获取访问令牌的默认策略控制器调用的策略没有控制器。