簡體   English   中英

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

[英]WCF WebHttp Mixed Authentication (Basic AND Anonymous)

所有這些都與托管在自定義服務主機中的WebHttp綁定有關(IIS目前不可選)。

我已經實現了一個自定義的UserNamePasswordValidator和一個自定義的IAuthorizationPolicy。 當我配置終結點的綁定以使用基本身份驗證時,一切都按我的意願進行工作(自定義主體,自定義角色等)。

我還想添加匿名HTTP訪問的功能,並讓我的自定義實現將Anonymous用戶設置為某些默認角色,等等。(如果未發送Authenticate標頭)。

現在發生的是,在我的任何自定義代碼被擊中之前,匿名用戶都將獲得401信息。 如果我關閉了HTTP Basic身份驗證要求,則將完全忽略Authenticate標頭。

如何配置或注入Authenticate標頭 ,以兩種方式執行此操作(而無需創建2個單獨的端點)?

首先,根據規范 ,服務正確響應匿名呼叫。

其次,這是不可能的。 當您自托管服務並具有一些http綁定時,WCF將使用System.Net.HttpListener實例來響應http請求(在System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen創建)。 該偵聽器具有一個稱為HandleAuthentication的方法,該方法在調用任何自定義代碼之前被調用。 它負責發送帶有質詢(WWW-Authenticate)的401響應。 您對此無能為力。 如果有,我想知道。

因此,您剩下以下選項:

  • 兩個端點
  • 配置您的客戶端以了解默認憑據
  • 改變您的客戶,以便他們可以應對挑戰

過去,我已經對此進行了研究,發現除非您創建2個單獨的端點(這不是您想要的端點),否則無法通過配置來實現。 WCF根本就不支持它。

但是,WCF具有極高的可定制性,您可以通過編寫可滿足您需要的自定義通道/綁定來實現此目的。 我建議您看一下REST Chess源代碼 它應該讓您開始。

最好的選擇是通過角色提供程序實現默認角色,並讓匿名用戶自動加入該角色。 然后,以編程方式或通過策略注入(面向方面​​)策略進行設置,以便通過特定角色允許某些匿名訪問。

至於通過配置進行設置,如果可能的話,這將是相當困難的,並且有些“ hacky”。

我不這么認為。。。我只是在寫信,當我決定再次閱讀您的問題並注意到問題的最后陳述時,您需要創建單獨的端點。 所以答案是“不”(我知道)

暫無
暫無

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

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