Overview
verifyGrantToken() is a standalone function that verifies Grantex grant tokens offline using the published JWKS (JSON Web Key Set). It validates the RS256 signature, checks expiry, and optionally enforces required scopes and audience.
This is the recommended way for services to verify tokens — it requires zero runtime dependency on Grantex infrastructure.
The JWKS endpoint is cached automatically by the underlying
jose library. Repeated verifications do not make repeated HTTP calls.Import
Grantex client instance.
Parameters
The grant token JWT string to verify.
Verification options.
VerifyGrantTokenOptions
The JWKS endpoint URL. For the hosted service, use
https://api.grantex.dev/.well-known/jwks.json.If provided, the function throws
GrantexTokenError when the token is missing any of these scopes.Expected
aud claim. If provided, verification fails when the token’s audience does not match.Response: VerifiedGrant
Unique token ID (the
jti JWT claim).The grant record ID (from the
grnt claim, falls back to jti).The end-user who authorized the agent (the
sub claim).The agent’s decentralized identifier (the
agt claim).The developer organization that owns the agent (the
dev claim).The scopes granted to the agent (the
scp claim).Token issued-at timestamp in seconds since the Unix epoch.
Token expiry timestamp in seconds since the Unix epoch.
The parent agent’s DID, present only for delegated grants.
The parent grant ID, present only for delegated grants.
The delegation depth (
0 = root grant, 1 = first-level delegation, etc.). Present only for delegated grants.Error handling
verifyGrantToken() throws GrantexTokenError in the following cases:
- The JWT signature is invalid
- The token has expired
- Required claims (
jti,sub,agt,dev,scp,iat,exp) are missing - The token is missing one or more
requiredScopes - The
audiencedoes not match
JWT claims mapping
The following table shows how JWT claims map toVerifiedGrant fields:
| JWT Claim | VerifiedGrant Field | Description |
|---|---|---|
jti | tokenId | Unique token identifier |
grnt | grantId | Grant record ID (falls back to jti) |
sub | principalId | End-user identifier |
agt | agentDid | Agent decentralized identifier |
dev | developerId | Developer organization ID |
scp | scopes | Granted scopes array |
iat | issuedAt | Issued-at timestamp (epoch seconds) |
exp | expiresAt | Expiry timestamp (epoch seconds) |
parentAgt | parentAgentDid | Parent agent DID (delegation) |
parentGrnt | parentGrantId | Parent grant ID (delegation) |
delegationDepth | delegationDepth | Delegation chain depth |
Comparison with online verification
verifyGrantToken() | tokens.verify() | |
|---|---|---|
| Network call | Only to JWKS endpoint (cached) | Calls Grantex API |
| Latency | Sub-millisecond after initial JWKS fetch | Network round-trip |
| Revocation check | No (checks signature + expiry only) | Yes (checks revocation status) |
| Requires API key | No | Yes |
| Use case | Services verifying tokens at high throughput | Admin dashboards, token status checks |