Restful下的token认证方案
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认证方案的更多相关文章
- django使用RestFramework的Token认证
今天实现的想法有点不正规: Django Rest framework的框架的认证,API都运行良好. 现在是要自己写一个function来实现用户的功能. 而不是用Rest 框架里的APIVIEW这 ...
- 微服务常见安全认证方案Session token cookie跨域
HTTP 基本认证 HTTP Basic Authentication(HTTP 基本认证)是 HTTP 1.0 提出的一种认证机制,这个想必大家都很熟悉了,我不再赘述.HTTP 基本认证的过程如下: ...
- webapp用户身份认证方案 JSON WEB TOKEN 实现
webapp用户身份认证方案 JSON WEB TOKEN 实现Deme示例,Java版 本项目依赖于下面jar包: nimbus-jose-jwt-4.13.1.jar (一款开源的成熟的JSON ...
- 基于session和token的身份认证方案
一.基于session的身份认证方案 1.方案图示 2.比较通用的鉴权流程实现如下: 在整个流程中有两个拦截器. 第一个拦截器AuthInteceptor是为了每一次的请求的时候都先去session中 ...
- API网关设计(一)之Token多平台身份认证方案(转载)
原文:https://segmentfault.com/a/1190000018535570?utm_source=tag-newest 概述 今天咱们面对移动互联网的发展,系统一般是多个客户端对应一 ...
- ASP.NET Web API 2系列(四):基于JWT的token身份认证方案
1.引言 通过前边的系列教程,我们可以掌握WebAPI的初步运用,但是此时的API接口任何人都可以访问,这显然不是我们想要的,这时就需要控制对它的访问,也就是WebAPI的权限验证.验证方式非常多,本 ...
- 几种移动app API调用认证方案浅析
最近做的金融项目,app调用的接口需要做一个身份认证,所以找了下目前API services验证的几种方式.之前翻译的一篇文章--[译]移动API安全终极指南中,主要提出了API服务调用验证的问题,通 ...
- Token认证来龙去脉
在Web领域基于Token的身份验证随处可见.在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式. 为什么要用 Token Token 完全由应用管理,所以它可以避开 ...
- Java实现基于token认证
随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...
随机推荐
- BATJ面试指南
Java并发编程面试题汇总 线程 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源).java.lang.Thre ...
- 《程序设计入门——C语言》翁恺老师 第三周编程练习记录
1 时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...
- java第五次笔记
- qr-mili Tekniskt stöd
qr-mili Är ett QR-kodverktyg Identifiera enkelt QR-koder Generera QR-kod Skapa en QR-kod med logotyp ...
- paramiko向服务器自动上传下载文件
import paramikoimport os def download_from(ip,u,p): file_list=['file2',file3','file4'] file_path=&qu ...
- 虚拟机使用ceph-deploy安装ceph
参考: ceph官网介绍 使用ceph-deploy安装Ceph 12.x 安装虚拟机 首先安装虚拟机环境,虚拟机安装这里不做介绍,本实验使用的镜像为CentOS-7-x86_64-Everythin ...
- Oracle 使用序列实现自增列 及重置序列
序列是oracle用来生产一组等间隔的数值.序列是递增,而且连续的.oracle主键没有自增类型,所以一般使用序列产生的值作为某张表的主键,实现主键自增.序列的编号不是在插入记录的时候自动生成的,必须 ...
- php不用正则表达式实现身份证号验证详解
写了一个身份证号验证类,php小白,写的不好,欢迎各位大神给我多提意见和建议 身份证号分为四部分,第一部分是前6位为地址码,7-14位是出生日期,15-17位是同一地方同一天出生的男孩为奇数,女孩是偶 ...
- java实现链栈
package linkstack; /** * Created by Administrator on 2019/4/18. */ public class LinkStack { private ...
- AX视图View中添加静态方法
public static server str EcoResCategoryName(){ DictView dv = new DictView(tableNum("ViewNam ...