Restful讲究一个无状态的特性(stateless),这就不能把一些例如登陆后的认证信息写进cookie的传统方式,

目前探索的是采用token的方式来进行权限的识别。

刚开始研究token的时候,很容易查到比较流行的JWT(JSON Web Token)的很多资料,目前有RFC的规范(尽管还只是个草案)。

简单来说JWT规定了可以自定义的CLAIM区域,并且可以加密(要在头部指明加密方法),如下图所示

(本图来自于https://jwt.io)

由于采用的非对称加密的方式,所以一般情况下信息还是比较安全的(有人对于header里边标明了加密算法而有些担忧,提出改进的是只是标明自定义算法type例如"alg:1")。

JWT的优势显而易见,这样认证过的一些信息就可以放入其中,并且下次用户再次访问的时候,只需要将JWT返回就好,服务器根据解密JWT的内容来获取一些认证信息,并且可以在JWT里设定过期的时间,用于识别登陆时效性。

但是如果用于用户登陆认证方面,就必须满足用户主动logout的情况,但是由于这些认证后的信息都保存在JWT里,所以有一种建议是将JWT里边的过期时间设置的较短,每次成功访问后刷新过期时间,一旦过期也就理解为logout了。这种做法,并不满足logout的

动作,所以更常用的一种做法就是将JWT生成后保存在数据库中例如保存在redis中,并由redis设定过期时间。

分析到此,发现JWT还是要保存在数据库中,而且其认证后的信息某种意义上来说虽然加密了,但是还是暴露在public当中,这一点让我总感觉不舒服。

于是,一个新的方案产生了,既然逃不出要利用数据库,那么就将认证后的信息保存在数据库中(例如redis),返回给用户的token就是为了识别唯一性,当用户成功认证后将获得一个token,这个token并不包含任何信息,只是为了用户下次再次访问的时候,后台能够在数据库中查询到相关信息。

(之所以用redis,考虑到其读取K-V的速度和命中率都很不错)

Restful下的token认证方案的更多相关文章

  1. django使用RestFramework的Token认证

    今天实现的想法有点不正规: Django Rest framework的框架的认证,API都运行良好. 现在是要自己写一个function来实现用户的功能. 而不是用Rest 框架里的APIVIEW这 ...

  2. 微服务常见安全认证方案Session token cookie跨域

    HTTP 基本认证 HTTP Basic Authentication(HTTP 基本认证)是 HTTP 1.0 提出的一种认证机制,这个想必大家都很熟悉了,我不再赘述.HTTP 基本认证的过程如下: ...

  3. webapp用户身份认证方案 JSON WEB TOKEN 实现

    webapp用户身份认证方案 JSON WEB TOKEN 实现Deme示例,Java版 本项目依赖于下面jar包: nimbus-jose-jwt-4.13.1.jar (一款开源的成熟的JSON ...

  4. 基于session和token的身份认证方案

    一.基于session的身份认证方案 1.方案图示 2.比较通用的鉴权流程实现如下: 在整个流程中有两个拦截器. 第一个拦截器AuthInteceptor是为了每一次的请求的时候都先去session中 ...

  5. API网关设计(一)之Token多平台身份认证方案(转载)

    原文:https://segmentfault.com/a/1190000018535570?utm_source=tag-newest 概述 今天咱们面对移动互联网的发展,系统一般是多个客户端对应一 ...

  6. ASP.NET Web API 2系列(四):基于JWT的token身份认证方案

    1.引言 通过前边的系列教程,我们可以掌握WebAPI的初步运用,但是此时的API接口任何人都可以访问,这显然不是我们想要的,这时就需要控制对它的访问,也就是WebAPI的权限验证.验证方式非常多,本 ...

  7. 几种移动app API调用认证方案浅析

    最近做的金融项目,app调用的接口需要做一个身份认证,所以找了下目前API services验证的几种方式.之前翻译的一篇文章--[译]移动API安全终极指南中,主要提出了API服务调用验证的问题,通 ...

  8. Token认证来龙去脉

    在Web领域基于Token的身份验证随处可见.在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式. 为什么要用 Token Token 完全由应用管理,所以它可以避开 ...

  9. Java实现基于token认证

    随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...

随机推荐

  1. angular 组件学习-组件内属性绑定

    #组件内的属性(元素的属性)绑定(property binding) 应用场景:通过改变DOM元素的属性,动态显示/隐藏一个元素 知识点:HTML 属性与DOM属性的区别 改变HTMl属性,浏览器需要 ...

  2. K8S配置安装全过程

    V1.11.1https://github.com/kubernetes/kubernetes/releases/tag/v1.11.1环境准备:系统:centos7.2.1511[root@mast ...

  3. sed应用

    删除每行空白字符 sed -i 's/^[[:space:]]*//' user.txt 删除空白行 sed -i '/^$/d' user.txt

  4. Android ORC文字识别之识别身份证号等(附源码)

    项目地址https://github.com/979451341/OrcTest 我们说说实现这个项目已实现的功能,能够截图手机界面的某一块,将这个某一块图片的Bitmap传给tess-two的代码来 ...

  5. Selenium自动化获取Http报文信息并判断当前API状态

    public int loadingFinishedCount(WebDriver driver){ LogEntries logs = driver.manage().logs().get(&quo ...

  6. c#连接db2数据库

    .net项目要连接db2数据库,是要安装客户端的,否则是连接不上的: 若出现“未在本地计算机上注册‘ibmdadb2’提供程序” 解决办法: 1.先找到安装后的ibmdadb2.dll文件复制到c:\ ...

  7. const修饰指针+volatile +restrict

    const这块的难点 const修饰指针有以下的几种形式 ,不同的形式 它的意义不一样. 形式1: int a=23: const int *p=&a: a是int型,&a是int * ...

  8. [Leetcode 37]*数独游戏 Sudoku Solver 附解释

    [题目] 每一行.每一列.每个3*3的格子里只能出现一次1~9. [思路] 参考了思路,附加了解释. dfs遍历所有非空格子,n是已经填好的个数. 初始化条件.n=81,都填了,返回结束.对于已经填好 ...

  9. HDU1237

    /************************************************************** 作者:陈新 邮箱:cx2pirate@gmail.com 用途:hdu1 ...

  10. js 原型原型链

    个人的理解,有什么不正确的请指教,共同学习 //声明一个构造函数Personfunction Person(name,age){ this.name = name; this.age = age;} ...