.Net Core // Azure Active Directory // IDX20804和IDX20803:无法从以下位置获取配置:[[PII被隐藏]

时间:2019-01-22 15:37:09

标签: c# .net-core azure-active-directory

将应用程序部署到测试URL时遇到问题。当我们访问URL时,会收到IDX20804和IDX20803错误。 (现在,我们的测试网址是http而不是https。通过https访问时,证书出现问题)

IOException:IDX20804:无法从以下位置检索文档:“ [PII被隐藏]”。 InvalidOperationException:IDX20803:无法从以下位置获取配置:“ [PII被隐藏]”。 Error screen link for more information

在我的startup.cs中,

services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCustomSecurityAzureAd(options => Configuration.Bind("AzureAd", options))
        .AddCookie();

如果我没记错的话,[PII隐藏]实际上是指向元数据配置文档的链接。它链接到下面两个链接之一。我可以从我的工作站访问这些URL,没有问题。 https://login.microsoftonline.com/[TenantId]/v2.0/.well-known/openid-configuration https://login.microsoftonline.com/[TenantId]/.well-known/openid-configuration

我的AzureAdAuthenticationBuilderExtensions.cs,

private class ConfigureAzureOptions : IConfigureNamedOptions<OpenIdConnectOptions>
    {
        private readonly AzureAdOptions _azureOptions;
        public const string ObjectIdentifierType = "http://schemas.microsoft.com/identity/claims/objectidentifier";

        public ConfigureAzureOptions(IOptions<AzureAdOptions> azureOptions)
        {
            _azureOptions = azureOptions.Value;
        }

        public void Configure(string name, OpenIdConnectOptions options)
        {
            options.ClientId = _azureOptions.ClientId;
            options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}";
            options.UseTokenLifetime = true;
            options.CallbackPath = _azureOptions.CallbackPath;
            options.RequireHttpsMetadata = false;

            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = false,
                //Not sure which token validation parameters to modify...
                /*
                ClockSkew = TimeSpan.FromMinutes(2),
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true
                */
            };

            options.Events = new OpenIdConnectEvents
            {
                OnAuthenticationFailed = context =>
                {
                    context.Response.Redirect("/Home/Error");
                    context.HandleResponse();
                    return Task.CompletedTask;
                },
                OnTokenValidated = async context =>
                {
                    await TokenValidated(context, options);
                }
            };
        }

TokenValidated()是该方法中的一个单独方法。它根据当前登录的用户和应用程序ID添加声明。我认为这个问题并不重要。

也许因为我的测试URL是http而无法访问配置文档?并且配置文件是https? 还是我必须修改一些令牌验证参数?我不确定我需要修改其中的哪个。

让我知道是否需要提供更多详细信息。 任何帮助将不胜感激。谢谢。

0 个答案:

没有答案