IDX10803:无法创建以获取配置

时间:2016-03-30 04:52:40

标签: openid-connect identityserver3

我的配置有3个站点:Identity Server(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 Host 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证书添加到受信任的根证书。

8 个答案:

答案 0 :(得分:17)

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

Cert

答案 1 :(得分:15)

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

但这本身并不足够。 我正在使用承载令牌认证。进一步挖掘后发现我需要将DelayLoadMetadata标志设置为true。

所以在我的Web API启动中:

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

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

答案 2 :(得分:4)

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

一些事情:

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

此外,按照此处所述https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates

分配权限以阅读证书

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

答案 3 :(得分:2)

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

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

        });

答案 4 :(得分:0)

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

令人遗憾的是,我们并没有真正发现错误,但是,通过试验&amp;错误(黑客)它是固定的。我的主要问题是如何调试OWIN应用程序,以便我能够真正看到HTTP 500的详细信息。我希望IdentityServer3日志可以记录Win Winh主机的响应。还有为什么不是401响应代码?

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我的团队面临以下问题:[错误] Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:处理消息时发生异常。 System.InvalidOperationException:IDX10803:无法从“ https://[your身份服务器域] /。well-known / openid-configuration”获得配置。 ---> System.IO.IOException:IDX10804:无法从“ https://[your身份服务器域]。知名/ openid配置”中检索文档。 ---> System.Net.Http.HttpRequestException:连接尝试失败,因为一段时间后连接方未正确响应,或者由于连接的主机未能响应而建立的连接失败---> System.Net.Sockets .SocketException:连接尝试失败,因为一段时间后连接方未正确响应,或者建立连接失败,因为连接的主机未能响应    在System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32端口,CancellationToken cancelToken)    ---内部异常堆栈跟踪的结尾---

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

答案 7 :(得分:0)

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