微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么添加Microsoft Identity auth会导致另一个策略的GetTokenAsync“ access_token”返回null?

如何解决为什么添加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 举报,一经查实,本站将立刻删除。