这里的代码都是源项目中的代码,示例项目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);

最新文章

  1. CustomEvent自定义事件
  2. android xml解析添加到listview中的问题
  3. JS动画 | 用TweenMax实现收集水滴效果
  4. Yii框架入门教程(博客教程、权威指南、类手册)
  5. iOS Xcode制作模板类-b
  6. 以色列学生---debugger 构建
  7. Java基础知识强化75:正则表达式之分割功能(字符串中的数字排序案例)
  8. C语言(1)--准备
  9. 团队作业八——第二次团队冲刺(Beta版本)第6天
  10. 网络基础之IP地址与子网划分
  11. django celery的分布式异步之路(二) 高并发
  12. Linux 使用 cp 命令强制覆盖功能
  13. Google最新的图片格式WEBP全面解析
  14. Chtholly Nota Seniorious
  15. Axure RP8 注册码
  16. Mybatis源码解析 - mapper代理对象的生成,你有想过吗
  17. 对BRD、MRD、PRD、FSD四类产品文档的理解
  18. LCT总结——应用篇(附题单)(LCT)
  19. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
  20. (原创)拨开迷雾见月明-剖析asio中的proactor模式(一)

热门文章

  1. HDU 3179 二叉搜索树(树的建立)
  2. 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台OpenResty&#174;
  3. ES6系列_6之新增的数组知识
  4. Maven(六) eclipse 使用Maven deploy命令部署构建到Nexus
  5. 为阿里云ECS服务器二级域名绑定tomcat子目录,实现一个IP多个二级域名
  6. web api的新玩法
  7. MathExamLv2——周世元211606348,许燕婷211606338
  8. webHttpBinding、basicHttpBinding和wsHttpBinding区别
  9. IP地址工具类
  10. CTC Loss原理