“指定的密钥字节数组是 192 位,对于任何 JWT HMAC-SHA 算法来说都不够安全......”mockmvc post 请求的错误

问题描述 投票:0回答:3

我想调用下面的代码来编写Kotlin登录的集成测试:

@Test
fun userSignup() {
    var result  = this.mockMvc.perform(post("http://localhost/signup")
        .content("{\"email\" : \"email\", " +
                "\"username\" : \"username\", " +
                "\"password\" : \"password\", " +
                "\"userType\" : \"artist\"}")
        .contentType(MediaType.APPLICATION_JSON)
        .header("Authorization", Base64() )
    )
        .andExpect(status().isOk())
        .andDo(MockMvcResultHandlers.print())
}

但是我收到 HTTP 状态 400,并显示错误消息:

“指定的密钥字节数组为 192 位,对于任何 JWT HMAC-SHA 算法来说都不够安全。JWT JWA 规范(RFC 7518,第 3.2 节)规定,与 HMAC-SHA 算法一起使用的密钥的大小必须 >= 256位(密钥大小必须大于或等于哈希输出大小)。考虑使用 io.jsonwebtoken.security.Keys#secretKeyFor(SignatureAlgorithm) 方法来创建保证对您首选的 HMAC-SHA 算法足够安全的密钥. 请参阅 https://tools.ietf.org/html/rfc7518#section-3.2 了解更多信息。”

如何解决此错误?

我期待 Http 200 状态。此错误消息的级别太低,我在使用抽象库进行测试时不会看到它。

key hmac mockmvc http-error rfc
3个回答
5
投票

请放相当大的钥匙作为秘密。然后就没事了。


1
投票

问题似乎如下: 我使用的是 Spring 框架。它有一个 application.properties 文件。那里有一个名为“security.jwt.secret-key”的字段,在向网络发送数据包时会使用该字段。数据包的加密可以通过错误消息中提到的算法来完成,例如 HMAC-SHA 算法,并且该算法需要我提供密钥作为该加密算法的某种种子。我为该字段提供的值太短,这导致了错误。


0
投票

尝试在类内的 SecretKey 变量中传递 SecretKey 的值,并将其从 application.proporties 或 application.yml 中获取

私有字符串secretKey =“9a4f2c8d3b7a1e6f45c8a0b3f267d8b1d4e6f3c8a9d2b5f8e3a9c8b5f6v8a3d9”;

© www.soinside.com 2019 - 2024. All rights reserved.