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. linux常用命令 echo输出命令

    echo输出命令 'echo [选项] [输出内容]' 选项 '-e' 支持反斜线控制的字符转换 控制字符​ \a 输出警告音 \b 退格键,也就是向左删除键 \n 换行符 \r 回车键 \t 制表符 ...

  2. <input>标签单、复选相关查询地址

    http://www.w3school.com.cn/tags/tag_input.asp 以下是相关示例,转载 lfx_web: <html><head><script ...

  3. 数据结构复习之Vector

    /** * The number of times this list has been <i>structurally modified</i>. * Structural ...

  4. .net core webapi 使用ValidationAttribute对比同一对象的多个参数

    众所周知,在使用DataAnnotations数据验证的时候,特别是针对同一个InputDto的多个属性进行对比的时候,例如起始日期不能大于结束日期,我们需要在Attribute中知道当前InputD ...

  5. spring boot读取classpath下的json文件

    import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resour ...

  6. Appium简介及工作原理

    一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver ...

  7. Java 平时作业五

    使用 I/O 流和文件对象实现目录备份功能. package asg5; import java.io.File; import java.io.FileInputStream; import jav ...

  8. java static关键字的使用

    static关键字    通常来说,创建类的时候,是用new创建此类的对象才可以获得,执行new创建对象时数据存储空间才被分配,其方法才被外界调用    有两种情况用new无法解决:        1 ...

  9. pyCharm中BeautifulSoup应用

    BeautifulSoup 是第三方库的工具,它包含在一个名为bs4的文件包中,需要额外安装,安装方式 非常简单,进入python的安装目录,再进入scripts子目录,找到pip程序, pip in ...

  10. MYSQL+PHP的学习之路

    MYSQL+PHP 先从MYSQL开始吧 第一步:SQL语句基础 1.书籍 2.网站: 这个网站在线测试和考试http://sqlzoo.net/wiki/SELECT_basics/zh 3.学习过 ...