zoukankan      html  css  js  c++  java
  • nancy中的Stateless验证

    这里的代码都是源项目中的代码,示例项目sample文件夹下的代码,或者test文件夹下的代码。

    nancy中的Stateless验证的实现 ,示例中的方法要比token简单容易看的多。不像token中的FileSystemTokenKeyStore方式,用文件保存,每次全部读取,实现也麻烦。

    StatelessAuthBootstrapper 是sample中的用来演示用的自定义代码,实现了DefaultNancyBootstrapper。

                       var apiKey = (string) nancyContext.Request.Query.ApiKey.Value;

                          //get the user identity however you choose to (for now, using a static class/method)
                          return UserDatabase.GetUserFromApiKey(apiKey);

    每次获取apikey 然后获取用户信息。

    现在转到UserDatabase的类,

    static readonly List<Tuple<string, string>> ActiveApiKeys = new List<Tuple<string, string>>();
          private static readonly List<Tuple<string, string>> Users = new List<Tuple<string, string>>();

    定义了2个list,Users代表我们的数据库的用户表,保存用户的信息等。

    ActiveApiKeys 用来保存登陆后的apikey等,类似早期的保存的session的库,只不过早期通常是服务器进程自动维护。这里我们可以用memcache,或者redis来代替。

    在ValidateUser的方法中,有这么一句  var apiKey = Guid.NewGuid().ToString();  用来产生apikey。  一般guid足够了,当然你也可以把它进行加密,就会更加碰撞不到了。

    DemoUserIdentity 的属性比较少,可以自己添加角色等要用来验证的必要信息。

    ActiveApiKeys  也可以用自己的方式来验证,反正Tuple可以加7个参数的内容,下面是token方式验证中的Tokenizer类,里面包含的部分字段。 我们也可以这样去做,

    例如加入apikey的过期时间,验证时可以直接设置apikey过期。

    加入刷新apikey时间,在apikey过期的时候,例如30秒内,可以用旧的的apikey交换新的apikey。类似taobao的刷新token。

    private Encoding encoding = Encoding.UTF8;
           private string claimsDelimiter = "|";
           private string hashDelimiter = ":";
           private string itemDelimiter = Environment.NewLine;
           private Func<DateTime> tokenStamp = () => DateTime.UtcNow;
           private Func<DateTime> now = () => DateTime.UtcNow;
           private Func<TimeSpan> tokenExpiration = () => TimeSpan.FromDays(1);
           private Func<TimeSpan> keyExpiration = () => TimeSpan.FromDays(7);

  • 相关阅读:
    第九章 类的定义属性和方法
    第八章 函数作用域
    第七章 函数基础
    第六章 控制流程
    Http请求
    Django学习之-带参数的路由应用
    Django学习之--Ajax
    第二章:Django项目实例
    第一章:Django简介
    pytest汇总
  • 原文地址:https://www.cnblogs.com/wang2650/p/4833774.html
Copyright © 2011-2022 走看看