2010-04-19 47 views
0

我想用Visual Studio編寫一個Web服務。該服務需要支持某種類型的身份驗證,並且應該能夠通過簡單的HTTP GET請求接收命令。輸入只能是一個帶有一些參數的方法調用,並且響應將是簡單的狀態/錯誤代碼。我的直覺是使用ASP.NET Web服務,但這不是C#4.0中的選項,它讓我懷疑是否應該使用更新的東西。我已經看過WCF,但它似乎需要在客戶端運行的應用程序 - 有沒有辦法通過訪問URL來查詢WCF主機?我應該將什麼類型的Web服務放在一起?

認證也是一個重要的部分。開發我自己的小身份驗證系統似乎是一個壞主意 - 我讀過它太容易搞砸了。用這種Web服務進行身份驗證的標準方式是什麼?

我很想查看所有關於這個的細節並自己學習,但我真的不知道從哪裏開始。一些方向將不勝感激!

回答

1

對於通過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的人來說,這種替代方案都是一個死路一條。

相關問題