• 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);

  • 相关阅读:
    beini破解无线
    commview for wifi 破解无线
    取代奶瓶Minidwep-gtk 破 WPA 全攻略
    CDLinux环境下WiFi密码破解
    WiFi密码破解CDlinux
    如何在vue.js渲染完界面之后再调用函数
    Flex布局备忘
    IDEA基本配置
    Flutter环境搭建踩坑-Android sdkmanager tool not found
    Git操作-DevOps
  • 原文地址:https://www.cnblogs.com/wang2650/p/4833774.html
Copyright © 2020-2023  润新知