一个简单的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;
}
请问改为缓存方式,如何做。
以下是请求头方式,token值存入了header,服务端验证时调用它然后验证时间有效性。
var authHeader = context.Request.Headers.FirstOrDefault(a => a.Key == "ApiAuthorization")controler: [ApiActionAuth]
[HttpPost]获取token方法: public string GetToken()
{
…………
return 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;
整体的实现方式 大概就是这种了
记得设置过期时间
你这个token也要给让用户传递给你的。
你可以使用 jwt模式的,就是把token存放在head头,不过还需要另外两个要素进行加密。
当然,也可以直接就把token给用户,客户端和服务器端都要缓存一下。设置一个过期时间。
uuid+md5就好了