In every conversation about agentic security, the starting point is almost always the same: solving the Agent Identity problem. The prevailing argument is that agents must be treated as first-class identities, completely distinct from standard workloads.
While that assumption is theoretically valid, an over-fixation on identity often creates deployment bottlenecks. In this post, we will explore a layered governance approach that prioritizes practical deployment flexibility over idealistic security implementations.
Based on months of hands-on experience grappling with this challenge, it has become clear that relying solely on agent identity assertions—which currently lean heavily on developing IETF drafts and perfect-world scenarios—is impractical for today’s deployment landscape. While new OAuth specifications make their way through standardization, we need a functional approach that marries deployment flexibility with security. Agent identity alone should not gate your solution from becoming usable.
To understand agent identity, it helps to look at a familiar concept: Kubernetes.
A running agent is a process—an instance much like a Kubernetes pod. It is ephemeral and usually one of many. That pod does not carry its own unique name into the world; rather, it runs as a service account, a stable identity that ephemeral pods share and the cluster can verify.
Agent identity works the same way. Each running process is issued a cryptographic credential (such as an SVID or a DPoP key) that proves it belongs to a stable identity. That identity then binds to a Client ID—the exact same concept expressed in the language of an Identity Provider, much like how a service account federates out to a cloud identity.
Ultimately, the agent identifier is a stable, verifiable representation of ephemeral processes, featuring a key pair underneath and an OAuth name on top.
Note: While some argue that every single instance should be permanently associated with an identifier to provide the most granular audit trail, that crosses into a debate regarding session identification, which is distinct from the core identity problem.
The OAuth Client ID was devised for one specific job: to tell an authorization server which application is asking.
When a client application wants to reach a Resource Server or API on a user's behalf, it registers itself, receives a Client ID, and uses that ID to be recognized by the authorization server. Paired with a secret, it proves the application is the registration it claims to be.
Bring AI agents into this picture, and you will notice that nothing new needs to be invented for them to acquire an identifier. To an authorization server, an agent is just another client application. It registers, receives a Client ID, authenticates, and requests tokens. Agents act on behalf of human identities—resembling standard app-to-app interactions.
OAuth inherently issues bearer tokens. This means whoever holds the token (or the client secret behind it) can use it. The identifier only proves possession of a string, not that you are the specific instance you claim to be.
DPoP and SPIFFE close this gap by binding the identity to a private key that the instance actually holds:
In both scenarios, OAuth still names the application and carries the authorization scopes, while the key supplies the cryptographic evidence that turns a replayable bearer token into undeniable proof of the caller's instance.
It is crucial to state plainly that identity and authorization are two entirely different problems:
We are accustomed to solving both simultaneously for humans because a human shows up with a strong, singular identity issued by an Identity Provider (IdP). We can take that identity as a given and focus all our energy on policy.
Agents break this habit because their identity is not a given. It arrives at wildly varying strengths depending on the platform hosting the agent, and sometimes it doesn't arrive at all. For example, while platforms like Copilot Studio do a fantastic job of passing agent identifier context, most other platforms currently lack a reliable way to detect this on the wire.

