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

nancy中的Stateless验证的更多相关文章

  1. nancy中的身份验证

    在nancy中,身份验证分为basic ,form ,token,stateless几种,basic和form这里不说了,其中如果是使用cookie来保存身份的, 需要注意的是:cookie有大小的限 ...

  2. 浅析如何在Nancy中使用Swagger生成API文档

    前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger, ...

  3. ASP.NET MVC5中的Model验证

    Model验证是ASP.NET MVC中的重要部分,它主要用于判断输入的数据类型及值是否符合我们设定的规则,这篇文章就介绍下ASP.NET MVC中Model验证的几种方式. 后台验证 DataAnn ...

  4. 用Retrofit发送请求中添加身份验证

    用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...

  5. 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击

    CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...

  6. nancy中视图呈现 Html.Partial(RenderPage的替代品)

    在mvc中有RenderPage 用来呈现其他视图的内容,而在nancy中没有RenderPage.怎么办呢? mvc中RenderPage的替代品,就是 Html.Partial. 使用方式 @Ht ...

  7. Azure Service Bus 中的身份验证方式 Shared Access Signature

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  8. WPF中的数据验证

    数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...

  9. Lotus开发之Lotus Notes中域的验证

    一:介绍       Lotus中的域主要有以下的类型:文本,日期/时间,对话框列表,复选框,单选按钮,RTF等等.Lotus中域的验证方式有很多种公式,lotusscript,javascript等 ...

随机推荐

  1. Linq模型ObjectContext下查看Sql语句。

    ObjectContext 并没有提供 LINQ to SQL DataContext.Log 这样的功能,要查看实际生成的 T-SQL 语句,要么借助 SQL Server Sql Profiler ...

  2. bzoj2783 树

    第一行是两个整数N和S,其中N是树的节点数. 第二行是N个正整数,第i个整数表示节点i的正整数. 接下来的N-1行每行是2个整数x和y,表示y是x的儿子. 输出格式: 输出路径节点总和为S的路径数量. ...

  3. HDU 3641 Pseudoprime numbers(快速幂)

    Pseudoprime numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11336   Accepted: 4 ...

  4. Shell中单引号、双引号、反引号、反斜杠的区别

    1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...

  5. 实时计算CEP

    实时计算怎么实现: 流计算.....

  6. mongodb聚合 group

    MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 基本语法为:db.collection.agg ...

  7. 37.使用PreResultListener实现回调

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在进行本实例前请前复习:五.2自定义拦截器.因为PreResultListe ...

  8. 下拉菜单的实现classList.add() classList.remove() class属性的添加和删除

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. JDK动态代理代码示例

    JDK动态代理代码示例 业务接口 实现了业务接口的业务类 实现了InvocationHandler接口的handler代理类 1.业务接口 package com.wzq.demo01; /** * ...

  10. mysql 塞数据

    ./mysql_.py -H109.105.4.65 -P32773 -uroot -proot.123 --database=test_database --number=10 sysbench - ...