我剛開始使用wcf服務構建Web應用程序以使用我的服務。我做了這個令牌,我在每個請求中都傳遞了令牌,然後在數據庫的每個請求中檢查它的有效與否。我認爲這是不好的每次發送一個額外的請求數據庫。那麼,當用戶第一次登錄或首次向服務請求時,這是否有可能對用戶進行身份驗證,然後直到會話保持所有請求都使用令牌?將身份驗證令牌傳遞給wcf一次
我在谷歌搜索,但每個人都告訴如何與服務進行身份驗證。
我剛開始使用wcf服務構建Web應用程序以使用我的服務。我做了這個令牌,我在每個請求中都傳遞了令牌,然後在數據庫的每個請求中檢查它的有效與否。我認爲這是不好的每次發送一個額外的請求數據庫。那麼,當用戶第一次登錄或首次向服務請求時,這是否有可能對用戶進行身份驗證,然後直到會話保持所有請求都使用令牌?將身份驗證令牌傳遞給wcf一次
我在谷歌搜索,但每個人都告訴如何與服務進行身份驗證。
取代您生成並需要在數據庫中進行檢查的隨機字符串,使您的令牌圍繞加密和/或簽名,就像許多驗證模塊一樣。
換言之,從用戶/應用程序名稱,發佈日期和/或失效日期構建令牌,對其進行加密,並且您擁有一個自包含的令牌,不需要任何數據庫查找進行驗證。
爲了便於加密,則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)));
檢查驗證令牌在每個請求的數據庫可能是一個壞主意。通常用作令牌的是當前用戶主體本身,但是是序列化和加密的。 令牌生成並在登錄後返回給客戶端。然後在每個請求上傳遞該令牌的服務,然後讓您有機會反序列化它並填充您的System.Threading.Thread.CurrentPrincipal而無需往返於數據庫。
檢查這些所謂的更深入的瞭解
你傳遞給服務什麼樣的令牌的答案? – khlr 2014-12-28 18:40:13
它只是一個隨機字符串在用戶創建時生成 – Ancient 2014-12-28 19:15:43