2014-04-08 104 views
0

我正在使用OAuth進行身份驗證,爲用戶生成安全訪問令牌的最佳方式是什麼?你應該將訪問令牌存儲在數據庫中,還是每次請求時都生成一個新的訪問令牌?生成安全訪問令牌

我正在使用不記名令牌。

回答

0

訪問令牌不需要存儲在持久性存儲中(另一方面通常會刷新令牌)。在使用Microsoft.Asp.Identity庫時,在asp.net web API中實現的常見場景是access_token是根據請求生成的,其方式與在使用FormsAuthentication時成功登錄後將Cookie發送回客戶端的方式相同。

訪問令牌是一個序列化的ClaimsPrincipal,使用Asp.Net機器密鑰加密,然後使用Base64編輯。

更多或更少的,每次客戶端向所述API請求與「授權」報頭存在(像 Authorize: Bearer asdfdsgwe.......YOUR_ACCESS_TOKEN........2334sdfs===)服務器只需要得到來自的base64編串Byte[]然後使用計算機密鑰解密最後反序列化回IPrincipal。此過程在WebAPI的生命週期中儘早發生,並且填充了System.Threading.Thread.CurrentPrincipal

這就是說access_token本身包含了所有必要的信息來標識當前用戶而不需要返回到數據庫。

UPDATE 如果你不想使用Microsoft.Asp.Identity爲您創造access_tokens。然後我推薦使用System.IdentityModel.Tokens.Jwt Nuget Package來推出你自己的實現。請記住,這不是一件容易的事。還請查看一個出色的開源參考實現思想:Thinktecture Identity Server v3

希望這有助於。