2013-07-23 121 views
4

我有幾個問題關於如何使用MVC asp.net進行身份驗證/授權。C#MVC身份驗證與WCF身份驗證服務..幾個問題

我有一堆的WCF服務,通過在每個請求上傳遞用戶名和密碼(我使用HttpModule進行驗證,並在WCF中捕獲身份驗證事件)來驗證/授權用戶。它在該HttpModule中使用aspnet成員資格來驗證用戶,並設置Principal,以便我可以在我的服務上擁有角色(這些服務共享給我們的各種客戶端,所以我需要保持這種工作方式)。

現在我想創建一個能夠調用這些服務的MVC項目,但我不想在會話中保存用戶名和密碼並將其傳遞給每個請求。

我有一個場景,如果有人可以請幫我!

  1. 我打開WCF在WCF服務層提供的AuthenticationService。

  2. 在我的MVC項目中,我添加了表單身份驗證,並使用authorize屬性修飾了我的方法,如果我沒有授權,它將把我重定向到登錄頁面。

  3. 在登錄頁面中,當用戶給出他/她的用戶名和密碼時,我調用WCF AuthenticationService登錄我的用戶。然後,我從中檢索身份驗證令牌並將其存儲在我的會話中。

  4. 下一次我想在我的服務層上調用WCF服務時,我檢索該令牌並將其添加到我的請求的標頭中。

  5. 在那個驗證我在服務端用戶的HTTP模塊,我檢查其有效令牌OR如果一個有效的用戶名和密碼(以方便別人調用這些Web服務)。

  6. 如果是,它接受請求,並返回正確的數據..

這個問題似乎像處理這個正確的方式?

任何幫助非常感謝。:/ 在此先感謝! Neil

+0

這真是奇怪的做法。將用戶名/密碼傳遞給每一個請求都很麻煩,而且你鬆了一些靈活性。您是否有任何重要的要求試圖用您的方法來實現,或者您只是不知道如何以其他方式做到這一點? –

+0

我們提供的一些服務是基於SAP的系統,我不認爲它們能夠處理基於令牌的身份驗證。這就是我這樣做的原因。我不覺得這是一個壞主意嗎?所有基於REST的服務都不是無狀態的嗎? –

+0

如果這是一個糟糕的問題,你能否提供另一種解決方案?沒有太多的WCF知識是很難的。 –

回答

0

建議的解決方案聽起來不錯。傳遞用戶名/密碼與每一個聽起來糟糕的請求都是想法。對此的唯一修改是不通過登錄頁面獲取令牌,而是從無保留的WCF方法獲取令牌。

客戶端流量會那麼:

  1. 電話無人防守的方法,通過用戶名和密碼作爲參數,得到使用令牌,令牌
  2. 調用其他方法來驗證

如果您的客戶端支持http cookie,您甚至可以僅依靠表單身份驗證 - 將表單cookie附加到登錄請求中,並將cookie與其他請求一起傳遞。這樣你甚至不需要額外的模塊。