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);
nancy中的Stateless验证的更多相关文章
- nancy中的身份验证
在nancy中,身份验证分为basic ,form ,token,stateless几种,basic和form这里不说了,其中如果是使用cookie来保存身份的, 需要注意的是:cookie有大小的限 ...
- 浅析如何在Nancy中使用Swagger生成API文档
前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger, ...
- ASP.NET MVC5中的Model验证
Model验证是ASP.NET MVC中的重要部分,它主要用于判断输入的数据类型及值是否符合我们设定的规则,这篇文章就介绍下ASP.NET MVC中Model验证的几种方式. 后台验证 DataAnn ...
- 用Retrofit发送请求中添加身份验证
用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...
- 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击
CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...
- nancy中视图呈现 Html.Partial(RenderPage的替代品)
在mvc中有RenderPage 用来呈现其他视图的内容,而在nancy中没有RenderPage.怎么办呢? mvc中RenderPage的替代品,就是 Html.Partial. 使用方式 @Ht ...
- Azure Service Bus 中的身份验证方式 Shared Access Signature
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- WPF中的数据验证
数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...
- Lotus开发之Lotus Notes中域的验证
一:介绍 Lotus中的域主要有以下的类型:文本,日期/时间,对话框列表,复选框,单选按钮,RTF等等.Lotus中域的验证方式有很多种公式,lotusscript,javascript等 ...
随机推荐
- CFGym 101161I 题解
一.题目链接 http://codeforces.com/gym/101161/problem/I 二.题意 给定一棵树,一个初始的省会城市,若干个询问,0表示修改省会城市,1表示查询去省会必须经过指 ...
- javascript中 关于eval的那些事
javascript中的eval是一个非常灵活,但是灵活是伴随着风险的. 一.下面我们来看看那使用eval声明变量的问题. function test(x){ eval("var a=x;& ...
- tcpdump查看某个端口数据
tcpdump -i eth0 -nn -A port tcpdump src
- ASPxGridView删除、添加、修改成功后,弹出提示对话框的方法
分为几步: 1.在aspx文件中添加 function EndCallBack(s, e) { if (s.cpAlertMsg != "" && s.cpA ...
- 可视化库-Matplotlib-Pandas与sklearn结合(第四天)
1. 计算每一种的比例的百分比 import pandas as pd from matplotlib.ticker import FuncFormatter np.random.seed(0) df ...
- 6 MySQL--表--完整性约束
参考:https://www.cnblogs.com/alice-bj/p/8824693.html 完整性约束: http://www.cnblogs.com/linhaifeng/articles ...
- zk分布式锁-排它锁简单实现
package Lock; import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;import ...
- LevelDB Version
[LevelDB Version] Version 保存了当前磁盘以及内存中所有的文件信息,一般只有一个Version叫做"current" version(当前版本).Level ...
- jmeter 常用函数
${__Random(10000000,19999999,str)};vars.put("msisdn","182"+${__evalVar(str)});
- java webservice maven spring Class Not Found Exception解决
project clean——>maven clean——>update maven ——>server clean——>build project ——>maven i ...