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实际上是一个被编码的JSON字符串,由三个部分组成:头部(Header)、载荷(Payload)、签名(Signature),它们之间用点号(.)分隔。头部指明了该JWT所使用的签名算法,而载荷中则包含了实际传输的数据声明...
JWT公钥私钥操作工具类
这个类通常会实现一个方法,用于签发新的JWT,并另一个方法用于验证接收到的JWT。签发JWT时,将用户信息作为Claims写入Payload,并使用秘钥通过指定的算法生成Signature。 在认证和授权方面,你可以创建一个自定义...
在描述中,提到了一个“token生成验证工具类”,这通常是一个封装了JWT操作的C#类,可能包含了创建JWT令牌、验证令牌等方法。这个工具类的使用教程链接已经给出,开发者可以通过阅读该教程来了解如何在实际项目中...
1. **用户认证**:登录后,服务器返回一个JWT,客户端将其保存在本地(如Cookie或LocalStorage),后续请求附带上此JWT,服务器验证后即可确定用户身份。 2. **授权**:JWT可以包含权限信息,使得资源服务器可以直接...
JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为JSON对象。这种信息可以被验证和信任,因为它是数字签名的。JWT在身份验证和授权场景中广泛应用...
JWT由三个部分组成:header.payload.signature 以下示例以JWT官网为例 header部分: { alg: HS256, typ: JWT } 对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 说明:该字段为jso
3. **生成JWT**:在用户成功登录后,服务器会生成一个JWT并返回给客户端。这通常涉及到创建TokenProvider类,其中包含生成和验证JWT的逻辑。 4. **验证JWT**:对于每个受保护的API,我们需要检查请求头中的JWT。这...
这个压缩包提供了一个JWT的工具类,包含了处理JWT相关操作所需的基本功能,并且集成了MD5加密方法,使得在实际开发中能够快速便捷地进行身份验证和数据加密。 JWT工具类的核心知识点包括: 1. **JWT结构**:JWT由...
- **Signature**: 使用Header和Payload以及一个密钥(secret key)通过指定的算法计算得出,用于验证JWT的完整性和来源。 ### 2. PHP JWT类库的使用 在PHP中,常用的JWT库有`firebase/php-jwt`,它是PHP的一个轻量...
JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这种信息可以被验证和信任,因为它是数字签名的。JWT被广泛用于身份验证和授权...
这个jar包提供了处理JWT创建、验证和解析的类和方法。 JWT本身由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部通常包含令牌类型(JWT)和加密算法;载荷则携带实际的数据,如用户ID、角色...
Go-jwthelper是Golang语言中的一个库,它构建在jwt-go之上,为开发者提供了更方便、简洁的方式来处理JWT相关的任务。这个库的主要目标是简化JWT的创建、解析和验证流程,帮助开发者在Go应用程序中安全地实现身份验证...
JWT(JSON Web Token)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个 JSON 对象。这个信息可以被验证和信任,因为它是数字签名的。JWT 可以用于认证和授权,...
签发JWT,验证JWT,解析JWT字符串
5. **刷新JWT**:为了延长用户的会话时间,工具类可能提供了刷新JWT的功能,当令牌快过期时,用户可以通过旧的JWT获取一个新的JWT。 6. **异常处理**:当JWT无效或验证失败时,工具类应能抛出适当的异常,以便业务...
Spring Boot JWT(JSON Web Token)Demo是一个基于Spring Boot框架的简单应用,用于演示JWT技术在身份验证和授权中的应用。JWT是一种轻量级的身份验证标准,广泛应用于现代Web应用程序,尤其是微服务架构中。在这个...
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 适用场景 1、用于向Web应用传递...一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名。
总结来说,`JWTDemo.zip`是一个.NET Core API的示例项目,它的目标是展示JWT在实际应用中的实现,帮助初学者理解JWT的工作原理以及如何在.NET Core API中应用JWT进行身份验证和授权。通过深入学习和实践这个项目,...
ASP.NET Core JWT(JSON Web Token)是微软ASP.NET Core框架中用于实现身份验证和授权的一种安全机制。JWT是一种轻量级的身份验证标准,它允许在客户端和服务端之间安全地传递信息,无需在每次请求时携带会话信息。...