2012-02-17 108 views
3

編輯:我已經決定去WCF數據服務,而不是MVC3WCF數據服務認證

現在,我已經決定去WCF數據服務 - 我需要一種方法來驗證和授權用戶。

曾看過設置SQLMembership DB,但正在努力實際驗證用戶。我的客戶不會是.NET應用程序 - 很可能是一個iPhone/Android應用程序,它將調用RESTFul WCF數據服務來獲取數據...

回答

2

認證

WCF數據服務允許多種身份驗證選項,如MSDN上描述:保護WCF數據服務。從可用的方法來看,Windows身份驗證是最安全的,它使用NTLMKerberos機制。由於跨平臺可用性的限制,可以使用的最適合和安全的身份驗證方法是NTLM,因爲它幾乎可以在所有當前平臺上使用:Android(從4.0版「冰淇淋三明治」),iOS, Linux,UNIX,Windows。

爲託管在IIS上的OData服務設置Windows身份驗證意味着禁用匿名訪問並啓用集成Windows身份驗證。更詳細的指南可以在Odata and Windows Authentication找到。

爲了更好地控制允許訪問服務的用戶,可以直接從配置文件(即web.config)向用戶角色/組以及特定用戶授予或拒絕訪問權限, 。下面描述允許特定用戶訪問的語法。爲了獲得最大的安全性,建議拒絕對所有用戶/組的訪問,並根據需要明確允許訪問。 (即允許用戶域\用戶接入優先於拒絕爲所有用戶)

<authorization> 
     <allow users="DOMAIN\user"/> 
     <-- Deny access to every other authenticated or anonymous user 
     <deny users="*" /> 
     <deny users="?" /> 
    </authorization> 

在授權標籤之間的規則採取順序如果授權標籤並沒有明確的配置文件中定義,那麼IIS將對所有已識別的連接用戶(在Active Directory或本地計算機中)進行身份驗證並允許訪問。

在跨域環境中設置Windows身份驗證是可行的,但需要兩種:域之間建立

  • 信任(讓IIS可以驗證外部用戶),或
  • 的相同的用戶名/密碼組合在兩個域上都存在 或
  • 外部域中的客戶端使用對服務器域有效的憑據 進行身份驗證。

這些情況的可用選項在this博客文章中有更詳細的描述。

模擬

爲了能夠登錄到數據庫和檢索利用發送到WCF數據服務的Windows帳戶憑據所需的數據,該服務需要模擬用戶。這可在無論是在代碼來完成,或在配置

  • 在配置文件(即web.config中),以下設置
    必須進行:
identity impersonate="true" 
  • 如果不希望整個服務在連接用戶的 證書下運行, sonation可以設置 編程,需要的地方,以下面的方式:

    lUser = TryCast(HttpContext.Current.User.Identity,的WindowsIdentity)

    lUserContext = WindowsIdentity.Impersonate(lUser.Token)

+0

感謝您的答覆 - 我不是在尋找Windows身份驗證的用戶將使用SQLMembership數據庫 – Steve 2012-02-21 20:51:46

+0

感謝後進行存儲,它是從嘗試IOS認證時一樣嗎?我正在從一個框架調用ipad和iphone – 2012-08-22 05:43:57

+0

的WCF服務。是的,iOS上也支持NTLM。 – 2012-08-22 06:38:38

2

我建議使用ServiceStack.net和MVC 3. ServiceStack一個與MVC 3搭配得很好的Web服務框架,包括一個NuGet包來設置所有東西,並使用JSON本地工作。關於它的最好的事情是沒有配置(與WCF相反)以及簡單而強大的代碼優先方法。它也非常快。下載請參閱servicestack.net,我的tutorial開始使用它。在我的教程中,您可以使用自己的DB代碼替換存儲庫中的Tridion代碼以存儲數據。