Authorization: Bearer header and verifies it directly. AWS, Google Cloud, or your authorization server receives it in a token exchange and returns one of its own credentials.
This page lists what the token contains so the engineer who configures the verifying side can pin the right values. For setup steps, see Connect a gateway, Connect an AWS role, Connect a Google Cloud identity, or Connect an authorization server.
Issuer and signing keys
Both documents are public and need no authentication to fetch. One issuer serves every Claude Tag organization, so the issuer and signature prove only that Anthropic issued the token. The subject, or the
tenant claim, is what ties a token to your organization.
Key rotation
Signing keys rotate. If you run the verifier yourself, select the key by the token’skid header and refetch the JWKS when you see a kid you don’t know, before rejecting the token. Most JWKS libraries do this by default. Don’t pin a single key. AWS and Google Cloud manage their own key caches.
Lifetime
Allow up to 60 seconds of clock skew when you check
exp, and treat exp as the earliest moment a token may stop working rather than an exact cutoff; cloud providers apply their own grace.
Tokens can’t be revoked before they expire. There is no revocation list or introspection endpoint. When you remove a gateway in the console, Claude stops using it at once, and a token issued before the removal stays valid until it expires, within 10 minutes. When you remove a cloud role or authorization server, Claude stops using it within about a minute, and a credential from an earlier exchange stays valid with AWS, Google Cloud, or your server until it expires, held only by Agent Proxy, never by Claude’s sandbox.
Claude reuses one token for a session’s requests to the same gateway for about five minutes, half the token’s lifetime, or until the gateway answers 401, and then requests a new one (current behavior, may change). A gateway therefore sees the same jti on many requests, so don’t treat a repeated jti as a replay. AWS, Google Cloud, and an authorization server each see a token once per exchange.
Subject
Thesub claim names one agent in one organization:
- The organization ID starts with
org_and the agent ID withcagt_. Both use only letters, digits,_, and-, so neither can contain/or:. - The Connect a gateway, Connect an AWS role, Connect a Google Cloud identity, and Connect an authorization server dialogs show your organization’s Subject prefix,
wimse://identity.anthropic.com/org/<your organization ID>/agent/. Every one of your agents’ subjects starts with this prefix. - An agent belongs to one Slack channel. Deleting and recreating a channel creates a new agent with a new ID. The console doesn’t show agent IDs; a verifier learns full subjects from the tokens it receives or from your cloud provider’s logs.
- The console’s connection check for a gateway presents a token for a reserved test agent in your organization, shown in the Connect a gateway dialog as the Control subject. Your gateway must answer that token with a 2xx status so the check can pass, and must grant that subject no access. See Connect a gateway.
wimse:// form follows the IETF WIMSE working group’s workload identifier specification.
Authorize on the subject
A token with a valid signature, issuer, audience, and expiry can still belong to another organization, because one issuer serves every Claude Tag organization and every organization’s AWS tokens share one audience. Only the subject, or thetenant claim, says which organization a token belongs to, so every verifier, trust policy, and attribute condition must check it. Write the check in one of two forms, strongest first:
- Pin the exact subjects. Accept only the full subjects of your own agents. This is the strongest form, so use it whenever your use case allows. You update the rule when a Slack channel is deleted and recreated, because the new channel’s agent has a new ID, and a gateway’s list must also include the Control subject.
- Require your organization. If keeping a list of exact subjects isn’t practical, require that
substart with your Subject prefix, including the/agent/, or pinisstogether withtenant, which carries the same organization ID. This is the minimum, and it accepts every agent in your organization, including agents in channels created later.
Audience
Theaud claim is a JSON array with one element. Use your library’s audience option rather than comparing the raw claim text; some libraries print a one-element array as a bare string.
The audience identifies the destination, not your organization; every organization’s AWS tokens share
sts.amazonaws.com. Always check the subject too.
Claims
These are the claims a token carries.
Tokens may carry additional claims Anthropic uses internally for audit; ignore any claim not listed here and never base an authorization decision on it.
Anthropic sends the token only to the destinations you connect in Federated cloud access. When the request comes from Slack, the
slack_workspace_id and slack_channel_id claims carry your Slack workspace and channel IDs to that destination along with your organization and agent IDs.
Authorize on sub, as described under Authorize on the subject. A gateway or authorization server, which can read every claim, can use tenant and agent_id instead, because they repeat the subject’s two parts. An AWS trust policy matches on sub and aud only; a Google Cloud attribute condition can read sub or tenant. The token carries no claims about the person behind the request, and no groups, roles, or scope claims. A rule that needs slack_workspace_id or slack_channel_id should refuse a token that lacks them.
Anthropic may add claims to the token. A verifier must ignore claims it doesn’t recognize and must never depend on a claim not listed here being present.
Example payload
The decoded payload of a token sent to a gateway registered ashttps://gateway.example.com, for a request from a Slack channel, with made-up IDs. Opaque claims are left out.
Verify a token
Use a maintained JWT or OIDC library for your language and confirm it performs all five checks. Most libraries check issuer and audience only when configured to.- Signature: verified against a key from the JWKS, ES256 only.
- Issuer: exactly
https://identity.anthropic.com/agents. - Audience: the value registered for your gateway, cloud provider, or authorization server.
- Expiry:
expis in the future, allowing up to 60 seconds of clock skew. - Subject:
subis one of your own agents’ full subjects, or at minimum starts with your organization’s Subject prefix (ortenantis your organization ID). Libraries don’t do this one for you.
base64 -d often fails:
Related resources
- Connect a gateway: verify the token yourself at a service you run
- Connect an AWS role: the trust policy that pins these values
- Connect a Google Cloud identity: the attribute condition that pins these values
- Connect an authorization server: accept the token as a JWT bearer grant
- Limits: lengths, counts, and lifetimes in one place
- Sample gateway: a Python gateway that verifies the token and pins subjects exactly or by organization, with offline tests