我需要使用jwt.io验证令牌
为此,我有一个令牌(许可证) “ eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRJZCI6MjcwMzYwLCJwYWNrYWdlc ..........”
和一个json(证书)
“键”:[ { “ kid”:“ 1”, “ e”:“ AQAB”, “ kty”:“ RSA”, “ alg”:“ RS256”, “ n”:“ rXYc2Ehtb42R83kLIw56biI / ABOp03lzbYHdXI0caeli .......”, “使用”:“签名” }
在jwt.io站点的调试器中,收到此信息后,我收到“签名已验证”的信息。
我正在网上寻找一些可以让我做同样事情的脚本
与jwt.io站点上的相同,我发现我可以使用此处报告的代码https://github.com/PhilJay/JWT,但是,如果我理解正确,它不使用RS256算法,而是使用ES256,因此不起作用。>
我正在尝试相同的操作,但老实说,我不理解示例中解码器的要求
val有效= JWT.verify(tokenString,jwk,解码器) 我相信前两个是我拥有的数据。
您能给我一些建议还是给我一些其他代码来验证签名?
答案 0 :(得分:1)
问题在这里
val nInt = Biginteger(1,Base64.getUrlDecoder()。decode(n))
您只需要获取cert的元素n,而不是全部cert(json)
val e = obj_cert.asJsonObject["e"].asString
val n = obj_cert.asJsonObject["n"].asString.replace('+', '-').replace('/', '_').replace("=", "")
val eInt = BigInteger(1, Base64.getUrlDecoder().decode(e))
val nInt = BigInteger(1, Base64.getUrlDecoder().decode(n))
val spec = RSAPublicKeySpec(nInt, eInt)
val publicKey = KeyFactory.getInstance("RSA").generatePublic(spec) as RSAPublicKey
val algorithm: Algorithm = Algorithm.RSA256(publicKey, null)
val verifier: JWTVerifier = com.auth0.jwt.JWT.require(algorithm).build()
verifier.verify(license)