Skip to content

Instantly share code, notes, and snippets.

@t0in4
Last active January 14, 2025 11:05
Show Gist options
  • Save t0in4/bbc653293553d655316973e80d58e59c to your computer and use it in GitHub Desktop.
Save t0in4/bbc653293553d655316973e80d58e59c to your computer and use it in GitHub Desktop.
package com.yandex
import com.auth0.jwt.JWT
import com.auth0.jwt.algorithms.Algorithm
import java.security.interfaces.RSAPrivateKey
import java.util.*
fun generateJwtToken(
kid: String, // идентификатор ключа
iss: String, // идентификатор сервисного аккаунта
privateKey: String // ваш приватный ключ в формате PEM
): String {
val currentTime = System.currentTimeMillis() / 1000 // текущий Unix timestamp
val iat = currentTime
val exp = iat + 3600 // срок действия токена: 1 час
// Алгоритм PS256 с использованием приватного ключа
val algorithm = Algorithm.RSA256(null, loadPrivateKey(privateKey))
// Создание JWT
return JWT.create()
.withHeader(
mapOf(
"typ" to "JWT",
"alg" to "PS256",
"kid" to kid
)
)
.withIssuer(iss)
.withAudience("https://iam.api.cloud.yandex.net/iam/v1/tokens")
.withIssuedAt(Date(iat * 1000))
.withExpiresAt(Date(exp * 1000))
.sign(algorithm)
}
// Функция для загрузки приватного ключа из строки
fun loadPrivateKey(privateKeyPem: String): RSAPrivateKey {
val keyFactory = java.security.KeyFactory.getInstance("RSA")
val keySpec = java.security.spec.PKCS8EncodedKeySpec(
Base64.getDecoder().decode(
privateKeyPem
.replace("-----BEGIN PRIVATE KEY-----", "")
.replace("-----END PRIVATE KEY-----", "")
.replace("\n", "")
)
)
return keyFactory.generatePrivate(keySpec) as RSAPrivateKey
}
fun main() {
val kid = "..." // замените на ваш идентификатор ключа
val iss = "..." // замените на ваш идентификатор сервисного аккаунта
val base64 = Base64.getUrlDecoder().decode("...")
val privateKey = """
-----BEGIN RSA PRIVATE KEY-----
$base64
-----END RSA PRIVATE KEY-----
""".trimIndent()
val jwtToken = generateJwtToken(kid, iss, privateKey)
println("Generated JWT: $jwtToken")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment