Are Your AI Agents Secure? Defending the Privileged Agent

Introduction and Speaker Welcome

Speaker E opens the talk with a light-hearted remark about traveling from Tokyo to a much colder venue, then introduces the topic: how to defend against privilege abuse in AI agents.

How AI Agents Gain Access and Why It Goes Wrong

Speaker E explains that AI agents act as autonomous proxies for users, often receiving OAuth tokens with the user's full privileges to call external APIs. He outlines the resulting problems: difficulty distinguishing user actions from agent actions, static token scopes granting overly broad access (e.g., full drive read access for a simple task), and the danger of compromised platforms or prompt injection allowing attackers to inherit an agent's privileges.

Industry Reports: OWASP Excessive Agency and Identity Abuse Risks

Speaker E references OWASP's documentation on agentic risks, focusing on 'excessive agency,' which includes excessive permissions, excessive functionality (e.g., a dangerous 'delete user' tool), and excessive autonomy. He also cites a recent industry top-ten report on identity and privilege abuse, highlighting unchecked privilege spread across sub-agents and the need for independent agent identities to enable logging and auditing.

From RBAC to ReBAC: Rethinking Authorization Models

Speaker E discusses mitigating these risks through dynamic authorization and human-in-the-loop controls. He contrasts traditional Role-Based Access Control (RBAC), which struggles with granularity, with Relationship-Based Access Control (ReBAC), an approach used by Google (as described in their Zanzibar paper) that models access as relationships between entities and objects.

Implementing ReBAC: Authorization Models, Tuples, and Runtime Queries

Speaker E details how to build a ReBAC authorization model using relations (editor, viewer, owner) and relationship tuples, then query the engine at runtime to check permissions. He shows how this can be embedded into RAG pipelines to filter retrieved data and into tool/MCP calls so agents only access resources they're explicitly permitted to, using agent-specific identities rather than blanket user permissions.

Human-in-the-Loop Approval for High-Risk Actions

