zoukankan      html  css  js  c++  java
  • JSON Web Tokens

    JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

    JWT.IO allows you to decode , verify and generate JWT

    http://jwt.io

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

    • 客户端使用用户名跟密码请求登录
    • 服务端收到请求,去验证用户名与密码
    • 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
    • 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
    • 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
    • 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

    JWT标准的Token分为三部分:

    header.payload.signature

    Header头部,使用Base64编码。

    {
    "typ":"JWT", # Token 类型
    "alg":"HS512" # 加密的算法
    }

    Payload 载荷,Token的具体内容,使用Base64编码

    {
    "iss" : "http://example.org",   #非必须。issuer 请求实体,可以是发起请求的用户的信息,也可是jwt的签发者。
    "iat" : 1356999524,                #非必须。issued at 发行时间。 token创建时间,unix时间戳格式
    "exp" : "1548333419",            #非必须。过期时间,expire 指定token的生命周期。unix时间戳格式
    "aud" : "http://example.com",   #非必须。Audience,观众,接收该JWT的一方。
    "sub" : "jrocket@example.com",  #非必须。Subject 主题,该JWT所面向的用户
    "nbf" : 1357000000,   # 非必须。not before。如果当前时间在nbf里的时间之前,则Token不被接受;一般都会留一些余地,比如几分钟。
    "jti" : '222we',     # 非必须。JWT ID。针对当前token的唯一标识
    
    "username":"admin",  # 自定义字段
    "email":"demo@demo.com",  #自定义字段
    "Role" : ["Manager", "Project Administrator"] # 自定义字段
    }

    signature签证,由三部分组成。

    HMACSHA512( base64UrlEncode(header)+"."+base64UrlEncode(payload),secret )

    前两个使用.连接,然后使用secret和Header中的加密算法进行加密,将加密结果作为signature连接在最后。

    Java JWT: JSON Web Token for Java and Android, created by Stormpath's CTO ,Les Hazlewood and is now maintaioned by a community of contributors.sss

    Github: http://github.com/jwtk/jjwt

    加解密的key是通过固定字符串转换而生成的,subject为用户信息的json字符串;ttlMillis是指token的有效期,时间较短,需要定时更新。

    这里要介绍的token刷新方式,是在生成token的同时生成一个有效期较长的refreshToken,后续由客户端定时根据refreshToken来获取最新的token。浏览器和服务端之间建立sse(server send event)请求,来实现刷新。 github地址:https://github.com/ahmu/spring-authorization-demo

    参考文章:

    • jwt官网:https://jwt.io
    • jjwt项目:https//github.com/jwtk/jjwt
    • Introduction to JSON Web Tokens: https://jwt.io/introduction/
    • How to Create and verify JWTs in Java: https://stormpath.com/blog/jwt-java-create-verify
    • http://blog.csdn.net/zsg88/article/details/76796527
    • http://www.cnblogs.com/anny0404/p/5318692.html
    • http://www.cnblogs.com/FightingMan/p/6203429.html

    转载于:https://my.oschina.net/sasky/blog/1514319

  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/twodog/p/12139599.html
Copyright © 2011-2022 走看看