token 算法 java_Java Token的原理和生成使用机制

本文介绍了JWT(JSON Web Token)的基本概念,包括它的三个组成部分:Header、Payload和Signature,并展示了如何在Java中使用java-jwt和jjwt库进行JWT的加密和解密。此外,还提供了配置CORS允许跨域、拦截器实现Token验证以及发送和获取Token的示例代码。
摘要由CSDN通过智能技术生成

1、JWT 简介

组成部分:

Header 头部:一般为token类型和加密算法

Payload 负载:一些用户信息和额外的声明数据

Signature 签名:签名需要使用编码后的header和payload以及一个秘钥 (很安全),前两段的结合加密

2:jar包依赖

com.auth0

java-jwt

3.1.0

io.jsonwebtoken

jjwt

0.6.0

3:jwt加密和解密的工具类

package com.alienlab.news.utils;

import com.alibaba.fastjson.JSONObject;

import io.jsonwebtoken.Claims;

import io.jsonwebtoken.JwtBuilder;

import io.jsonwebtoken.Jwts;

import io.jsonwebtoken.SignatureAlgorithm;

import javax.crypto.spec.SecretKeySpec;

import javax.xml.bind.DatatypeConverter;

import java.security.Key;

import java.util.Date;

/**

* Created by Msater Zg on 2017/3/13. jwt实现方式

*/

public class JwtUtils {

public static Claims parseJWT(String jsonWebToken, String base64Security) {

try {

Claims claims = Jwts.parser()

.setSigningKey(DatatypeConverter.parseBase64Binary(base64Security))

.parseClaimsJws(jsonWebToken).getBody();

return claims;

} catch (Exception ex) {

return null;

}

}

前三个参数为自己用户token的一些信息比如id,权限,名称等。不要将隐私信息放入(大家都可以获取到)

public static String createJWT(String name, String userId, String role,

String audience, String issuer, long TTLMillis, St

JWT应用场景? 主要用于身份认证 1、相比xml而言json格式简单,jwt中已经有了你需要的全部信息,拿出来用就行。 2、同session相比,性能更好一些,省去了处理分布session的问题;对于大行其道的restful来讲,支持得很好;浏览器+app+pc,这种多终端开发,是很好的选择。 如果可以,新系统不再使用session保存用户信息。对于我们自己的platina开发平台,可以平滑过渡到jwet,让开发人员感觉不到。 JWT有什么好处? 1、支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输. 2、无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息 4、更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可. 5、去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可. 6、更适用于移动应用: 当你的客户Duan是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。 7、CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。 8、性能: 一次网络往返时间(通过数据库cha询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多. 9、不需要为登录页面做特殊处理: 如果你使用Protractor 做功能测试的时候,不再需要为登录页面做特殊处理. 10、基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google, Microsoft). 11、避免因Cookie本地泄露导致的客户风险,由于用HTTP协yi头来传输JWT令牌,不会在客户电脑存储cookie信息。 12、有效降低sql数据库的压力,关键非安全的用户信息可以直接存储与JWT中,下次请求时只需要读取JWT中的数据,不必再去sqlcha询。 注意事项:本模块中生成的JWT令牌中的body区域的内容,前端只需要base64解码就可以获得body区的json,但是由于JWT的特殊构造,sign区的加密采用sha256加密,基本无需担心令牌伪造。 模块中包含了一些其他常见算法,如sign签名校验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值