Speaker E explains the need for human approval when agent actions exceed risk thresholds, such as refunds over $100, as a second layer of defense against excessive agency. He cautions against over-prompting for approval, noting that users quickly become desensitized to repeated permission requests (referencing Claude Code's 'skip permissions' feature) and stresses the importance of asking only when truly necessary.

Live Demo: Dynamic Authorization for a Support Ticket Agent

Speaker E demonstrates a support ticket agent comparing 'no safeguards' versus 'dynamic authorization' scenarios. The demo shows how without ReBAC, a multitenant agent leaks another company's tickets and can delete tickets or issue large refunds unchecked, whereas with dynamic authorization and human-in-the-loop approval, access is properly scoped and high-risk actions like refunds require manager approval via a simulated CIBA (Client Initiated Backchannel Authentication) flow.

Summary: Moving to Relationship-Based Dynamic Authorization

Speaker E summarizes the talk's key points: AI agents are valuable but excessive privilege can cause serious damage, and organizations should shift from static permissions to relationship-based dynamic authorization to ensure least privilege, granting and stripping access per task. He recommends always including human-in-the-loop checks for high-risk operations and introduces OpenFGA, the open-source ReBAC engine used in the demo, along with a QR code resource for further learning.

Q&A: Trusting Humans in the Loop

An audience member questions how much we can truly trust human-in-the-loop approvals when reviewers may lack sufficient context and default to rubber-stamping requests. Speaker E responds that approval requests should not be overused and must include enough context to be meaningful, otherwise they risk being ignored.

Hi, everyone. Oh, is mic working? Oh, no? Oh, okay. Is it working? Okay. Cool. Hi, everyone. Thanks for being here. Before me getting into the topic, you know, I'm based in Tokyo, Japan, and I came from the Japan Tokyo, actually. Then on Monday, it was 30 degrees.

And here, it's like 10 degrees. So I felt freeze, frozen. Yeah. So anyways, let's get started. So I'm gonna talk about the how to defend in the privileged agent. So let me get started. So first first, I'm gonna talk about the problems, how agents typically get access today and why it tends to go sideways.

So AI agents as autonomous colleagues, you know, it they do jobs for you, you know, integrate integrating reasoning on the actions or scaling beyond the system boundaries, you know, sending emails, write code, exit code, book a meeting, something like that. So they are behaving the proxy for the users, which means that you giving out your users privilege for the agent.

Typically, you are gonna give the OAuth token for the users and give it to the agent so agent can call external APIs with the user's credentials. So but here's the challenge. If you're passing the user tokens directly, which means the GIP who user previous to the AI agents, and also the AI agents could be the impersonator for the user, So it's hard to distinguish whether user did actions or agent did actions.

So it's gonna be difficult to log in and audit things when it goes wrong. The second thing is if you give a token with the permissions with the scopes, usually it's static. So if you are giving the drive read permission to the agent, it can have the whole access to your drive.

So whenever we I ask, hey. Give me summary of the ex my expense report. The agent can technically read everything and could access to the financial record on your drive, which is going to be dangerous for you guys. And start one is more critical. So if you give the permissions or privilege or token with the permission to the agent, when the platform is compromised or bad prompt injection happens, the attacker can inherit the the tokens that our agent has, and they can use the token with the different purposes.

And, you know, this is not a shortage of threat. You know, we've been observing this happened in the last two years. I don't call exact examples, but you know of what they are. So this isn't just my analysis. WASP has been documenting these patterns and the risks, also mitigations.

And somehow, in previous talks, somebody talked about this report. So I'm not go I'm not going to detail about what they are, but I'm wanna focusing on the number six, excessive agency. So this is the risk that unexpected LM out of us into a real harm via excessive privilege. There are three types.

One is the excessive permissions, which agents hold a broader access, like I mentioned. You know, read and write when only read is necessary. The second is excessive functionality. The toolbox contains somehow dangerous tools. It happens if you have the, like, a super agent.

It can does everything just in case the agent has the tool called the delete user tool. Yeah. It's very dangerous for the agent. And last one is excessive autonomy. You know? Hey. I wanna let agent does for everything for me so you can do whatever you want without asking me for the permission. This is powerful.

This is very productive, but it cause problem for you. Also, Rust published the latest top tens back in December last year, I guess. This is a very new report, and here's one for the identity and the previous abuse.

So basically, it's talking about what I've been talking to you, you know, uncoated, trans spread spread of privilege, which covers the not only for the single agent but with the sub agents. So sub agents contain the permissions that it shouldn't have or agent to agent to com agent to agent communications kind of things.

And also talking about the independent IDs. So I said the agents are proxy of the user. No. You need to have in the independent ID for agents so that you can log what agent did and you can audit them. So this is the latest report that I saw.

So I've been talking about the risks and issues, but I want to talk about how to mitigate those risks by dynamically authorized agent actions and also including human in the loop thing. So whenever you are talking about authorization, it's going to be like access control. So are you gonna use RBAC?

This is a traditional approach. You have the group or users, roles with the permissions. It's very effective if it's application or API level of the management of the access. But the challenge is granularity. Like I said, you know, drive, read cannot really control that agent can only read certain documentations.

If you wanna make it happen, you need to add attributes, and you need to be facing the ex explosion of the roles. So I want to introduce a different approach with the authorization. It's called rebac, relationship based access control. Instead of the roles and the permissions, it holds relationship between the entity and object. So something like, does the agent have a sufficient relationship with a specific object?

And this is not embedded by somebody else about that, you know, for example, that Google uses this one inside of their product, and they published a paper a couple years ago called Google Zanzibar. If you are interested about the Google's paper, you can search for the paper, or you can go to the Zanzibar Academy.

And I'm gonna explain a little bit about the Reebok. So first, you're gonna build the authorization model. So top left. Now here's the doc documentation, has three relations, editor, viewer, owner. And you can you also hold the authorization authorization data as a tuples. Kim is the owner of the road map documentation, or Ben is editor of the road map road map documentation.

Carl is a bureau of the slides, something like that. Then at runtime, you can query the authorization engine to whether this user has relationship with a specific object kind of things. So the top down right is is Carl is a a bureau of that size. Answer is yes, which means the he can access to the documentation. With this, you can implement dynamic authorization inside the URL to the calling or the workflow.

One example is the inside of a log pipeline. Whenever user queries, hey, I want to want to get the project information, Usually, Rag retrieves data semantically. Then you can inject the RBAC authorization decision inside of this workflow so that whether this user has the relationship with these documentations as a viewer. If not, it's going to be filtering out.

So the data never gets to the model. Another examples. So AI agent wants to do something. You know? It calls tools or it calls MCP, MCP servers. Inside of the tool calling or inside of the, you know, MCP server business logic, you can inject VBAC authorization engine.

So for example, hey. I wanna have the documentation secret. I wanna read it. I know. Want to answer user's input. Then you can check user, in this case. Agent Alice has relationship as can read with the object document secret documentation. So in this case, you know, you can have the agent ID and the identity instead of the user identity.

So if you set up the authorization model with that agent, you can check whether agent has the access to the specific documentation. And depending on the answers, yes or no, it proceeds or it denies. So the point is AI agent doesn't have really permission or privilege at the beginning. Whatever it's called, it it it's it's calling the tools. You can check the permission, you know, on the fly.

With this, still, you need to have the somebody else to look at the agent's activities. So it's something like, yeah, I wanted to refund for 5,000 USD or whatever. Inside of the approval logic, you should have the ask for users' approval when the amount is exceeded today's threshold.

Let's say, yeah, over the $100. No. I need to have someone else to take a look instead of the agent does four things. So with this one with this, you know, even with the, you know, dynamic authorization at runtime, you can check with the human as a RAS defense.

So to, you know, the mitigate the risk of the excessive agency. But I wanna point one thing. You know, is asking every time okay for you guys? How many of you have used cloud code and wanted to use dangerously skip permissions?

I see smiley faces. You know? First five time, you know, I watched, you know, what they are asking for. The after five times, I don't care. It's just s o s o l. So or like a cloud then you just keep permissions or something like that. So, you know, you don't wanna ask users every time. Just you need to have a clear reason to ask for their permissions.

Yep. So I built a a short demo to demonstrate how dynamic authorization works. So let's get started. So I built a, you know, support ticket agent. Left side is the no safeguards. It's only asking it's it does actions what they do. And right side is the with the dynamic authorization.

And this is a multitenancy scenario. So I I'm logging to the SaaS product. So I wanna list the tickets available right now. Hey. Show me the old tickets that need attention. So it's trying to retrieve the list of the ticket that I have. Hey. Yeah. You get the list.

It's good. It's good. Wait. I'm from the Pixel Zero company, but I see the tickets from the comfort zone. It's clearly the the security breach. The right side is the only the pixelated tickets. The point is, you know, the without the safeguard, it can go every ticket goes to the model.

But with the dynamic authorization, it only goes to the ticket that a user has access to. Actually, in this case, agent has access to it. So like this one, you know, probably model can filter them out, but, you know, the point is you don't expose unnecessary data to the model. The next one is the deleting ticket, which is dangerously, you know, create a tool.

Left side is just laying in the data as it re requested. The right one is, you know, it's checking whether the agent has the capability to delete the ticket. So in this case, you know, they're checking the with with the VBAC authorization engine. Hey, agent, can can agent delete the ticket?

No. I don't have the demo in the video, but if you are behaving like as a user, it kinda actually did the tickets inside of this demo. And I wanna show the last thing is to going to refund the money. So, yeah, I wanna refund the $3.03 $3,500 to the customer because it's not working.

So with the, you know, no safeguard, it's just refund. So it's too much power by the agent. But the right side is, you know, I'm trapping this one with a threshold. Hey, it's over $100. Yeah. I need somebody from human to approve this one.

So, yeah, I'm gonna open up the yeah. Go ahead. Go ahead. Yeah. It it just hold the actions while, you know, they're waiting for the approval. Yeah. Go ahead. It's not, you know, live demo, so I need to wait. You know?

While I'm waiting okay. Okay. Yeah. Actually, that CEBA is triggered. CEBA is the client initiated back channel what is the author authentication? Authorization. Oh, I think authorization. Yeah. So this is getting the this is just a simulator. So the Carol is the manager of the Alice.

It's a real human, got the message. Hi. Alice wanted to refund this one. Is it okay? Yeah. It's okay. Then a manager approved the request. So with this dynamic authorization and also human in the group can safely guard the agent behavior.

And can actually, you can use model to guard everything, but it's undeterministic way. But this is deterministic way because you have the authorization model, authorization data to make decisions. So to the summary, here, I talked about AI agents or Autonomous colleagues. It's a good colleague for you, but their excessive privilege can lead devastating damage. Yeah.

Last summer, something happened. Yeah. Move from static permission to relationship based based dynamic authorization to ensure least privilege. Like I said, agent doesn't have the any privilege with the dynamic authorization. You can give that privilege at one time, and you can strip them out after the executing code I mean, executing tasks.

And for high risk operations, always include the human in the loop as the final safeguard when it's necessary and appropriate time. So today, I showed a demo with you know, VBAC, the, and it's actually built with the this product called OpenXGA.

It's open sourced VBAC engine that you can use for free. If you're interested, can check with the OpenXGA. And if you scan this QR code, this is this is a page that will actually discuss how to implement dynamic authorization with the OpenFGA. Also, we provide the other features, including this dynamic authorization for the AI agents and security.

And if you're interested in that, you can check with our page as well. That's a wrap. Thank you for coming today, and, you know, enjoy the rest of the conference. Thank you.

Quick question, if I may, while we're changing over, But you can unplug. Yeah. How much do we really trust the humans in the loop? Because we've seen situations where there's a human in the loop, but their context is so limited. And they and like you said, I'll just say yes because I've said yes to the last five that I actually checked.

Yeah. Oh, is Michael along? Okay. Yeah. So like I said, you shouldn't ask every time. And you should include the context as much as you can. That's the key. Otherwise, it's going to be ignored.

Vintage portable television: Электронъ КЦ-408Д

A small, vintage portable television set, colored beige and black, with a bright white screen. The television features a front-facing speaker grille on its lower half and a single rotary control knob on the right. Visible Cyrillic text on its right panel includes 'МВ ДМВ' (MV DMV) indicating channel bands, and numbers '1 6 21' and '5 12 60' for channels. The word 'МЕЛОДИЯ' (Melodya) is also partially visible on the right. The TV is resting on a wooden surface against a blurred, warm red and orange background.

Are Your AI Agents Secure?

Defending the Privileged Agent

Daizen Ikehara

Principal Developer Advocate, Auth0

AI Agents and the Pitfalls of "User Delegated Authority"

AI Agents as "Autonomous Colleagues"

  • Integrating Reasoning & Action

    Automate non-routine tasks: LLMs interpret, plan (Planning), and dynamically select tools (APIs) to achieve complex goals.

  • Scaling beyond system boundaries

    Seamlessly executing across multiple SaaS platforms and internal systems to bridge functional silos.

  • Acting as a "Proxy" for the user

    Holding goals and privileges delegated by the user, making independent judgments to scale the user's impact.

Image of server racks with glowing blue lights, characteristic of a data center.

The Challenges

An IT professional is working on a laptop in a server room, with racks of servers visible behind him.

! The Challenges

  • Passing user tokens directly

    Giving full user privileges to AI creates an "impersonation" state where the AI acts as the user without knowing what actually required for the task.

  • Structural limits of static scopes

    Scopes like drive.read cannot distinguish the task's specific purpose. An "expense settlement" request might grant access to unrelated confidential files because the scope covers the whole drive.

An image shows a man in a server room, holding and looking at a laptop. Server racks with cables are visible behind him.

OWASP Warnings on "Excessive Agency" and "Identity & Privilege Abuse"

https://owasp.org/

2025 Top 10 Risk & Mitigations for LLMs and Gen AI Apps

  • LLM01: Prompt Injection
  • LLM02: Sensitive Information Disclosure
  • LLM03: Supply Chain Vulnerabilities
  • LLM04: Data and Model Poisoning
  • LLM05: Improper Output Handling
  • LLM06: Excessive Agency
  • LLM07: System Prompt Leakage
  • LLM08: Vector Weaknesses
  • LLM09: Misinformation
  • LLM10: Unbounded Consumption

https://genai.owasp.org/llm-top-10/

LLM06: Excessive Agency

Unexpected LLM outputs translate into real harm via excessive privileges.

LLM06: Excessive Agency

Unexpected LLM outputs translate into real harm via excessive privileges.

  • Excessive Permissions:
    Agent holds broader access (Read/Write) than required for the task.
  • Excessive Functionality:
    Toolbox contains destructive APIs unnecessary for the use case.

LLM06: Excessive Agency

Unexpected LLM outputs translate into real harm via excessive privileges.

  • Excessive Permissions: Agent holds broader access (Read/Write) than required for the task.
  • Excessive Functionality: Toolbox contains destructive APIs unnecessary for the use case.
  • Excessive Autonomy: Missing mandatory human verification or "Human-in-the-Loop" processes.

ASIO3: Identity & Privilege Abuse

  • Uncontrolled spread of privilegesStatic tokens propagate to sub-agents without scope reduction, causing broad, unintended access across subsystems.
  • Lack of trust boundariesAgent-to-Agent (A2A) communication often lacks strict mutual authentication, creating "blind spots" for attackers.

ASI03: Identity & Privilege Abuse

  • Uncontrolled spread of privileges

    Static tokens propagate to sub-agents without scope reduction, causing broad, unintended access across subsystems.

  • Lack of trust boundaries

    Agent-to-Agent (A2A) communication often lacks strict mutual authentication, creating "blind spots" for attackers.

  • Lack of independent IDs

    Agents acting as "human impersonations" makes tracking breach impact, attribution, and damage containment nearly impossible.

Dynamic Agent Authorization and Human-in-the-Loop Approval

RBAC and Granularity Issues

Traditional Approach

  • Authorization based on groups/roles (e.g., "Approver")
  • Effective for broad application/API level management
A diagram illustrating the traditional RBAC approach, showing an 'approver' role with a partially obscured ID, linked to a 'Permission' box containing 'approve:expenses' and 'view:expenses' permissions.

RBAC and Granularity Issues

Traditional Approach

  • Authorization based on groups/roles (e.g., "Approver")
  • Effective for broad application/API level management

approver

Role ID: [Redacted]

Permission

approve:expenses

view:expenses

The Challenge

Difficult to control at the individual resource level.

Example: An agent can approve ALL expenses instead of just a specific assigned request.

app.post('/expense/approve',
    claimIncludes('role', 'approver'),
    (req, res) => { ... });

app.post('/expense/approve',
    claimIncludes('permissions', 'approve:expenses'),
    (req, res) => { ... });
A diagram illustrates a traditional RBAC model with an 'approver' role linked to 'approve:expenses' and 'view:expenses' permissions. Two JavaScript code snippets are shown, demonstrating authorization logic using `claimIncludes` for role and permissions within an Express-like `app.post` route.

Introducing ReBAC

Relationship-based Access Control (ReBAC)

  • Access permissions are dynamically determined by "Relationships".
  • Q: Does the agent have a sufficient relationship with the specific object?

Example

Google Zanzibar

check(agent:alice, can_read, doc:secret)

NAMESPACE

name: "doc"
relation { name: "editor" }
relation { name: "viewer" }
relation { name: "owner" }

TUPLES

  • Kim is owner of the doc:roadmap
  • Ben is editor of the doc:roadmap
  • Carl is viewer of the doc:slides

QUERY

Is Carl a viewer of doc:slides ?

Yes, Carlviewer of doc:slides

https://www.zanzibar.academy

A diagram labeled "PREVIEWER" shows a central document node ("doc") connected to three relation nodes: "owner", "editor", and "viewer". The "doc" node is also connected to a "Drive" icon. A legend at the bottom indicates that a red square represents "User", a purple square represents "Relation", and a blue square represents "Object".

Secure RAG: Dynamically check access rights

Query

Search related info (Retrieval)

Documents related to query

A diagram illustrating a search and retrieval process. An arrow points from 'Query' to a magnifying glass icon, labeled 'Search related info (Retrieval)'. Another arrow then points from the magnifying glass to a grid of four document icons, labeled 'Documents related to query'.

Secure RAG: Dynamically check access rights

A flowchart illustrating a secure RAG (Retrieval Augmented Generation) process. It begins with a "Query" which leads to a "Search related info (Retrieval)" step. This step retrieves "Documents related to query," represented by four document icons. These documents then proceed to a step labeled "Dynamically check relationships (access permissions) for 'individual' documents using ReBAC." After this check, a set of documents is shown where three documents are highlighted green (indicating access) and one is highlighted red (indicating no access). The final output shows only the green, accessible documents.

Secure RAG: Dynamically check access rights

Query → Search related info (Retrieval) → Documents related to query

Dynamically check relationships (access permissions) for "individual" documents using ReBAC

Augment context (Augmentation) → Generate response (Generation) → Response

A diagram illustrating a Secure RAG (Retrieval-Augmented Generation) workflow. The process begins with a Query, which goes through a Search related info (Retrieval) step. This retrieves Documents related to the query. A critical security step follows where access permissions for individual documents are dynamically checked using ReBAC (Relationship-Based Access Control). This filtering step is shown with some documents appearing green (allowed) and others red (denied), with only the green documents proceeding. The allowed documents are then used to Augment context (Augmentation), which leads to the Generate response (Generation) step, culminating in a Response.

Dynamic Authorization of Actions

A diagram illustrating a system for dynamic authorization. It shows three components arranged horizontally. On the left, a hexagonal icon contains a smaller diamond shape and is labeled 'AI Agent'. In the center, a blue rounded rectangle is labeled 'ReBAC Authorization Engine'. On the right, an icon with a magnifying glass examining server racks is labeled 'API / DB'.

Dynamic Authorization of Actions

AI Agent

Action: read 'doc:secret'

ReBAC Authorization Engine

// Check relationship graph
check(
  user: 'agent:alice',
  relation: 'can_read',
  object: 'doc:secret'
);

API / DB

A diagram illustrating the flow of dynamic authorization. An AI Agent requests an action to read 'doc:secret'. This request goes to a ReBAC Authorization Engine. Above the engine, a code snippet shows a 'check' function being called with parameters for user ('agent:alice'), relation ('can_read'), and object ('doc:secret'). The engine then interacts with an API/DB, represented by a magnifying glass and server icons.

Dynamic Authorization of Actions

// Check relationship graph
check (
    user: 'agent:alice',
    relation: 'can_read',
    object: 'doc:secret'
);
A diagram illustrating a dynamic authorization flow. An "AI Agent" initiates an "Action: read 'doc:secret'" request. This request is sent to a "ReBAC Authorization Engine" which performs a check based on a relationship graph. If the check result is "OK", the request proceeds to the "API / DB". If the check result is "NG" (Not Good), the request is denied and an error is returned to the AI Agent. A successful authorization results in an "Authorized Action result (Document is passed)" from the "API / DB" back to the AI Agent.

Human Approval in "Appropriate Scenarios"
(Human-in-the-loop)

A flow diagram illustrating a human-in-the-loop approval process. An "AI Agent" proposes an "Action: Refund $5,000". This action goes to "Approval Logic". The Approval Logic interacts with "User Notification & Approval/Rejection" (depicted with a person icon and a smartphone). Separately, an "API / DB Refund" component is shown.

Human Approval in "Appropriate Scenarios" (Human-in-the-loop)

Action Result (Notify outcome of refund process)

AI Agent

Action: Refund $5,000

Approval Logic

User Notification & Approval/Rejection

API / DB Refund

Human as the "Last Line of Defense"

Does manual approval for every action make sense? (Implement Risk-Based Decisioning)

A flowchart diagram illustrating a human-in-the-loop approval process for an AI agent's actions, specifically a refund process. It shows an AI Agent proposing an action (Refund $5,000) which goes through Approval Logic. This logic can lead to User Notification & Approval/Rejection, with a feedback loop to the Approval Logic. Ultimately, an approved action results in an API/DB Refund. A separate text box emphasizes the human as the "Last Line of Defense" and questions the necessity of manual approval for every action, suggesting risk-based decisioning.

BuyFlow Support Demo

Screenshot of a web application interface for a "BuyFlow Support Demo". The interface shows user roles (Alice, Bob, Carol) and scenarios like "List Tickets", "Delete Ticket", "Small Refund", "Large Refund", and "Attack Sim". Below these, the screen is divided into two main panels: the left labeled "Prompt-Based Control" with a "No Permission Check" warning, and the right labeled "FGA Dynamic AuthZ" referencing OpenFGA controlling data access for 'agent:alice_assistant' and a "Mobile Approval" feature. Event logs are shown at the bottom.

BuyFlow Support Demo

Screenshot of a web application demonstrating a support ticket agent, with sections for selecting users (Alice, Bob, Carol), predefined scenarios, prompt-based control, and FGA dynamic authorization.

BuyFlow Support Demo

Screenshot of a web application interface for a support demo, featuring two main panels for "Prompt-Based Control" and "FGA Dynamic AuthZ," with user selection (Alice, Bob, Carol) and various scenario buttons.

BuyFlow Support Demo

Left Panel: Prompt-Based Control

  • No Permission Check
  • Relies on system prompt to control LLM behavior

Right Panel: FGA Dynamic AuthZ OpenFGA

  • OpenFGA controls data access at the tool level – subject: agent:bob_assistant
Screenshot of a web application demo titled 'BuyFlow Support Demo', showing a user interface split into two main sections: 'Prompt-Based Control' on the left and 'FGA Dynamic AuthZ OpenFGA' on the right, comparing different authorization mechanisms for a support ticket agent. User selection buttons for Alice, Bob, and Carol, and scenario buttons for various actions are visible at the top.

BuyFlow Support Demo

Screenshot of a web application interface for a "BuyFlow Support Demo". The interface displays user profiles for Alice, Bob, and Carol, each with their roles and associated companies. It also shows various support scenarios like listing and deleting tickets, processing refunds, and an attack simulation, alongside sections for permission checks and event logging.

BuyFlow Support Demo

Screenshot of the 'BuyFlow Support Demo' web application interface. It presents two side-by-side views of support tickets. The left view, under 'Prompt-Based Control / No Permission Check', displays 7 tickets. The right view, under 'FGA Dynamic AuthZ', displays a filtered list of 4 tickets, demonstrating fine-grained access control.

Prompt-Based Control

No Permission Check

#DescriptionAssigneeStatusCompanyUser
1001[Shipping] Ordered item not delivered (Order: EC-20260501-4821)Taro TanakaIn ProgressPixel0alice
1002[Billing] Charged full price despite coupon appliedTaro TanakaInvestigatingPixel0dave
1003[Billing] Coupon discount not applied (duplicate)Taro TanakaInvestigatingPixel0dave
1004[Returns] Furniture assembly parts missingHanako SatoUnder ReviewComfort0bob
1005[Plan] Enterprise premium plan upgrade requestMisaki YamadaPending ApprovalComfort0eve
1006

BuyFlow Support Demo

Screenshot of a web application for support ticket management, demonstrating different authorization models. The left panel shows tickets under 'Prompt-Based Control' including those from the 'Comfort0' tenant. The right panel, labeled 'FGA Dynamic AuthZ OpenFGA', displays a filtered list of tickets, primarily for the 'Pixel0' tenant, highlighting access control. An event log is present below each panel, detailing ticket search and permission checks.

BuyFlow Support Demo

Prompt-Based Control

FGA Dynamic AuthZ

Screenshot of a web application interface demonstrating "Prompt-Based Control" on the left and "FGA Dynamic AuthZ" on the right, showing ticket listings and event logs in a comparison layout.

BuyFlow Support Demo

Prompt-Based Control No Permission Check

FGA Dynamic AuthZ

Screenshot of a web application interface demonstrating ticket management. The interface shows two side-by-side tables comparing a "Prompt-Based Control" view, which displays all 7 tickets from various tenants, and an "FGA Dynamic AuthZ" view, which filters and displays only 4 tickets, presumably based on user permissions or tenant.

BuyFlow Support Demo

Screenshot of a 'BuyFlow Support Demo' application interface, presenting a comparison of ticket visibility. The left side, labeled 'Prompt-Based Control' with a red warning, shows 7 support tickets and an event log stating all 7 were exposed to LLM context with 'no permission check'. The right side, labeled 'FGA Dynamic AuthZ' with a green checkmark, displays 4 filtered support tickets and an event log detailing an FGA check that processed 7 tickets, allowing 4 and denying 3. User roles and scenario navigation buttons are also visible in the application header.

BuyFlow Support Demo

Screenshot of a 'BuyFlow Support Demo' application interface comparing two authorization methods. The left panel, labeled 'Prompt-Based Control No Permission Check,' displays a list of 7 support tickets with detailed information and an event log noting that all 7 tickets were exposed. The right panel, labeled 'FGA Dynamic AuthZ OpenFGA agent:alice_assistant,' shows a filtered list of 4 tickets and an event log indicating that an FGA check denied access to 3 out of 7 tickets. Both panels include a button to 'Delete ticket 1003. Reason: duplicate of ticket 1002.'

BuyFlow Support Demo

Scenarios: 1: List Tickets (Alice) | 2: Delete Ticket (Alice) | 2b: Carol delete (Carol) | 3: Small Refund $50 (Alice) | 4: Large Refund $3,500 (Alice) | 5: Attack Sim (Alice) | Custom...

Prompt-Based Control: No Permission Check

System sync discrepancy Suzuki

I found 7 tickets that need attention. Notable items include:

  • Ticket #1006 - Critical payment API timeouts affecting $6,300 worth

BuyFlow Support Demo

Prompt-Based Control

No Permission Check

Relies on system prompt to control LLM behavior

FGA Dynamic AuthZ

OpenFGA

agent:alice_assistant

Mobile Approval

OpenFGA controls data access at the tool level -- subject: agent:alice_assistant

Screenshot of a web application interface for a 'BuyFlow Support Demo'. The application's header shows user profiles for Alice (Support Staff), Bob (Support Staff), and Carol (Manager). Below the header is a 'Scenarios' row with buttons for actions like 'List Tickets', 'Delete Ticket', 'Small Refund $50', 'Large Refund $3,500', and 'Attack Sim'. The main content area is divided into two vertical panels. The left panel is labeled 'Prompt-Based Control' and features a red 'No Permission Check' tag. The right panel is labeled 'FGA Dynamic AuthZ' and includes a green checkmark, 'OpenFGA', 'agent:alice_assistant' tags, and a mobile approval icon. Both panels contain an 'Event Log' section at the bottom. A mouse cursor is shown hovering over the '4. Large Refund $3,500 (Alice)' button.

BuyFlow Support Demo

A screenshot of the BuyFlow Support Demo web application, illustrating a large refund scenario. The interface is split into two panels. The left panel, labeled 'Prompt-Based Control No Permission Check', shows a blue text bubble requesting to execute a $3,500 refund for ticket 1001 due to an item lost in shipping, followed by a 'Processing...' status. The right panel, labeled 'FGA Dynamic AuthZ OpenFGA agent:alice_assistant' and featuring a 'Mobile Approval' tag, displays the identical refund request and 'Processing...' status, indicating a comparison of different authorization mechanisms. A cursor is positioned over the 'Large Refund $3,500 (Alice)' button in the 'Scenarios' menu at the top.

BuyFlow Support Demo

Screenshot of the BuyFlow Support Demo application interface, comparing a large refund transaction under two different authorization models. The left panel shows a refund successfully executed under 'Prompt-Based Control No Permission Check'. The right panel shows the refund initiated but pending manager approval under 'FGA Dynamic AuthZ OpenFGA Mobile Approval', indicating a threshold check.

BuyFlow Support Demo

A screenshot of a web application interface on the left and a mobile phone displaying an approval request on the right. The web application, titled "BuyFlow Support Demo," shows a user named Alice (Support Staff) as the active agent. Several scenario buttons are visible, with "4: Large Refund $3,500 (Alice)" highlighted. A blue chat bubble states, "Execute a full $3,500 refund for the customer on ticket 1001. Reason: item lost in shipping." Below this, a status message confirms, "The refund has been initiated successfully! Here's the status: Refund Status: Pending Approval," detailing the amount ($3,500 USD), customer (Taro Tanaka), reason (item lost in shipping), and status (Awaiting manager approval as amount exceeds $100 threshold). An "Event Log" at the bottom shows steps like FGA checks, refund permission confirmation, threshold check, and a CIBA trigger sending an approval request to manager Carol's mobile. The mobile phone, labeled "Carol Auth0 Guardian," displays an "AI Approval Request." The approval chain shows the Agent as `agent:alice_assist`, Delegator as `user:alice`, Approver as `user:carol`, and Reason as `$3,500 > $100`. The action is "$3,500 refund execution (customer: Taro Tanaka)." Below this are two buttons, "Deny" and "Approve," with a cursor clicking the "Approve" button.

Summary

  1. AI Agents are autonomous colleagues, but their excessive privileges can lead to devastating damage.
  2. Move from static permissions to relationship-based dynamic authorization to ensure least privilege.
  3. For high-risk operations, always include Human-in-the-Loop as the final safeguard.

OpenFGA and Authorization for Agents

OpenFGA

openfga.dev

Authorization for Agents

A logo for OpenFGA, featuring a dark square icon with a pattern of teal and light green interconnected circles. A QR code with a small dinosaur illustration in the center.

Auth0 for AI Agents

AI Engineer

MELBOURNE

Google Cloud Google DeepMind

Live Schedule: https://a0.to/ai-event-schedule

Make Connections: https://a0.to/ai-event-connect

Complete a Quest: https://a0.to/ai-event-quest

Bring your agent: https://a0.to/ai-event

Auth0 © Okta, Inc. and/or its affiliates. All rights reserved.

A diagram illustrating a flow for AI agents using Auth0, with components like user authentication, token vault, asynchronous authentication, and FGA for BAAS, featuring Google Cloud and Google DeepMind logos. Four QR codes are displayed; one large for "Bring your agent" and three smaller ones for "Live Schedule", "Make Connections", and "Complete a Quest". An Auth0 logo is at the bottom left.

Auth0 for AI Agents

  • Help me with...
  • New authentication
  • Agent has completed your request.
a0.to/ai-event

A dark-themed diagram illustrates an authentication and authorization flow for AI agents using Auth0. The flow starts with a user initiating a request, which is processed through Auth0 (represented by a glowing shield icon with an underlying dashboard-like interface showing options like Users, Apps, APIs, Roles, Hooks, and Logs) for authentication, leading to an AI agent that completes the request.

A large QR code is displayed on the right side of the slide.

Thank you!

Daizen Ikehara

Principal Developer Advocate

Auth0

A professional headshot of Daizen Ikehara, a man with dark, slightly messy hair and glasses with red frames, smiling. A cartoon illustration depicting Daizen Ikehara's head, wearing clear-rimmed glasses, with a slightly thoughtful expression. The Auth0 logo, an abstract diamond shape formed by two interlocking, stylized 'A's.

AI Engineer Melbourne

  • Google Cloud
  • Google DeepMind

Live Schedule

Make Connections

Complete a Quest

Bring your agent

AI Engineer Melbourne

  • Google Cloud
  • Google DeepMind
  • Optiver
  • Buildkite
  • ClickHouse
Four QR codes are displayed, each associated with a label: Live Schedule, Make Connections, Complete a Quest, and Bring your agent.

AI Engineer Melbourne

  • Google Cloud
  • Google DeepMind

Live Schedule

Make Connections

Complete a Quest

Bring your agent

AI E—

MELBO|

The slide features a glitched visual effect. A horizontal bar with segment markers is displayed above the main text.
  • Tuning band labels: МВ ДМВ (MV DMV - Meter Wave / Decimeter Wave, referring to VHF/UHF)
  • Channel/frequency markers: 1 6 21
  • Channel/frequency markers: 5 12 60
  • Model name: ЭЛЕКТРОНЬ Къ 409Д (ELEKTRON K 409D - Electron K 409D)
  • Component label: РАДИАТОР (RADIATOR)
An old, small, beige-colored cathode ray tube (CRT) television set. Its black-framed screen displays a bright white static or noise pattern with horizontal lines. On the right side of the screen, there are vertical tuning sliders with numbers and Cyrillic text indicating tuning bands and channels. Below the screen, a horizontal ventilation grille and the model name "ЭЛЕКТРОНЬ Къ 409Д" are visible.

Technologies & Tools

  • Claude Code
  • OpenFGA

Standards & Specs

  • CIBA
  • MCP
  • OAuth
  • OWASP Top 10

Concepts & Methods

  • Excessive Agency
  • Human in the Loop
  • Least Privilege
  • Prompt Injection
  • RBAC
  • ReBAC

Organisations & Products

  • Google
  • OWASP
  • Zanzibar Academy

Works

  • Google Zanzibar