一個簡單的webapi中的token驗證。請問除了請求頭header,cookied方式以上,如何用快取的方式實作。
以下是請求頭方式,token值存入了header,服務端驗證時呼叫它然后驗證時間有效性。
var authHeader = context.Request.Headers.FirstOrDefault(a => a.Key == "ApiAuthorization")
controler:
[ApiActionAuth]
[HttpPost]
獲取token方法:
public string GetToken()
{
…………
return token;
}
請問改為快取方式,如何做。
uj5u.com熱心網友回復:
你所謂的快取 指的是把token扔到快取里 是這個意思嗎?不過通常都是這個意思.
string settoken()
{
var guid=guid.newid().tostring();
redishelper.add<string>(guid,guid,2小時);
return guid;
}
然后把這個guid回傳給客戶端
return new json(new {token=settoken(),time=now+2小時});
不過呢 一般來說 存token的時候 會把userinfo帶上.
redishelper.add<userinfo>(guid,loginuserinfo,2小時);
然后來說一般都是通過authHeader來取用戶了.
var user=redishelper.get<userinfo>(authHeader);
if(user==null)
{
throw new exp...("登陸已過期...");
}
return user;
整體的實作方式 大概就是這種了
uj5u.com熱心網友回復:
token和用戶資訊 K/V 然后存redis或者cache里面 設定對應時間過期uj5u.com熱心網友回復:
快取到本地記憶體或者第三方庫都可以。uj5u.com熱心網友回復:
你就token丟到redis里就好了。記得設定過期時間
uj5u.com熱心網友回復:
webapi服務里,這個token加密字串需要運行周期里存在,客戶端request時本來放請求頭里是可以的。
uj5u.com熱心網友回復:
如何保證每個用戶提交的唯一性,服務器會自己判斷該token對應哪個用戶么
uj5u.com熱心網友回復:
你這個token也要給讓用戶傳遞給你的。
你可以使用 jwt模式的,就是把token存放在head頭,不過還需要另外兩個要素進行加密。
當然,也可以直接就把token給用戶,客戶端和服務器端都要快取一下。設定一個過期時間。
uj5u.com熱心網友回復:
至于唯一性,這個就太好解決了。uuid+md5就好了
uj5u.com熱心網友回復:
快取建議存Redis ,唯一性可以用 時間戳+Guid 在用MD5或Base64加一次密轉載請註明出處,本文鏈接:https://www.uj5u.com/net/89044.html
標籤:ASP.NET
上一篇:iframe和區域重繪
