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

在Spring Boot microservice的JWT令牌中添加多个声明

顾靖
2023-03-14

我试图在我的微服务中实现基于JWT的令牌管理。我使用Spring Boot开发服务。目前,我创建了一个带有token的angular前端应用程序,并向其发送响应。这里我只添加了声明和主题。

我的代码是这样的:

public String generateUiaToken(String encodedSecret, Users uiaToken) {
    List<Integer> roleIdList = roleRepo.findRoleById((int) uiaToken.id);
    return Jwts.builder()
            .setId(UUID.randomUUID().toString())
            .setSubject(uiaToken.getUsername())
            .signWith(SignatureAlgorithm.HS512, encodedSecret)
            .claim("Role_List", roleIdList)
            .compact();
}

在这里,我添加了带有JSON角色id列表的声明。我如何添加更多关于使用此结构或作为声明的用户的数据?

共有2个答案

柯梓
2023-03-14

JWT的目的是简单地对用户进行身份验证,我们不需要在JWT中塞满数据,因为如果验证了,我们可以简单地用用户名查询我们需要的任何数据库。我在expressjs中使用passport,我只需生成一个带有我的ID或用户名(两个唯一标识符)的JWT,然后在请求时将其推送到我的Auth头中,我的expressjs验证签名,如果是这样,我可以放心地使用该标识符(用户名或ID),用户自己提出了这个请求,检查用户在实际查询中的权限、角色等,而不是在JWT中传递它

鲜于念
2023-03-14

您可以添加任意数量的索赔。你可以再打一次电话。

Jwts.builder()
        .setId(UUID.randomUUID().toString())
        .setSubject(uiaToken.getUsername())
        .signWith(SignatureAlgorithm.HS512, encodedSecret)
        .claim("Role_List", roleIdList)
        .claim("abc", abcValue)
        .claim("asasas", asasas)
        .compact()
 类似资料:
  • 我们正在使用JWT Nuget来创建和验证令牌。下面是我们用来创建令牌的代码 我的理解是,这不会加密令牌,因为我能够通过访问jwt.io解析令牌,并且能够读取内容。我想加密令牌,这样它就不应该被解析。我在JWT Nuget中找不到任何可以加密令牌的方法。 那么如何使用JWT nuget对令牌进行签名和加密呢? 编辑: 我知道JWT不需要任何加密,因为只有经过身份验证的用户才能读取令牌,这意味着,我

  • 我想允许用户重置他们的密码。为了做到这一点,我首先检查他们的电子邮件是否存在于数据库中,如果存在,我向他们发送一封电子邮件,其中包含指向重置密码页面的链接。为了确保链接是安全的,后者是用jwt令牌制作的,该令牌仅对15mn有效。 但是,无法访问该url,因为有“.”在jwt中: < code > http://www . myapp . com/reset-password/eyjhbgcioin

  • 问题内容: 我正在使用dgrijalva / jwt-go /软件包。 我想从令牌中提取有效载荷,但是我找不到方法。 示例(摘自:https : //jwt.io/): 对于编码: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOixMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydhV​​rF7H

  • 我已经在Oauth2框架中实现了JWT令牌。在实现之后,我想到的查询很少,如下所示: 1.在实现JWT之前,每当用户以相应的访问令牌作为载体访问资源服务器中的API,资源服务器就使用user-info-uriendpoint与auth服务器进行检查,如下所示 在JWT实现之后,我认为资源服务器和auth服务器之间不会发生检查调用,而是使用公钥验证JWT令牌的签名。但是,在获得JWT令牌之后,为了检

  • 问题内容: 我目前正在使用Golang应用程序。我从客户端收到JWT令牌,在Go中,我需要对该令牌进行解码并获取以下信息:用户,名称等。我正在检查可用于处理JWT的库令牌,我来到https://github.com/dgrijalva/jwt- go ,但我看不到如何简单地制作所需的东西。 我有令牌,我需要将信息解码为地图或至少为json。在哪里可以找到如何做的指南?谢谢! 问题答案: 函数接受第

  • 我遵循本教程使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌无效,该怎么办?我希望能够对API进行调用,以删除我的令牌。 我正在使用Express和Node。 从我能收集到的信息来看,我的选择是拥有一个存储令牌的令牌db。当我想让我的令牌过期时,我会从DB中过期/删除该令牌。 我还看到人们随意地说“移除”物理硬盘空间中的令牌,但我无法找出令牌的物理存储位置,以便我移除它。