gpt4 book ai didi

spring-boot - 如何创建用于签署 JWT token 的 Spring 安全 key ?

转载 作者:行者123 更新时间:2023-12-03 16:13:48 25 4
gpt4 key购买 nike

我用 implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.10.6'作为依赖。

我想创建一个 JWT token ,如下所示:

@Value("${jwt.token.secret}")
private Key secret;

JwtToken.builder().value(Jwts.builder()
.setClaims(createClaims(account))
.setSubject(subject.toString())
.setIssuedAt(Date.from(createdDateTime))
.setExpiration(Date.from(expirationDateTime))
.signWith(secret)
.compact()).expiration(expirationDateTime.toString()).build()

我曾经在 application.properties 中提供一个字符串并如上所示引用该 key ,但不推荐使用字符串作为 key 。我应该如何创建 key secret ?

最佳答案

您需要将 key 字符串转换为 Java Key实例。

您的 key 字符串是 Base64 编码的吗?如果是这样,请执行以下操作:

@Value("${jwt.token.secret}")
private String secret;

private Key getSigningKey() {
byte[] keyBytes = Decoders.BASE64.decode(this.secret);
return Keys.hmacShaKeyFor(keyBytes);
}

JwtToken.builder().value(Jwts.builder()
.setClaims(createClaims(account))
.setSubject(subject.toString())
.setIssuedAt(Date.from(createdDateTime))
.setExpiration(Date.from(expirationDateTime))
.signWith(getSigningKey())
.compact()).expiration(expirationDateTime.toString()).build()

如果您的 key 不是 base64 编码的(它可能应该是,因为例如,如果您使用原始密码,您的 key 可能不正确或格式不正确),您可以通过以下方式执行此操作:

private Key getSigningKey() {
byte[] keyBytes = this.secret.getBytes(StandardCharsets.UTF_8);
return Keys.hmacShaKeyFor(keyBytes);
}

但是,通常不建议使用第二个示例,因为这可能意味着您的 key 格式不佳。格式良好的安全随 secret 钥不是人类可读的,因此要将其存储为字符串, key 字节通常首先进行 base64 编码。

来自文档 https://github.com/jwtk/jjwt#jws-key-create :

If you want to generate a sufficiently strong SecretKey for use with the JWT HMAC-SHA algorithms, use the Keys.secretKeyFor(SignatureAlgorithm) helper method:

SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256); //or HS384 or HS512

Under the hood, JJWT uses the JCA provider's KeyGenerator to create a secure-random key with the correct minimum length for the given algorithm.

If you have an existing HMAC SHA SecretKey's encoded byte array, you can use the Keys.hmacShaKeyFor helper method. For example:

byte[] keyBytes = getSigningKeyFromApplicationConfiguration();
SecretKey key = Keys.hmacShaKeyFor(keyBytes);

关于spring-boot - 如何创建用于签署 JWT token 的 Spring 安全 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55102937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com