4

我正在使用ASP.NET 5,在我的解決方案中,我有Web API,Identity Server和Angular 2項目,並且我使用Identity Server對Angular 2客戶端進行了身份驗證,Angular 2客戶端通過在http請求和web api驗證令牌中傳遞令牌並給出響應來消費web api,爲此,我寫了一個自定義屬性,用於檢查用戶是否已通過驗證無法從知名/ openid配置中獲取配置

當我使用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:連接嘗試失敗,因爲連接方在一段時間後沒有正確響應或建立連接因爲連接的主機未能響應System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)上的xx.xx.xx.x:3926 (位於System.Net.ServicePoint.ConnectSocketInternal(布爾connectFailure,Socket s4,Socket s6)上的 ,插座&插座,ip地址&地址,ConnectSocketState狀態,IAsyncResult的asyncResult,異常&除外)

+0

您的webapi是否可以訪問身份服務器?即您可以從webapi環境中訪問URL /.well-know/openid-configuration嗎? – Karthik

+0

感謝您的回覆, 是的 – amol

+0

我們創建了一個使用「/.well-know/openid-configuration」URL獲取配置的api方法。 如果我們嘗試從瀏覽器直接以及從其他應用程序嘗試使用此api方法(使用jquery ajax get call) – amol

回答

9

如果identityserver和訪問令牌驗證中間件在同一應用程序託管有啓動的競爭條件。

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

在這些情況下,將驗證中間件上的DelayLoadMetadata標誌設置爲true。

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

+0

完美,這解決了我的問題。謝謝你的倉促迴應。我現在將我的授權和身份驗證嵌入到資源服務器中。 – ad0ran

+0

這也解決了我的問題。應該標記爲答案。謝謝! –

+0

驗證中間件在哪裏? –

0

我收到了這個錯誤信息有幾個原因。 一個用@leastprivilege答案解決。 另一個原因是我的Identity Server項目中的證書文件在版本控制中丟失了。所以我剛剛用原件替換了破損的文件,然後它就起作用了。

0

重建我的SSO項目解決了我的問題。在重建項目期間,Nuget軟件包也得到了恢復。希望這可以幫助你。

1

我用類似這個,它解決了我的問題。

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