Jwt System.InvalidOperationException:验证Azure AD令牌时IDX20803

Jwt System.InvalidOperationException:验证Azure AD令牌时IDX20803,jwt,azure-active-directory,bearer-token,.net-core-3.0,Jwt,Azure Active Directory,Bearer Token,.net Core 3.0,我在Angular中有一个SPA客户端,它成功登录Azure AD并生成一个令牌,然后通过Authorization:Bearer${token}将其传递给.Net Core3.0 API。我然后尝试使用[Authorize]验证令牌以检查并允许访问其余API调用,我们仍然使用ver:1.0,JWT头中没有nonce。我在ConfigureServices方法中有以下代码: services.AddAuthentication(JwtBearerDefaults.AuthenticationSc

我在Angular中有一个SPA客户端,它成功登录Azure AD并生成一个令牌,然后通过Authorization:Bearer${token}将其传递给.Net Core3.0 API。我然后尝试使用[Authorize]验证令牌以检查并允许访问其余API调用,我们仍然使用ver:1.0,JWT头中没有nonce。我在ConfigureServices方法中有以下代码:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
               .AddJwtBearer(options =>
               {
                   options.Authority = "https://login.microsoftonline.com/common";
                   options.RequireHttpsMetadata = false;
                   options.TokenValidationParameters = new TokenValidationParameters
                   {
                       ValidateIssuer = true,
                       ValidIssuer = options.Authority,
                       ValidateLifetime = true,
                       ValidateAudience = true,
                       ValidAudience = "{myClientID}",
                       IssuerValidator = (issuer, token, parameter) => "https://sts.windows.net/{MyIssuer}/"
                   };
               });

            services.AddAuthorization(options =>
            {
                options.DefaultPolicy =
                     new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
                    .RequireAuthenticatedUser()
                    .Build();
            });
当我使用locahost运行项目时,它工作正常,但我将代码部署到服务器上,得到以下错误消息:

Exception occurred while processing message.

Exception: 
System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it.
 ---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it.
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---

上面的消息表明,某些内容不允许我连接到站点进行验证,我的参数是否正确?我使用jwt.io来检查令牌,它说签名是有效的,在主体上我可以看到我期望的aud:、iss:amr:[pwd]等值。我对Azure AD和令牌验证是新手,所以请耐心等待。我有什么遗漏吗?感谢您

此错误是由于应用程序无法连接到Azure AD元数据终结点造成的。 它需要从那里开始加载配置,包括应用程序可以用来验证令牌签名的公钥


要么是防火墙之类的东西阻塞了连接,要么是Azure广告不太可能关闭

此错误是由于您的API无法加载OpenID发现文档/。众所周知的/OpenID配置,您是否在服务器上设置了防火墙?谢谢juunas和@Nan yu,我想我必须通过基础设施解决这个问题,是否有任何URL列表必须列入白名单,以便防火墙允许显示链接/配置?我可以看到…这是否足够?同样从我试图运行应用程序的服务器上,我关闭了防火墙,我从Windows防火墙的高级安全选项卡和域配置文件检查了它,私有配置文件和公共配置文件显示Windows防火墙关闭谢谢你@juunas,我明天将与他们一起检查。另外,我是否需要在.net核心代码中包含CORS问题的[link]?什么CORS问题?您能再解释一下吗?我发布的异常是来自EventViewer,但当我看到DevTools在http://MyInternalAPIURL“来自源”http:/MyClientURL已被CORS策略阻止:请求的资源上不存在“访问控制允许源”标头。API在.net Core 3.0中,客户端来自Angular,因此我认为我们可能需要在.WithOriginsallowedOriginsjuunas和@nan yu中包含microsoft url。感谢您为我们指明了正确的方向。juunas感谢您的验证,当我们在上面的评论中列出URL中找到的站点时,一切都神奇地工作了,没有CORS问题。非常感谢。我将把它标为答案。。