一个简单的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;
}
请问改为缓存方式,如何做。

解决方案 »

  1.   

    你所谓的缓存 指的是把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;
    整体的实现方式 大概就是这种了
      

  2.   

    token和用户信息  K/V    然后存redis或者cache里面 设置对应时间过期
      

  3.   

    你就token丢到redis里就好了。
    记得设置过期时间
      

  4.   

    webapi服务里,这个token加密字符串需要运行周期里存在,客户端request时本来放请求头里是可以的。
      

  5.   

    如何保证每个用户提交的唯一性,服务器会自己判断该token对应哪个用户么
      

  6.   

    如何保证每个用户提交的唯一性,服务器会自己判断该token对应哪个用户么
    你这个token也要给让用户传递给你的。
    你可以使用 jwt模式的,就是把token存放在head头,不过还需要另外两个要素进行加密。
    当然,也可以直接就把token给用户,客户端和服务器端都要缓存一下。设置一个过期时间。
      

  7.   

    至于唯一性,这个就太好解决了。
    uuid+md5就好了