我的配置有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证书添加到受信任的根证书。
答案 0 :(得分:17)
答案 1 :(得分:15)
我遇到了这个问题,需要按照Robert Muehsig answer信任证书。
但这本身并不足够。 我正在使用承载令牌认证。进一步挖掘后发现我需要将DelayLoadMetadata标志设置为true。
所以在我的Web API启动中:
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
DelayLoadMetadata=true
});
在此之后,证书信任更改它开始工作。我知道这与原始问题的配置不同,但在我搜索过程中,我一直看到这篇文章,所以我想把它放在这里,让其他人偶然发现它...
答案 2 :(得分:4)
从我的记忆中,这个错误主要是由于证书信任/网络访问问题引起的。由于您在本地主机中运行所有组件,因此它绝对不是网络问题。 我假设你是从VS Dev环境运行的。
一些事情:
此外,按照此处所述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主机停止了。一旦启动它,其他服务就可以再次获得他们正在寻找的元数据。