Android studio 验证Kotlin中的签名JWT.IO

Android studio 验证Kotlin中的签名JWT.IO,android-studio,kotlin,jwt,Android Studio,Kotlin,Jwt,我需要用jwt.io验证令牌 为此,我有一个令牌(许可证) “EYJHBGCIOIJZI1NIISINR5CCI6IKPXVCJ9.EYJ0ZW5HBNRJZCI6MJCWMZYWLCJWYWWNWRYWDLC……” 和json(证书) “钥匙”:[ { “孩子”:“1”, “e”:“AQAB”, “kty”:“RSA”, “alg”:“RS256”, “n”:“rXYc2Ehtb42R83kLIw56biI/ABOp03lzbYHdXI0caeli……”, “使用”:“sig” } 在jwt.

我需要用jwt.io验证令牌

为此,我有一个令牌(许可证) “EYJHBGCIOIJZI1NIISINR5CCI6IKPXVCJ9.EYJ0ZW5HBNRJZCI6MJCWMZYWLCJWYWWNWRYWDLC……”

和json(证书)

“钥匙”:[ { “孩子”:“1”, “e”:“AQAB”, “kty”:“RSA”, “alg”:“RS256”, “n”:“rXYc2Ehtb42R83kLIw56biI/ABOp03lzbYHdXI0caeli……”, “使用”:“sig” }

在jwt.io站点的调试器中,我收到了“签名已验证”的信息

我正在网上寻找一些脚本,可以让我做同样的事情

同样在jwt.io站点上,我发现我可以使用这里报告的代码,但是,如果我理解正确,它不使用RS256算法,而是使用ES256,因此不应该工作

我也在尝试同样的方法,但老实说,我不明白解码器在示例中要求什么

val valid=JWT.verify(令牌字符串、jwk、解码器) 我相信前两个是我掌握的数据

您能给我一些建议或给我一些其他代码来验证签名吗?

问题就在这里

val nInt=Biginteger(1,Base64.getUrlDecoder().decode(n))

您必须只获取cert的元素n,而不是所有cert(json)


您也可以使用kotlin(在您的案例中)的其他JVM语言库Hi@user28434 I changed library,但我总是收到令牌无效的消息,您能给我一些建议吗?这是我的代码
        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)