我正在使用Visual Studio 2015 Enterprise和ASP.NET vNext Beta8構建端點,該端點既按所述方式發佈和使用JWT標記詳細地說here。正如該文章中所解釋的,端點使用AspNet.Security.OpenIdConnect.Server(AKA OIDC)來完成繁重的工作。混合http/https環境中的AspNet.Security.OpenIdConnect.Server(ASP.NET vNext)權威配置
在我們的內部開發環境中使用該原型時,我們遇到了使用負載平衡器的問題。特別是,我們認爲它與app.UseJwtBearerAuthentication的「權限」設置以及我們特有的http/https組合有關。隨着我們的負載均衡的環境中,任何試圖調用使用該令牌的REST方法產生此異常:
引發WebException:遠程名稱不能被解析:devapi.contoso.com.well知名' HttpRequestException:發送請求時發生錯誤。
IOException:IDX10804:無法從:'https://devapi.contoso.com.well-known/openid-configuration'檢索文檔。
考慮以下的步驟來重現(這是爲原型,不應該被認爲是生產價值):
我們創造了使用OIDC描述here一個beta8原型。
我們將該項目部署到運行在Server 2012 R2上的2個相同配置的IIS 8.5服務器。 IIS服務器託管一個名爲「API」的beta8站點,並在端口80和443上綁定主機名「devapi.contoso.com」(針對本文的目的進行了消毒處理)所有可用的IP地址。
兩個IIS服務器有一個主機條目指向自己:
127.0.0.1 devapi.contoso.com
我們的網絡管理員已經綁定一個*證書(爲* .contoso.com)與我們的Kemp負載均衡器,並將https://devapi.contoso.com的DNS條目配置爲解析爲負載均衡器。
現在,這是很重要的,負載均衡器也被配置成代理HTTPS流量使用HTTP(不,重複,對HTTPS不)的IIS服務器。我向他解釋說,這是我們公司的標準操作程序,因爲他們只需要在一個地方安裝證書。 我們不確定我們的網絡管理員爲什麼會在IIS中綁定443,因爲理論上它從未在此端口上收到任何流量。
我們使通過HTTPS安全崗位https://devapi.contoso.com/authorize/v1獲取一個令牌,它工作正常(如何使這個職位的細節here):
{
「子」:「待辦事項」 ,
「ISS」: 「https://devapi.contoso.com/」
「AUD」: 「https://devapi.contoso.com/」
「EXP」:1446158373,
「NBF」:1446154773
}然後,我們在另一個安全獲取通過https使用此令牌到https://devapi.contoso.com/values/v1/5。
OpenIdConnect.OpenIdConnectConfigurationRetriever拋出該異常:
引發WebException:遠程名稱不能被解析:devapi.contoso.com.well知名' HttpRequestException:在發送時發生錯誤請求。
IOException:IDX10804:無法從:'https://devapi.contoso.com.well-known/openid-configuration'檢索文檔。
我們認爲這是發生,因爲OIDC試圖進行磋商,「options.Authority」指定的主機,我們設置在啓動時https://devapi.contoso.com/。此外,我們推測,因爲我們的環境已配置爲將https流量轉換爲負載均衡器和IIS之間的非https流量,所以當框架嘗試解析https://devapi.contoso.com/時,出現問題。我們已經嘗試了許多配置更改,包括甚至將權限指向不安全的http://devapi.contoso.com也無濟於事。
任何幫助我們理解這個問題的幫助將不勝感激。
'https:// devapi.contoso.com.well-known/openid-configuration'似乎沒有正確形成(域名丟失後的斜線)。如果您使用'options.ConfigurationManager'解決方法來使元數據請求與非HTTPS端點一起工作,請確保您的'Authority'以結尾斜槓結尾。如果它不起作用,可以在'.well-known/openid-configuration'之前手動添加一個斜線。 – Pinpoint