【问题标题】:Unable to obtain configuration from well-known/openid-configuration无法从 well-known/openid-configuration 获取配置
【发布时间】:2016-10-08 04:35:39
【问题描述】:

我正在使用 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 at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 在 System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败, Socket s4, Socket s6, Socket&socket, IPAddress&地址, ConnectSocketState 状态、IAsyncResult asyncResult、Exception& 例外)

【问题讨论】:

  • 您的 webapi 是否有权访问身份服务器?即你可以从 webapi 环境中点击 URL /.well-know/openid-configuration 吗?
  • 感谢回复,是的
  • 我们创建了一个使用“/.well-know/openid-configuration” URL 获取配置的 api 方法。如果我们尝试直接从浏览器以及其他应用程序(使用 jquery ajax get 调用)访问此 api 方法,它会给我们适当的响应
  • 系统上是否配置了代理?当应用程序部署到 IIS 时,它将无法访问用户配置的代理。您必须在 OpenIdConnectOptions.BackchannelHttpHandler 上进行设置
  • 听起来服务器要么没有运行,要么你禁用了元数据端点。

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


【解决方案1】:

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

验证中间件尝试加载尚不可用的发现文档。

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

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

【讨论】:

  • 完美,这解决了我的问题。感谢您的仓促回复。现在,我的资源服务器中嵌入了我的授权和身份验证。
  • 这也解决了我的问题。应标记为答案。谢谢!
  • 验证中间件在哪里?
  • 你能解释一下在哪里设置DelayLoadMetadata吗?好像没找到!
  • 任何人都可以在哪里找到配置“DelayLoadMetadata”的信息,谢谢
【解决方案2】:

我使用了类似的东西,它解决了我的问题。

services.AddAuthentication(o => {
            o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })            
        .AddCookie(cfg => cfg.SlidingExpiration = true)
        .AddJwtBearer(cfg =>
        {
            cfg.Audience = "http://localhost:4200/";
            cfg.Authority = "http://localhost:5000/";
            cfg.RequireHttpsMetadata = false;
            cfg.SaveToken = true;
            cfg.TokenValidationParameters = tokenValidationParameters;
            cfg.Configuration = new OpenIdConnectConfiguration();  <-- Most IMP Part
        });

【讨论】:

  • 工作得很好很好的答案
  • 能否请您详细说明tokenValidationParameters?我做了同样的事情,但授权属性不起作用
  • @Saif 不确定我当时用的是什么,但你可以看看这个stackoverflow.com/a/45723392/5816119
【解决方案3】:

这个错误的原因是代理,并且能够通过实现以下代码来解决它:

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

如果您收到“无法从以下位置检索文档:'[pii is hidden]'”,您需要将以下内容添加到 ConfigureServices:

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

希望对你有所帮助。

【讨论】:

【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      重建我的 SSO 项目解决了我的问题。在重建项目期间,Nuget 包也得到了恢复。希望对您有所帮助。

      【讨论】:

        【解决方案7】:

        如果这对其他人有帮助。

        将项目升级到 .net core 2.0 后出现此错误

        修复。

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

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

        使用

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            设法通过将应用程序池标识从“Applicationpoolidentity”更改为“内置帐户”来解决此问题。在内置帐户服务帐户名称和密码中给出

            【讨论】:

              猜你喜欢
              • 2020-06-29
              • 2021-01-18
              • 2020-04-02
              • 1970-01-01
              • 2020-07-30
              • 1970-01-01
              • 2022-08-11
              • 2018-05-10
              • 2023-01-07
              相关资源
              最近更新 更多