IDX10803:无法创建以获取配置

Posted

技术标签:

【中文标题】IDX10803:无法创建以获取配置【英文标题】:IDX10803: Unable to create to obtain configuration 【发布时间】:2016-07-17 22:23:19 【问题描述】:

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

端口 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

Identity Server 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 问题。使用我的浏览器,我可以打开来自不同站点的所有页面,而不会发出任何警告。我将我的 localhost IIS Express 证书添加到受信任的根证书中。

【问题讨论】:

【参考方案1】:

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

【讨论】:

我知道这是一篇旧帖子,但是将证书“移动”到受信任的根目录并没有奏效。看起来 IIS 拒绝承认证书。我必须“复制”它,以便它同时存在于个人证书和受信任的根目录中,然后它就可以工作了。 添加 Robert Muehsig 的回答和 LukeP 的评论:我必须从我的 个人证书存储 导出本地主机开发证书并将其导入到 的受信任根证书中机器证书存储 以使其正常工作。【参考方案2】:

我遇到了这个问题,需要根据Robert Muehsig answer 信任证书。

但仅靠这还不够。 我正在使用承载令牌身份验证。进一步挖掘发现我需要将 DelayLoadMetadata 标志设置为 true。

所以在我的 Web API 启动中:

app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServerBearerTokenAuthenticationOptions

    DelayLoadMetadata=true
);

在此和证书信任更改之后,它开始工作。我知道这与原始问题的配置不同,但在搜索过程中,我一直在看到这篇文章,所以我想我会把它放在这里给任何偶然发现它的人...

【讨论】:

感谢您发布此答案。像魅力一样工作。 疯狂的东西 - 一年后,我再次发现了我自己的答案,这对我很有帮助!【参考方案3】:

根据我的记忆,这个错误主要是由于证书信任/网络访问问题引起的。由于您在本地主机中运行所有组件,因此绝对不是网络问题。 我假设您是在 VS 开发环境中运行的。

几件事:

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

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

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

【讨论】:

Karthik,我很想了解有关监控流量的更多信息。如果您能分享您认为有助于了解监控的网页,我将不胜感激。请分享。 @MADCookie- 我假设您在使用 WireShark 流量监控。此链接对 WireShark troyhunt.com/2013/04/… 进行了非常简短的介绍(在 - 数据包捕获部分下)【参考方案4】:

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

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

        );

【讨论】:

【参考方案5】:

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

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

【讨论】:

在我们的例子中,IIS 应用程序池用户没有必要的权限。【参考方案6】:

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

如果看到 407 错误代码,则需要在 web.config 中启用代理身份验证

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

在我的情况下,我很笨,并且停止了 IdentityServer 主机。一旦我启动它,其他服务就可以再次获得他们正在寻找的元数据。

【讨论】:

以上是关于IDX10803:无法创建以获取配置的主要内容,如果未能解决你的问题,请参考以下文章

IDX20803:无法从以下位置获取配置:“https://localhost/IdentityServer/Core/.well-known/openid-configuration”

每日获取 :: SecurityTokenSignatureKeyNotFoundException: IDX10501: 签名验证失败。无法匹配键:

IDX10501:签名验证失败。无法匹配密钥

Modx Evo / Debian 9:无法打开文件(/assets/cache//sitePublishing.idx.php)

IDX10501:签名验证失败。无法匹配键

vs打开项目,创建虚拟目录,提示权限不足无法写入配置文件