【发布时间】:2021-09-19 09:18:43
【问题描述】:
我正在尝试基于对象创建自定义 JWT 声明。我认为这应该是可行的,因为 auth0.jwt 使用 jackson-databind。这是一个简单的例子:
data class Foo(val strings: List<String>)
val bar = Foo(listOf("hello", "world"))
val jwtAlgorithm = Algorithm.RSA256(
loadPublicKeyFromFile("testPublicKey.pem"),
loadPrivateKeyFromFile("testPrivateKey_pkcs8.pem")
)
val payload = mapOf("customClaim" to bar)
val token = JWT.create().withPayload(payload).sign(jwtAlgorithm)
但是,我得到以下异常
java.lang.IllegalArgumentException: Claim values must only be of types Map, List, Boolean, Integer, Long, Double, String and Date
我注意到在反序列化自定义声明时,我需要将 Jackson 注释(例如 @JsonCreator 和 @JsonProperty)添加到我自己使用 Jackson 时不需要的声明模型类中。
我的项目正在使用以下相关库:
"com.auth0:java-jwt:3.18.1",
"com.fasterxml.jackson.module:jackson-module-kotlin:$jackson_version",
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version",
"com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$jackson_version"
其中 jackson_version = 2.9.7
这里发生了什么,有没有比编写代码将我的自定义声明对象转换为地图更好的方法来解决它?
【问题讨论】:
标签: kotlin jwt auth0 jackson-databind