0

问题:

我有一个带有 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尝试获取访问令牌的默认策略控制器调用的策略没有控制器。

4

1 回答 1

0

更新:

AddMicrosoftIdentityWebAppAuthentication调用移至 ConfigureServices(在 Startup.cs 中)中的其他身份验证实现之上,解决了这个问题,并且我可以从使用我的其他身份验证实现再次进行身份验证的调用中获取访问令牌。

于 2020-10-07T18:12:11.363 回答