對於通過GET接受命令的簡單HTTP服務(實際上應該考慮使用POST ...)我會直接使用ASP MVC,而不是真正的 'web服務'。 WCF希望引導你走上SOAP的道路,你的客戶將永遠詛咒你。 RESTful WCF也是一種替代方案,但它看起來似乎還是矯枉過正。
至於驗證,您有兩個可行的身份驗證方案:
- Windows集成的安全性,如果客戶端是內部局域網或使用VPN或DirectAccess的解決方案
- HTTP摘要,這是連接這隻會工作ASP身份驗證模式支持不佳(僅支持對Active Directory林用戶羣進行身份驗證)。
使用Windows身份驗證,您不需要對服務器端代碼執行任何操作,只需標記web.config <authentication mode="Windows" />
即可。 'Windows'認證被大多數用戶代理理解。將您的服務的客戶端編程爲使用Windows身份驗證也很簡單,只需將請求的Credentials設置爲當前用戶DefaultCredentials即可。
使用摘要式身份驗證服務器將挑戰用戶代理進行身份驗證,但不幸的是,如我所說,ASP驗證只適用於驗證受信任的NT域。客戶端雖然不需要在Intranet中(客戶端和服務器之間沒有NTLM SSPI交換)。編寫一個客戶端是faily容易,在.net中只需設置requet憑據正確初始化CredentialsCache:
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"),"Digest", new NetworkCredential(UserName,SecurelyStoredPassword,Domain));
...
request.PreAuthenticate = true;
request.Credentials = myCache;
重用請求之間的緩存是很重要的,否則客戶端會做兩往返每次調用。
理論上你也可以有第三個認證路徑:全雙工SSL。但是,客戶端證書部署的「微不足道」問題使得對於任何缺少完全預裝的企業PKI的人來說,這種替代方案都是一個死路一條。