Once you accept that agent identity requires its own decoupled framework, a natural, three-tiered model emerges, scaling from coarse to fine granularity:
The true payoff of separating identity from authorization—and modeling it via these three rungs—is graceful degradation. Policy attaches to whatever rung the identity assurance supports, ensuring the system degrades safely instead of failing entirely.
The Blueprint is your governance floor; the Identity is your precision ceiling. You simply operate at the highest point the cryptographic evidence allows.
If you fuse identity and authorization, an agent with a weak identity either completely escapes governance or forces you to lower security standards for everyone. By separating them, weak identity simply dictates coarser governance, not absent governance.
Building secure, scalable systems in this space demands that agent governance be layered. We must model these tiers, accept that agent identity will reach us at varying cryptographic strengths, and apply governance policies appropriately at all levels. Security should never cease to exist simply because a perfect cryptographic validation is temporarily out of reach.
In every conversation about agentic security, the starting point is almost always the same: solving the Agent Identity problem. The prevailing argument is that agents must be treated as first-class identities, completely distinct from standard workloads.
While that assumption is theoretically valid, an over-fixation on identity often creates deployment bottlenecks. In this post, we will explore a layered governance approach that prioritizes practical deployment flexibility over idealistic security implementations.
Based on months of hands-on experience grappling with this challenge, it has become clear that relying solely on agent identity assertions—which currently lean heavily on developing IETF drafts and perfect-world scenarios—is impractical for today’s deployment landscape. While new OAuth specifications make their way through standardization, we need a functional approach that marries deployment flexibility with security. Agent identity alone should not gate your solution from becoming usable.
To understand agent identity, it helps to look at a familiar concept: Kubernetes.
A running agent is a process—an instance much like a Kubernetes pod. It is ephemeral and usually one of many. That pod does not carry its own unique name into the world; rather, it runs as a service account, a stable identity that ephemeral pods share and the cluster can verify.
Agent identity works the same way. Each running process is issued a cryptographic credential (such as an SVID or a DPoP key) that proves it belongs to a stable identity. That identity then binds to a Client ID—the exact same concept expressed in the language of an Identity Provider, much like how a service account federates out to a cloud identity.
Ultimately, the agent identifier is a stable, verifiable representation of ephemeral processes, featuring a key pair underneath and an OAuth name on top.
Note: While some argue that every single instance should be permanently associated with an identifier to provide the most granular audit trail, that crosses into a debate regarding session identification, which is distinct from the core identity problem.
The OAuth Client ID was devised for one specific job: to tell an authorization server which application is asking.
When a client application wants to reach a Resource Server or API on a user's behalf, it registers itself, receives a Client ID, and uses that ID to be recognized by the authorization server. Paired with a secret, it proves the application is the registration it claims to be.
Bring AI agents into this picture, and you will notice that nothing new needs to be invented for them to acquire an identifier. To an authorization server, an agent is just another client application. It registers, receives a Client ID, authenticates, and requests tokens. Agents act on behalf of human identities—resembling standard app-to-app interactions.
OAuth inherently issues bearer tokens. This means whoever holds the token (or the client secret behind it) can use it. The identifier only proves possession of a string, not that you are the specific instance you claim to be.
DPoP and SPIFFE close this gap by binding the identity to a private key that the instance actually holds:
In both scenarios, OAuth still names the application and carries the authorization scopes, while the key supplies the cryptographic evidence that turns a replayable bearer token into undeniable proof of the caller's instance.
It is crucial to state plainly that identity and authorization are two entirely different problems:
We are accustomed to solving both simultaneously for humans because a human shows up with a strong, singular identity issued by an Identity Provider (IdP). We can take that identity as a given and focus all our energy on policy.
Agents break this habit because their identity is not a given. It arrives at wildly varying strengths depending on the platform hosting the agent, and sometimes it doesn't arrive at all. For example, while platforms like Copilot Studio do a fantastic job of passing agent identifier context, most other platforms currently lack a reliable way to detect this on the wire.

Once you accept that agent identity requires its own decoupled framework, a natural, three-tiered model emerges, scaling from coarse to fine granularity:
The true payoff of separating identity from authorization—and modeling it via these three rungs—is graceful degradation. Policy attaches to whatever rung the identity assurance supports, ensuring the system degrades safely instead of failing entirely.
The Blueprint is your governance floor; the Identity is your precision ceiling. You simply operate at the highest point the cryptographic evidence allows.
If you fuse identity and authorization, an agent with a weak identity either completely escapes governance or forces you to lower security standards for everyone. By separating them, weak identity simply dictates coarser governance, not absent governance.
Building secure, scalable systems in this space demands that agent governance be layered. We must model these tiers, accept that agent identity will reach us at varying cryptographic strengths, and apply governance policies appropriately at all levels. Security should never cease to exist simply because a perfect cryptographic validation is temporarily out of reach.