gpt4 book ai didi

clojure - 如何使用 java-time 生成 JWT exp 声明?

转载 作者:行者123 更新时间:2023-12-04 08:13:06 24 4
gpt4 key购买 nike

JWT token 的大多数示例都使用 clj-time,现在不推荐使用它以支持原生 java.time。我正在尝试使用 java-timebuddy 来签署/验证 token ,但我试图将 exp 声明传递给我的 token 。这是我所拥有的一个例子:

(ns test-app.test-ns
(:require
[buddy.sign.jwt :as jwt]
[buddy.auth.backends.token :as bat]
[java-time :as t]))

(def secret "myfishysecret")

(def auth-backend (bat/jws-backend {:secret secret
:options {:alg :hs512}}))
(def token (jwt/sign {:user "slacker"
:exp (t/plus (t/local-date-time) (t/seconds 60))
} secret {:alg :hs512}))
当我试图测试我是否可以取消对 token 的签名时
(jwt/unsign token secret {:alg :hs512})
我收到以下错误:

Execution error (JsonGenerationException) atcheshire.generate/generate (generate.clj:152). Cannot JSON encodeobject of class: class java.time.LocalDateTime:2021-01-22T12:37:52.206456


因此,我尝试通过将 (t/plus ...) 的调用封装在 (str) 中来传递相同的信息,但随后出现此错误:

class java.lang.String cannot be cast to class java.lang.Number
(java.lang.String and java.lang.Number are in module java.base ofloader 'bootstrap')


所以,我被卡住了,因为我真的不知道如何使用 java-time 生成有效的 exp 数值(根据 this 问题,格式应该是自纪元以来的秒数)。 Older examples using clj-time 刚刚通过了 exp 声明值作为
(clj-time.core/plus (clj-time.core/now) (clj-time.core/seconds 3600))
任何帮助都受到高度赞赏。
编辑:Alan Thompson 的回答完美无缺,对于使用 java-time 包装器来说,这将是等价的:
(t/plus (t/instant) (t/seconds 60))

最佳答案

这里有 2 种方法:

  (let [now+60          (-> (Instant/now)
(.plusSeconds 60))
now+60-unixsecs (.getEpochSecond now+60)]

(jwt/sign {:user "slacker" :exp now+60 } secret {:alg :hs512})
(jwt/sign {:user "slacker" :exp now+60-unixsecs} secret {:alg :hs512}))
我们有 now结果:
now+60            => <#java.time.Instant #object[java.time.Instant 0x7ce0054c "2021-01-22T19:04:51.905586442Z"]>
now+60-unixsecs => <#java.lang.Long 1611342291>
所以你可以选择方法。哥们似乎知道如何从 java.time.Instant 转换,所以一直到unix-seconds是不必要的。
您可能也对此感兴趣 library of helper and convenience functionsjava.time 一起工作.

关于clojure - 如何使用 java-time 生成 JWT exp 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65851030/

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