Dot-Net
WCF WebHttp 混合身份驗證(基本和匿名)
所有這些都與 WebHttp 綁定有關,託管在自定義服務主機中(此時 IIS 不是一個選項)。
我已經實現了自定義 UserNamePasswordValidator 和自定義 IAuthorizationPolicy。當我將端點的綁定配置為使用基本身份驗證時,一切都按我的意願工作(自定義主體、自定義角色等)。
我還想添加匿名 HTTP 訪問的功能,並讓我的自定義實現將匿名使用者置於一些預設角色等。(如果沒有發送 Authenticate 標頭)。
現在發生的情況是,在我的任何自定義程式碼被命中之前,匿名使用者都會收到 401。如果我關閉 HTTP Basic 身份驗證要求,則完全忽略 Authenticate 標頭。
如何配置或註入 Authenticate 標頭,以兩種方式執行此操作(不創建 2 個單獨的端點)?
首先,服務根據規范正確響應匿名呼叫。
其次,這是不可能的。當您自託管您的服務並且您有一些 http 綁定時,WCF 將使用一個
[System.Net.HttpListener](http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx)實例來響應 http 請求(在 中創建System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen)。此偵聽器有一個呼叫方法,該方法HandleAuthentication在呼叫任何自定義程式碼之前被呼叫。它負責發回帶有質詢的 401 響應(WWW-Authenticate)。您對此無能為力。如果有,我想知道。所以你有以下選擇:
- 兩個端點
- 配置您的客戶端以了解預設憑據
- 改變您的客戶,以便他們能夠應對挑戰