博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Json Web Token身份认证
阅读量:7207 次
发布时间:2019-06-29

本文共 1549 字,大约阅读时间需要 5 分钟。

hot3.png

Json Web Token身份认证 博客分类: java 架构  

用户身份认证一般有5种方式

  • HTTP Basic authentication
    在发送请求时在HTTP头中加入authentication字段,将用Base64编码的用户名和密码作为值,每次发送请求的时候都要发送用户名和密码,实现比较简单。
  • Cookies
    向后台发送用户名和密码,在用户名和密码通过验证后,保存返回的Cookie作为用户已经登录的凭证,每次请求时附带这个Cookie
  • Signatures
    用户拿到服务器给的私钥,在发送请求前,将整个请求使用私钥来加密,发送的将是一串加密信息,此方式只适用于API
  • One-Time Passwords
    一次一密,每次登录时使用不同的密码,一般由服务端通过邮件将密码发给用户,这种登录方式比较繁琐
  • JSON Web Token
    用户发送按照约定,向服务端发送HeaderPayloadSignature,并包含认证信息(密码),验证通过后服务端返回一个token,之后用户使用该token作为登录凭证,适合于移动端和api

因为前后端分离的缘故,现在的后台多数只提供数据部分,一般使用JSON格式,所以JSON Web Token是比较流行的认证方式。

JWT的认证方式相比其他的认证方式有一下优点:

  • 信息可用HMAC或RSA加密,信息安全性较高
  • 生成的密文短,密文可以包含所有用户信息,认证过期时间或用户权限等自定义信息
  • 适合用于手机应用和单页面应用的身份认证
  • 使用灵活,一旦取得了JWT,可以通过POST方式或添加入HTTP头中发送

JWT结构

JWT包含3个部分

  • Header (头部)
  • Payload (负载)
  • Signature (签名)

Header

1234
{
"alg": "HS256", "typ": "JWT"}

JWT的头部是固定的,alg是算法的意思表示该JWT使用的是何种算法加密。typ字段值是固定的JWT

Payload

12345
{
"sub": "1234567890", "name": "John Doe", "admin": true}

负载部分就是具体的认证信息,通过修改这部分的内容来控制认证信息如用户权限等。除了一些保留字段exp(过期时间)、audiss等外,使用方法跟普通Json一样。

Signature

签名,也就是密钥,用来保证密文的安全强度

以上3部分都经过处理后用 .分隔再使用HMAC SHA256RSA加密为一段字符串

1234
HMACSHA256(  base64UrlEncode(header) + "." +  base64UrlEncode(payload),  secret)

JWT使用流程

jwt diagram

客户端POST用户名和密码到服务端,若对安全要求较高可以是加密后的用户名或密码,服务端把拿到的用户名和密码与数据库中的对比,若相同则按照上面的流程生成JWT,然后返回客户端。在此之后客户端的所有请求,可以在Authorization HTTP头或POST数据中附带得到的JWT。服务端验证JWT并解析出Payload 部分,以此来判断用户的权限。

 

JWT的使用方法很简单,就拿node.js的包node-jsonwebtoken来说加密和验证就两个函数jwt.signjwt.verify并且中提供了很多语言的JWT包。

 

http://my.oschina.net/qiaojieqq11/blog/676816

转载于:https://my.oschina.net/xiaominmin/blog/1599087

你可能感兴趣的文章
转:numpy数据集练习——鸢尾花数据集
查看>>
把wcf服务,改成restful方式,以及吐槽
查看>>
SpatiaLite 各版本数据库差异
查看>>
Python变量和数据类型
查看>>
HTML(二)选择器
查看>>
C++ 类模板的使用
查看>>
AJAX编程-封装ajax工具函数
查看>>
Common Lisp学习笔记(九)
查看>>
一只菜鸡的话
查看>>
变量声明和定义的区别
查看>>
python之路之课后作业
查看>>
p4475 巧克力王国
查看>>
js中的Attribute
查看>>
Mysql的一些常用命令
查看>>
蓝桥杯:基础练习 闰年判断
查看>>
LeetCode-82-Remove Duplicates from Sorted List II
查看>>
ASP.NET XML读取、增加、修改和删除操作
查看>>
struts2将servlet对象注入到Action中
查看>>
快速排序
查看>>
const变量存储位置及const指针
查看>>