簡體   English   中英

無法從 well-known/openid-configuration 獲取配置

[英]Unable to obtain configuration from well-known/openid-configuration

我正在使用 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: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: 連接嘗試失敗,因為連接方在一段時間后沒有正確響應,或建立連接失敗,因為連接的主機未能在 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 處響應 xx.xx.xx.x:3926 在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket、IPAddress& 地址、ConnectSocketState 狀態、IAsyncResult asyncResult、Exception& 異常)

如果 identityserver 和訪問令牌驗證中間件托管在同一應用程序中,則啟動時會出現競爭條件。

驗證中間件嘗試加載尚不可用的發現文檔。

在這些場景中,將驗證中間件上的DelayLoadMetadata標志設置為 true。

如果完全禁用發現端點,則需要在驗證選項上配置頒發者和密鑰材料。

我使用了這樣的東西,它解決了我的問題。

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
        });

此錯誤的原因是代理,並且能夠通過實現以下代碼來解決它:

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;
    }

我希望這會有所幫助。

檢查您的 appsettings.json 租戶 ID,並確保您沒有意外復制超出租戶 ID 所需的數量。

我收到此錯誤消息有幾個原因。 一個是通過@leastprivilege 答案解決的。 另一個是我的身份服務器項目中的證書文件在版本控制中丟失了。 所以我只是用原件替換了損壞的文件,然后它就起作用了。

重建我的 SSO 項目解決了我的問題。 在重建項目期間也恢復了 Nuget 包。 希望這對你有幫助。

如果這對其他人有幫助。

將項目升級到 .net core 2.0 后出現此錯誤

修復。

在 appsettings.json 中更改實例的名稱而不是

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

使用

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

我在本地主機上使用 dotnet run 命令測試時遇到了這個問題。 對 /.well-known 的調用是在錯誤的端口上執行的。 在我的啟動類中添加一行后,它就可以工作了。

在此處輸入圖片說明

設法通過將應用程序池標識從“Applicationpoolidentity”更改為“內置帳戶”來解決它。 在內置帳戶服務帳戶名稱及其密碼中給出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM