2014-12-27 86 views
1

我剛開始使用wcf服務構建Web應用程序以使用我的服務。我做了這個令牌,我在每個請求中都傳遞了令牌,然後在數據庫的每個請求中檢查它的有效與否。我認爲這是不好的每次發送一個額外的請求數據庫。那麼,當用戶第一次登錄或首次向服務請求時,這是否有可能對用戶進行身份驗證,然後直到會話保持所有請求都使用令牌?將身份驗證令牌傳遞給wcf一次

我在谷歌搜索,但每個人都告訴如何與服務進行身份驗證。

+0

你傳遞給服務什麼樣的令牌的答案? – khlr 2014-12-28 18:40:13

+0

它只是一個隨機字符串在用戶創建時生成 – Ancient 2014-12-28 19:15:43

回答

0

取代您生成並需要在數據庫中進行檢查的隨機字符串,使您的令牌圍繞加密和/或簽名,就像許多驗證模塊一樣。

換言之,從用戶/應用程序名稱,發佈日期和/或失效日期構建令牌,對其進行加密,並且您擁有一個自包含的令牌,不需要任何數據庫查找進行驗證。

爲了便於加密,則MachineKey可用於

http://msdn.microsoft.com/en-us/library/system.web.security.machinekey%28v=vs.110%29.aspx

一個側面說明 - 這是何等的窗體身份驗證/會話驗證模塊的工作。您擁有攜帶驗證信息的Cookie(令牌)。你可以考慮切換到這些。

編輯:你問一個例子:

// create token 
string username = "foo"; 
string token = Convert.ToBase64String(MachineKey.Protect( 
        Encoding.UTF8.GetBytes(username))); 

// get username out of token 
string token = ....; 
string username = Encoding.UTF8.GetString(MachineKey.Unprotect( 
        Convert.FromBase64String(token))); 
+0

你能舉一個例子,我不明白 – Ancient 2014-12-29 18:27:16

+0

我編輯了我的答案一個基本的例子,應該給你一個想法如何設計自己的令牌。 – 2014-12-29 22:42:29

+0

並做出什麼後得到令牌如何我可以驗證這是一個真正的客戶端,需要使用我的服務,即使在這種情況下,我需要調用數據庫。那麼怎麼辦才能解釋 – Ancient 2014-12-30 07:35:17

0

檢查驗證令牌在每個請求的數據庫可能是一個壞主意。通常用作令牌的是當前用戶主體本身,但是是序列化和加密的。 令牌生成並在登錄後返回給客戶端。然後在每個請求上傳遞該令牌的服務,然後讓您有機會反序列化它並填充您的System.Threading.Thread.CurrentPrincipal而無需往返於數據庫。

檢查這些所謂的更深入的瞭解

  1. Delivering a JWT SecurityToken to a WCF client
  2. How to use Microsoft JWT Token Handler to secure webHttpBinding based WCF service