如何解决为什么添加Microsoft Identity auth会导致另一个策略的GetTokenAsync“ access_token”返回null?
问题:
我有一个具有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实现进行身份验证的调用中获取访问令牌。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。