`

写了一个jwt的类,但是没有达到网页上的效果

    博客分类:
  • jwt
 
阅读更多
package com.test.jwt;

import java.io.UnsupportedEncodingException;
import java.security.Key;
import java.util.Base64;
import java.util.Date;

import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

import org.junit.Test;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class JwtHelper {
	
	//Token过期时间
	private final static int expiresSecond = 172800000;

	/*
	 * 把秘钥转成base64格式
	 */
	@Test
	public static String base64for(String keyText) throws UnsupportedEncodingException {
		final Base64.Decoder decoder = Base64.getDecoder();
		final Base64.Encoder encoder = Base64.getEncoder();

		final byte[] keyByte = keyText.getBytes("UTF-8"); // base64Secret.getBytes("UTF-8");
		// 编码
		final String encodedKey = encoder.encodeToString(keyByte);

		//System.out.println("加密后秘钥  " + encodedKey);
		// 解base64码
		//System.out.println("解密后秘钥  " + new String(decoder.decode(encodedKey), "UTF-8"));

		return encodedKey;
	}

	// 根据秘钥,解密jwt加密内容,转成实体Claim,就可以从Claim中取出内容。Claims实际上是个Map
	public static Claims parseJWT(String jsonWebToken, String encodedKey) {
		try {
			Claims claims = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(encodedKey))
					.parseClaimsJws(jsonWebToken).getBody();
			return claims;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	/*
	 *根据秘钥以及设置的内容,建立 jwt字符串
	 */
	public static String createJWT(String sub, String name, String orgnization,String role[],
			String scope[], String iat,String encodedKey) {
		SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

		long nowMillis = System.currentTimeMillis();
		Date now = new Date(nowMillis);

		// 生成签名密钥
		byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(encodedKey);
		Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());

		// 设置要添加的参数"alg": "HS256",
		JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT").setHeaderParam("alg", "HS256")
				.claim("sub", sub)
				.claim("name", name)
				.claim("orgnization", orgnization)
				.claim("role", role)
				.claim("scope", scope)	
				.claim("iat", iat)
				.signWith(signatureAlgorithm, signingKey);
		
		// 添加Token过期时间
		if (expiresSecond >= 0) {
			long expMillis = nowMillis + expiresSecond;
			Date exp = new Date(expMillis);
			builder.setExpiration(exp).setNotBefore(now);
		}

		// 生成JWT字符串
		return builder.compact();
	}

	public static void main(String[] args) throws UnsupportedEncodingException {
		
		String myKey =base64for("abc");
 
		String[] role= {"user","contributor","admin"};
		String[] scope= {"mine","orgnization","platform"};
		String iat="1516239022";
		
		String jwt = createJWT("9123657", "张三", "XX信息中心", role,scope,iat,myKey);
		System.out.println("jwt加密后的   " + jwt);

		String jwtString = jwt;
		Claims cla = parseJWT(jwtString, myKey);//Claims实际上是个Map

		
		//下面是取出来的内容
		System.out.println(cla.get("sub"));
		System.out.println(cla.get("name"));
		System.out.println(cla.get("orgnization"));
		System.out.println(cla.get("role"));
		System.out.println(cla.get("scope"));
		System.out.println(cla.get("iat"));
		
	}

}

 写个一个jwt的demo ,然而和https://jwt.io/上的效果不太一样,先忙别的了,对jwt了解还是不深

分享到:
评论

相关推荐

    JWT handbook JWT手册

    一个JWT实际上是一个被编码的JSON字符串,由三个部分组成:头部(Header)、载荷(Payload)、签名(Signature),它们之间用点号(.)分隔。头部指明了该JWT所使用的签名算法,而载荷中则包含了实际传输的数据声明...

    JWT公钥私钥操作工具类

    JWT公钥私钥操作工具类

    JWT 实战教程_jwt_

    这个类通常会实现一个方法,用于签发新的JWT,并另一个方法用于验证接收到的JWT。签发JWT时,将用户信息作为Claims写入Payload,并使用秘钥通过指定的算法生成Signature。 在认证和授权方面,你可以创建一个自定义...

    asp.net中用到的JWT身份验证 JWT.dll 下载

    在描述中,提到了一个“token生成验证工具类”,这通常是一个封装了JWT操作的C#类,可能包含了创建JWT令牌、验证令牌等方法。这个工具类的使用教程链接已经给出,开发者可以通过阅读该教程来了解如何在实际项目中...

    jwt简单的介绍和了解

    1. **用户认证**:登录后,服务器返回一个JWT,客户端将其保存在本地(如Cookie或LocalStorage),后续请求附带上此JWT,服务器验证后即可确定用户身份。 2. **授权**:JWT可以包含权限信息,使得资源服务器可以直接...

    JWT Token生成及验证

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为JSON对象。这种信息可以被验证和信任,因为它是数字签名的。JWT在身份验证和授权场景中广泛应用...

    php实现JWT(json web token)鉴权实例详解

    JWT由三个部分组成:header.payload.signature 以下示例以JWT官网为例 header部分: { alg: HS256, typ: JWT } 对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 说明:该字段为jso

    sringboot-jwt.zip

    3. **生成JWT**:在用户成功登录后,服务器会生成一个JWT并返回给客户端。这通常涉及到创建TokenProvider类,其中包含生成和验证JWT的逻辑。 4. **验证JWT**:对于每个受保护的API,我们需要检查请求头中的JWT。这...

    jwt工具类,包含引入的包

    这个压缩包提供了一个JWT的工具类,包含了处理JWT相关操作所需的基本功能,并且集成了MD5加密方法,使得在实际开发中能够快速便捷地进行身份验证和数据加密。 JWT工具类的核心知识点包括: 1. **JWT结构**:JWT由...

    PHP jwt类库

    - **Signature**: 使用Header和Payload以及一个密钥(secret key)通过指定的算法计算得出,用于验证JWT的完整性和来源。 ### 2. PHP JWT类库的使用 在PHP中,常用的JWT库有`firebase/php-jwt`,它是PHP的一个轻量...

    jwt在线解密网站,可用于jwt的解码

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这种信息可以被验证和信任,因为它是数字签名的。JWT被广泛用于身份验证和授权...

    java jwt jar包

    这个jar包提供了处理JWT创建、验证和解析的类和方法。 JWT本身由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部通常包含令牌类型(JWT)和加密算法;载荷则携带实际的数据,如用户ID、角色...

    Go-jwthelper是一个Golang包提供了JWT(JSONWebToken)功能基于jwt-go.

    Go-jwthelper是Golang语言中的一个库,它构建在jwt-go之上,为开发者提供了更方便、简洁的方式来处理JWT相关的任务。这个库的主要目标是简化JWT的创建、解析和验证流程,帮助开发者在Go应用程序中安全地实现身份验证...

    jwt,springboot整合

    JWT(JSON Web Token)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个 JSON 对象。这个信息可以被验证和信任,因为它是数字签名的。JWT 可以用于认证和授权,...

    签发JWT,验证JWT,解析JWT字符串

    签发JWT,验证JWT,解析JWT字符串

    乐优商城JWT工具类

    5. **刷新JWT**:为了延长用户的会话时间,工具类可能提供了刷新JWT的功能,当令牌快过期时,用户可以通过旧的JWT获取一个新的JWT。 6. **异常处理**:当JWT无效或验证失败时,工具类应能抛出适当的异常,以便业务...

    spring boot jwt demo

    Spring Boot JWT(JSON Web Token)Demo是一个基于Spring Boot框架的简单应用,用于演示JWT技术在身份验证和授权中的应用。JWT是一种轻量级的身份验证标准,广泛应用于现代Web应用程序,尤其是微服务架构中。在这个...

    sso-jwt.zip

    JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 适用场景 1、用于向Web应用传递...一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名。

    JWTDemo.zip

    总结来说,`JWTDemo.zip`是一个.NET Core API的示例项目,它的目标是展示JWT在实际应用中的实现,帮助初学者理解JWT的工作原理以及如何在.NET Core API中应用JWT进行身份验证和授权。通过深入学习和实践这个项目,...

    asp.net core jwt

    ASP.NET Core JWT(JSON Web Token)是微软ASP.NET Core框架中用于实现身份验证和授权的一种安全机制。JWT是一种轻量级的身份验证标准,它允许在客户端和服务端之间安全地传递信息,无需在每次请求时携带会话信息。...

Global site tag (gtag.js) - Google Analytics