2015-12-21 146 views
0

我正在將第一個SOAP Web服務添加到大型現有Web窗體應用程序中。SOAP Web服務身份驗證

我想我已經制定出技術細節來完成這項工作。但是,我仍然有關於驗證的問題。一種選擇是簡單的有我的Web方法需要用戶名/密碼參數,像下面這樣:

[WebService(Namespace = PublicServices.XmlnsNamespace)] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class PublicServices : WebService 
{ 
    public const string XmlnsNamespace = "http://xmlns.domain.com/publicapi"; 

    [WebMethod] 
    public ProgramData GetProgramData(string userName, string password, string programCode) 
    { 
     // Gather and return program data here 
    } 
} 

我的問題是什麼是這種方法的缺點。 Web Forms有它自己的認證代碼,我也看到WCF也有認證工具。我還看到了一些關於「使用SOAP頭進行自定義驗證」的內容,我對此一無所知。

有沒有比這更安全的方法?任何建議讓我走上正軌?

回答

0

您可以創建一個公開登錄/註銷方法的端點/接口。登錄顯示登錄和密碼參數並驗證用戶。它返回一些唯一標識用戶的密鑰,例如登錄密碼的散列號。隨後,您將創建另一個端點,如PublicServices。向服務發送的每個請求都包含獲取的哈希放置在標題中。一旦服務收到消息,它就會驗證對某些資源(如數據庫)的散列。如果不正確,則拋出錯誤並且沒有方法達到。就WCF而言,您需要指定自定義類,它們分別爲客戶端和服務分別派生出IClientMessageInspectorIDispatchMessageInspector

這種解決方案的好處是什麼?什麼服務和請求的驗證有明顯的分離。懶散的解決方案是發送散列作爲方法的參數,並在服務公開的每個單一方法中驗證它。