Dot-Net

WCF WebHttp 混合身份驗證(基本和匿名)

  • December 5, 2008

所有這些都與 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)。您對此無能為力。如果有,我想知道。

所以你有以下選擇:

  • 兩個端點
  • 配置您的客戶端以了解預設憑據
  • 改變您的客戶,以便他們能夠應對挑戰

引用自:https://stackoverflow.com/questions/209795