Подпись генерируется, но сгенерированная подпись недействительна.
Моя личная информация находится ниже р>
Код: Выделить всё
-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----
Ниже приведен мой исходный код
Код: Выделить всё
class JWT1 {
fun generateJWT(privateKeyString: String, header: JSONObject, payload: JSONObject): String {
// Encode the header and payload to Base64
val headerBase64 = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(header.toString().toByteArray(Charsets.UTF_8))
val payloadBase64 = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(payload.toString().toByteArray(Charsets.UTF_8))
// Create the unsigned token
val unsignedToken = "$headerBase64.$payloadBase64"
// Sign the token
val signedToken = signWithPrivateKey(unsignedToken, privateKeyString)
// Encode the signature in Base64
val signatureBase64 = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(signedToken)
// Return the complete JWT
return "$unsignedToken.$signatureBase64"
}
private fun signWithPrivateKey(unsignedToken: String, privateKeyString: String): ByteArray {
// Convert the private key string to a PrivateKey object
val keyFactory = KeyFactory.getInstance("EC")
val keyBytes = java.util.Base64.getDecoder().decode(privateKeyString)
val keySpec = PKCS8EncodedKeySpec(keyBytes)
val privateKey = keyFactory.generatePrivate(keySpec) as ECPrivateKey
// Sign the token
val signature = Signature.getInstance("SHA384withECDSA")
signature.initSign(privateKey)
signature.update(unsignedToken.toByteArray(Charsets.UTF_8))
return signature.sign()
}
fun getToken(): String {
// private key
val privatePem = "-----BEGIN PRIVATE KEY-----\n" +
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" +
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" +
"xxxxxxxxxxxxxxxxxxxxxxxx\n" +
"xxxxxxxxxxxxxxxxxxxxxxxxxxxx=\n" +
"-----END PRIVATE KEY-----"
val header = JSONObject().apply {
put("alg", "ES384")
put("typ", "JWT")
}
val privateKeyString = privatePem.replace("-----BEGIN PRIVATE KEY-----", "")
.replace("-----END PRIVATE KEY-----", "").replace("\n", "")
return generateJWT(privateKeyString, header, JSONObject(payload))
}
private val payload: Map
get() {
return mapOf(
"data" to "hello"
)
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... party-tool
Мобильная версия