IDX10803:无法创建获取配置

IDX10803: Unable to create to obtain configuration

我的配置有 3 个站点:身份服务器 (Idp)、Windows 身份验证主机和我的最终用户客户端站点。在客户端站点上,我请求一个装饰有 [Authorize] 的控制器,然后 Identity Server 启动。

端口 44305 的 windows 主机显然抛出异常,身份服务器收到状态 500。我可以毫无问题地访问 windows 主机站点 URL。我取回了一份 XML 文档

如何调试并找出停止此身份验证过程的异常或错误是什么?我得到一个 3 部分异常,最里面如下

InvalidOperationException: IDX10803: Unable to create to obtain configuration from: 'https://localhost:44305/'.

Microsoft.IdentityModel.Protocols.ConfigurationManager`1.<GetConfigurationAsync>d__3.MoveNext() in ConfigurationManager.cs

Windows 主机 OWIN 启动正在使用 UseWindowsAuthenticationService

身份服务器 OWIN 正在使用 AuthenticationOptions = WsFederationAuthenticationOptions

var wsFederationOptions = new WsFederationAuthenticationOptions
            {
                AuthenticationType = "windows",
                Caption = "Windows",
                SignInAsAuthenticationType = signInAsType,
                MetadataAddress = "https://localhost:44305/",
                Wtrealm = "urn:idsrv3"
            };
            app.UseWsFederationAuthentication(wsFederationOptions);
        }

这是请求和响应

Request URL:https://localhost:44315/
Request Method:GET
Status Code:302 Found
Response:Location:https://localhost:16433/connect/authorize?client_id=hms2015&redirect_uri=...

Request: https://localhost:16433/connect/authorize?client_id=hms2015&redirect_uri=...
Request Method:GET
Status Code:302 Found
Location:https://localhost:16433/login?signin=fde7508a6634698847c3076c9028604b

Request URL:https://localhost:16433/login?signin=fde7508a6634698847c3076c9028604b
Request Method:GET
Status Code:500 Internal Server Error

我没有明显的 SSL 问题。使用我的浏览器,我可以在没有任何警告的情况下打开来自不同站点的所有页面。我将本地主机 IIS Express 证书添加到受信任的根证书中。

在我的记忆中,抛出这个错误的主要原因是证书信任/网络访问问题。既然你是运行本地主机的所有组件,那肯定不是网络问题。 我假设您 运行 来自 VS Dev 环境。

两件事:

  • 尝试在 IIS 服务器中托管组件
  • 不使用本地主机,而是为您的主机创建一个自签名证书,并尝试将您的主机名指定为主题名称(请注意 - 用于签名的 idsrv3test 证书和用于主机 SSL 的自签名证书)

此外,按照此处所述分配读取证书的权限https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates

如果您仍然遇到此问题,请尝试通过 Wireshark 监控流量(在这种情况下 Fiddler 将不起作用)

团队中的另一位开发人员帮助找到了问题。端口 44305 上的 Windows 身份验证主机 运行 已禁用匿名。启用后,重定向过程再次开始工作。

遗憾的是,我们实际上并没有检测到错误,但是通过反复试验(黑客攻击)它被修复了。我的主要问题是如何调试 OWIN 应用程序才能真正看到 HTTP 500 的详细信息。我希望 IdentityServer3 日志可以记录来自 Win Auth 主机的响应。另外为什么不是 401 响应代码?

出于测试目的,我添加了以下块作为管道中的第一个中间件。这实际上会在发生异常时记录异常。这让我看到我的 500 实际上是 401。

        appBuilder.Use(async (context, next) =>
        {
            try
            {
                await next();
            }
            catch(Exception ex)
            {
                Log.Error(ex, "OWIN error.");
            }

        });

我遇到了同样的问题 - SSL 证书似乎不受信任。为了解决这个问题,我将 "localhost" IIS Express 证书从个人 CertStore 移到了受信任的根证书颁发机构,问题就消失了。

也可能是因为代理身份验证。尝试检查 login.microsoftonline.com:XXX 调用的 fiddler 流量,看看它是否返回 407 错误代码。

如果您看到 407 错误代码,您需要在 web.config

中启用代理身份验证

我遇到了这个问题,需要根据 .

信任证书

但这本身还不够。 我正在使用不记名令牌身份验证。进一步挖掘表明我需要将 DelayLoadMetadata 标志设置为 true。

所以在我的 Web API 启动中:

app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServerBearerTokenAuthenticationOptions
{
    DelayLoadMetadata=true
});

在此之后和证书信任更改后,它开始工作。我知道这与原始问题的配置不同,但在我的搜索过程中,我一直遇到这个 post 所以我想我会把它放在这里供其他偶然发现它的人使用...

我的团队面临以下问题:[错误] Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:处理消息时发生异常。 System.InvalidOperationException:IDX10803:无法从“https://[your identity server domain]/.well-known/openid-configuration'. ---> System.IO.IOException: IDX10804: Unable to retrieve document from: 'https://[your 身份服务器域].well-known/openid-configuration”获取配置。 ---> System.Net.Http.HttpRequestException: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应 ---> System.Net.Sockets.SocketException: A连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应 在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机、Int32 端口、CancellationToken cancellationToken) --- 内部异常堆栈跟踪结束 ---

我们花了很多时间来找出原因。最后,只是一个非常简单的错误,在 UAT 环境中,"C:\Windows\System32\drivers\etc" 中的主机文件设置不正确。主机文件中定义的域与 IIS 中的域绑定不匹配。

在我的例子中,我是愚蠢的并且停止了 IdentityServer 主机。一旦我启动它,其他服务就可以再次获得他们正在寻找的元数据。