问题描述
问题:
我有一个具有OpenIdConnect身份验证的ASP.NET Core 3.1 Web应用程序。我在另一(非默认)策略上添加了Microsoft身份验证(Azure Active Directory v2),以在一个特定控制器上使用。
在具有我的原始OpenIdConnect实现授权的控制器调用的情况下,在下面一行(在Startup.cs中)添加Microsoft Identity会使httpContext.GetTokenAsync("access_token")
返回null。被调用的httpContext
仍然具有原始OpenIdConnect实现的所有自定义声明。删除以下行即可解决此问题,我可以成功获取访问令牌。
services.AddMicrosoftIdentityWebAppAuthentication(Configuration,"AzureAd","AzureAdOpenIdConnect","AzureAdOpenIdCookies");
其他详细信息:
Microsoft Identity实现是在单独的策略上
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
策略的控制器被试图获取访问令牌的默认策略控制器调用。
解决方法
更新:
将AddMicrosoftIdentityWebAppAuthentication
调用移到ConfigureServices中其他auth实现的上方(在Startup.cs中)解决了此问题,我可以从通过我的其他auth实现进行身份验证的调用中获取访问令牌。