无法从众所周知的/ openid配置中获取配置

时间:2016-06-08 04:52:00

标签: angular asp.net-core asp.net-web-api2 asp.net-core-mvc identityserver3

我正在使用ASP.NET 5,在我的解决方案中,我有Web API,Identity Server和Angular 2项目,我使用Identity Server验证Angular 2客户端,Angular 2客户端通过在http请求中传递令牌来使用web api。 web api验证令牌并给出响应,为此我编写了一个自定义属性来检查用户是否经过身份验证

当我使用API​​时,我遇到异常,Web API返回500内部服务器错误。

System.InvalidOperationException:IDX10803:无法从:' http://xx.xx.xx.x:3926/.well-known/openid-configuration'获取配置。 ---> System.IO.IOException:IDX10804:无法从:' http://xx.xx.xx.x:3926/.well-known/openid-configuration'中检索文档。 ---> System.AggregateException:发生一个或多个错误。 ---> System.Net.Http.HttpRequestException:发送请求时发生错误。 ---> System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应xx.xx.xx.x:3926 在System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket& socket,IPAddress& address,ConnectSocketState state,IAsyncResult asyncResult,Exception& exception)

9 个答案:

答案 0 :(得分:12)

如果身份服务器和访问令牌验证中间件托管在同一个应用程序中,则启动时会出现竞争条件。

验证中间件尝试加载尚未提供的发现文档。

在这些方案中,将验证中间件上的DelayLoadMetadata标志设置为true。

如果完全禁用发现端点,则需要在验证选项上配置颁发者和密钥材料。

答案 1 :(得分:4)

我使用了这样的东西,它解决了我的问题。

@Directive({
  selector: '[themeChange]'
})
export class ThemeChange implements OnInit {
    @HostBinding('class') classes: string;
    private _classes: string[] = [];

    ngOnInit() {        
        // grab the theme name from some config, variable or user input
        this.classesString = myConfig.theme;
    }
}

答案 2 :(得分:1)

检查您的appsettings.json租户ID,并确保您没有意外复制超出租户ID所需的内容。

答案 3 :(得分:0)

由于几个原因,我收到了此错误消息。 一个是用@leastprivilege回答解决的。 另一个原因是我的Identity Server项目中的证书文件在版本控制中丢失了。所以我只是用原件替换了损坏的文件,然后就可以了。

答案 4 :(得分:0)

重建我的SSO项目解决了我的问题。在重建项目期间,还恢复了Nuget包。希望这会对你有所帮助。

答案 5 :(得分:0)

如果这有助于其他任何人。

将项目升级到.net core 2.0

后出现此错误

修复。

在appsettings.json中更改实例的名称 而不是

  

AAD Instance”:“https://login.microsoftonline.com/

使用

  

“实例”:“https://login.microsoftonline.com/

答案 6 :(得分:0)

此错误的原因是代理,并且可以通过实施以下代码来解决此问题:

options.BackchannelHttpHandler = new HttpClientHandler()
            {
                ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
                Proxy = new WebProxy(Configuration["System:Proxy"])
            };

如果您收到“无法从'[pii隐藏]中检索文档”“,则需要在下方添加到ConfigureServices:

    public void ConfigureServices(IServiceCollection services)
            {
......
IdentityModelEventSource.ShowPII = true;
    }

我希望有帮助。

答案 7 :(得分:0)

我在本地主机上使用 dotnet run 命令测试时遇到了这个问题。对 /.well-known 的调用是在错误的端口上执行的。在我的启动类中添加一行后,它就可以工作了。

enter image description here

答案 8 :(得分:0)

通过将应用程序池标识从“Applicationpoolidentity”更改为“内置帐户”设法解决了这个问题。在内置帐户中提供服务帐户名和密码