我有一个JWT字符串。我可以将其粘贴到任何顶级谷歌搜索结果中,以解码JWT"它正确解码,这不需要我的任何秘密或加密声明。但是我看到的所有例子,例如Buddy或jwtt,要求我提供他们加密的任何秘密。我怎样才能简单地解码原始字符串,就像每个网站一样容易?
答案 0 :(得分:1)
解码JWT非常简单,但在验证签名之前,您永远不应该相信这些声明。这就是为什么任何体面的JWT库都要求你提供秘密,或者如果使用RSA签名的公钥。
无论如何,JWT的格式非常简单 - 由.
分隔的三个部分:
<header> . <payload> . <signature>
每个部分都是base64编码的。因此,如果您只想查看声明,可以执行以下操作:
String jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";
String [] jwtParts = jwt.split("\\.");
if (jwtParts.length == 3) {
String payload = new String(Base64.getDecoder().decode(jwtParts[1]));
System.out.println(payload);
// Now you can use some JSON library to decode payload.
}
答案 1 :(得分:1)
以下答案信息丰富且良好;这是适合我的Clojure版本:
(ns decode-jwt
(:require [cheshire.core :as json])
(:import [org.apache.commons.codec.binary Base64]))
(-> returned-jwt ;; returned-jwt is your full jwt string
(clojure.string/split #"\.") ;; split into the 3 parts of a jwt, header, body, signature
second ;; get the body
Base64/decodeBase64 ;; read it into a byte array
String. ;; byte array to string
json/decode ;; make it into a sensible clojure map
)
答案 2 :(得分:1)
on https://jwt.io/
clojure JWT库:[funcool/buddy], doc:
http://funcool.github.io/buddy-sign/latest/`
user=> (require '[buddy.sign.jwt :as jwt])
user=> (jwt/sign {:userid 1} "secret")
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjF9.5sxiy9q0YcpnXl2jBl-s4--C9iq5-4qC6CrW30NfRS4"
user=> (jwt/unsign "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjF9.5sxiy9q0YcpnXl2jBl-s4--C9iq5-4qC6CrW30NfRS4" "secret")
{:userid 1}
user=>