当前位置: 首页 > 知识库问答 >
问题:

JWT组件信息

胡泓
2023-03-14

    private static final Key secret = MacProvider.generateKey(SignatureAlgorithm.HS256);
    private static final byte[] secretBytes = secret.getEncoded();
    private static final String base64SecretBytes = Base64.getEncoder().encodeToString(secretBytes);

    private static String generateToken(String subject, String issuer, String audience) {
        String id = UUID.randomUUID().toString().replace("-", "");
        Date now = new Date();
        Date exp = new Date(System.currentTimeMillis() + (1000 * 30)); // 30 seconds

        String token = Jwts.builder()
                .setId(id)
                .setIssuedAt(now)
                .setNotBefore(now)
                .setExpiration(exp)
                .setSubject(subject)
                .setIssuer(issuer)
                .setAudience(audience)
                .signWith(SignatureAlgorithm.HS256, base64SecretBytes)
                .compact();

        return token;
    }

    private static void verifyToken(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(base64SecretBytes)
                .parseClaimsJws(token).getBody();

        System.out.println("----------------------------");
        System.out.println("ID: " + claims.getId());
        System.out.println("Subject: " + claims.getSubject());
        System.out.println("Issuer: " + claims.getIssuer());
        System.out.println("Expiration : " + claims.getExpiration());
        System.out.println("Not Before : "+claims.getNotBefore());
        System.out.println("Audience :: "+claims.getAudience());
    }

我有web服务JHipster API,我编写了Java代码来连接它,我知道JWT令牌有三个组件,来自JWT web站点https://JWT.io/

首先解码

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

secound是有效载荷

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

我在这一部分的问题是我们如何知道JHipster API webserves中的sub、name和iat?

共有1个答案

蓝侯林
2023-03-14

[更新]

这个答案是根据io.jsonWebToken:jjwt库得出的

根据他们github页面上提供的文档

Jws<Claims> jws;

try {
    jws = Jwts.parser()         // (1)
    .setSigningKey(key)         // (2)
    .parseClaimsJws(jwsString); // (3)

    // we can safely trust the JWT

catch (JwtException ex) {       // (4)

    // we *cannot* use the JWT as intended by its creator
}

setSigningKey()是用于保护JWT的密钥。使用这个密钥,您可以验证您的JWT是否不变和有效。

parseClaimsJws()是将JWSString设置为参数的地方。

在此之后,您应该能够迭代声明并读取值

[旧]

这个答案是根据com.auth0:Java-jwt库

为了让你“声明”你必须解码你的JWT。您可以使用以下代码完成此操作:

DecodedJWT decodedJWT = JWT.decode(JWTString);
String sub = decodedJWT.getClaim("sub").asString();
String name = decodedJWT.getClaim("name").asString();
String iat = decodedJWT.getClaim("iat").asInt();

如果还想验证JWT是否仍然有效,可以使用JWT验证器:

JWTVerifier verifier = JWT.require("YOUR ALGORITHM").build();
DecodedJWT decodedJWT = verifier.verify(JWTString)
 类似资料:
  • 父子组件间通信 这种情况下很简单,就是通过 props 属性传递,在父组件给子组件设置 props,然后子组件就可以通过 props 访问到父组件的数据/方法,这样就搭建起了父子组件间通信的桥梁。 import React, { Component } from 'react'; import { render } from 'react-dom'; class GroceryList exte

  • 如何从类外或从道具更改状态。SomeFunction()?我结合使用打字脚本。是的,我已经上课了: 类别: 主文件: //这个空间已经下课了,为什么我不能改变它??? 有很多反应js的问题。在这篇文章中有一些方法,但仍然不适合我:https://www.javascriptstuff.com/component-communication/#2-instance-methods 但是例子太单纯了,

  • 1. 前言 本小节我们将介绍组件间是如何实现数据通信的。包括父组件向子组件、子组件向父组件、兄弟组件、非关系组件之间的数据通信。组件通信是组件式开发中非常重要的一部分,也是组件式开发中的难点。在学完本小节之后,同学们可以通过反复地编写组件来加深印象。 2. 慕课解释 组件是 vue 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。我们需要使用特定的方式来

  • 我刚开始使用ReactJS,有点被我遇到的一个问题卡住了。 我的应用程序本质上是一个带有过滤器和更改布局的按钮的列表。目前我正在使用三个组件:、和,显然,当我更改中的设置时,我希望触发中的某个方法来更新我的视图。 我如何使这3个组件相互交互,或者我需要某种全局数据模型,在那里我可以只对它进行更改?

  • 微信小程序中原生提供了selectComponent/SelectorQuery.select方法获取自定义组件实例和wxml节点信息,但是该api使用起来不太方便,并且不具备平台无关性,我们提供了增强指令wx:ref用于获取组件实例及节点信息,该指令的使用方式同vue中的ref类似,在模板中声明了wx:ref后,在组件ready后用户可以通过this.$refs获取对应的组件实例或节点查询对象(

  • 本文向大家介绍详解Angualr 组件间通信,包括了详解Angualr 组件间通信的使用技巧和注意事项,需要的朋友参考一下 Angualr 组件间通信 约定: 遵循Angular官方的说法,下文中的AngularJS代指1.x版本,Angular代指Angular2及以后的升级版本。 采用Angular(或者任意MV*)的前端框架开发单页应用(SPA)时,我们都可能会遇见如下的场景: A组件和B组