Unkey Deploy is currently in private beta. To get access, reach out on
Discord or email
support@unkey.com.
JWT authentication is coming soon. The Principal format is documented here so you can plan your integration.
type is "jwt", the source.jwt object contains the full decoded JWT, mirroring the three-part structure of a JWT token (header, payload, signature). The Sentinel forwards everything without renaming or filtering.
Fields
The decoded token header. Contains the signing algorithm, token type, and key identifier used to verify the token. Common fields include
alg (for example, "RS256"), typ (typically "JWT"), and kid (the key ID used for signature verification, useful for tracking key rotation).The decoded token payload with all claims as-is, using their original JWT claim names and types. Registered claims like
iss, sub, aud, exp, iat, nbf, and jti appear alongside any custom claims from your identity provider (for example, org_id, email, scope).Common registered claims (RFC 7519):| Claim | Type | Description |
|---|---|---|
iss | string | The token issuer |
sub | string | The token subject (also used as the top-level subject) |
aud | string | The intended audience |
exp | integer | Expiration time (Unix timestamp in seconds) |
nbf | integer | Not valid before (Unix timestamp in seconds) |
iat | integer | Issued at (Unix timestamp in seconds) |
jti | string | Unique token identifier |
The raw signature string from the token’s third segment. The Sentinel has already verified this signature, so your app doesn’t need to verify it again. Useful for audit logging or correlating requests back to a specific token.
Examples
Because the Sentinel forwards the raw JWT payload, the Principal contains exactly the claims your identity provider includes in the token. Here are examples for common providers.role and permissions at the top level. Clerk v2 nests organization data under an o object with abbreviated keys (rol, per, slg). Auth0 uses scope as a space-delimited string, requires namespaced custom claims, and returns aud as an array when openid scope is requested. Because the Sentinel passes the payload through as-is, your app receives exactly what your auth provider issued without Unkey needing provider-specific logic.
