HomeVideos

Identity for AI Agents - Patrick Riley & Carlos Galan, Auth0

Now Playing

Identity for AI Agents - Patrick Riley & Carlos Galan, Auth0

Transcript

1886 segments

0:13

[music]

0:20

We're talking today about identity for

0:22

AI agents and how we authorize uh

0:25

agents, MCP servers and uh the

0:29

Um, we launched a new product uh

0:32

actually this week. So, uh, that made

0:35

this presentation fun. [laughter] Uh,

0:38

had a major release just a few days ago

0:40

um, for several of these features and

0:42

ging these. Um, um, additionally, I

0:46

should probably preface by saying a lot

0:47

of this workshop material has been

0:49

repurposed and um, our our architect uh,

0:53

Abbyek, he goes by nicknames

0:56

Shrek.

0:58

um kind of prepared a lot of this and

1:00

we've kind of massaged it into this

1:02

presentation.

1:04

Um yeah, so we're going to cover each of

1:08

these in depth. um some of the core

1:11

features of this new release whether

1:15

it's token vault um async off we're not

1:19

going deep on FGA but uh just know that

1:22

there is another kind of subproduct if

1:25

you will that's all around role based

1:27

access control um there's an open-

1:31

source project around fine grain do off

1:34

um which really extends this feature set

1:36

but that's really kind of another talk

1:39

Um,

1:40

so yeah, that's some of the things we'll

1:42

be talking. Uh, quick intros. Uh, uh,

1:46

it's my first time at AIE, so thank you

1:48

guys. It's been awesome week already.

1:51

Learned so much. Um, um, yeah, I'm I'm

1:54

from Raleigh, not not actually a Shire,

1:56

but [laughter]

1:58

uh, this is a little bit about me. Um,

2:00

and, uh, yeah, it's been great. I came

2:03

over from Duasio from Red Hat and I've

2:06

learned a lot about the identity space

2:07

in the last four years. Um I'm going to

2:11

roll over to Carlos.

2:13

>> Yeah. Hi. Um yeah, I'm I'm Carlos. I'm

2:18

co-host with uh Patrick for this

2:20

workshop today. Um first time in New

2:23

York, first time in the US. So great so

2:26

far. Uh thank you for the welcoming. Um

2:29

I'm best in Spain in Mayor if you know

2:32

the place it's a beautiful island. Um I

2:35

joined Al and Octa. Um I did a bit more

2:40

two years

2:42

father of two and well yeah it's a

2:45

little bit of about myself.

2:49

So I'm going to I want to start this

2:52

with a vision that I'll zero share. uh

2:56

this is uh to free everyone to safely

2:59

use any technology

3:02

and the fun fact about this is is a

3:04

vision that precedes the AI Asian era uh

3:09

and still stands uh because at the end

3:13

of the day is what what we do uh we deal

3:18

with identity for past, present and

3:21

future technology and yeah um

3:27

just to give a little bit of

3:31

what's the challenge. Um so I said that

3:35

our vision is just to to free uh anyone

3:37

to use any technology but it doesn't

3:40

mean that all the technologies are the

3:41

same and all the technologies has the

3:43

same uh challenges. It's obvious that

3:49

agents bring new challenges, new

3:52

threats. And just to illustrate, this is

3:55

an updated list of the OASP uh LFO top

3:59

10. Um

4:02

so you can see new things that they

4:04

didn't exist before. So yeah, obviously

4:07

we need to to solve new problems.

4:12

Um

4:15

so how how we modeled or how we think of

4:17

agents in our data. So

4:22

we think yeah so far we've seen

4:25

interactive agents chat box code editors

4:29

but this is unlikely the the future.

4:34

we start to see other uh modalities

4:38

where the agents doesn't run anymore in

4:43

a in interactive way. Um dash runners or

4:47

autonomous agents is something that is

4:50

very popular these days.

4:53

But beyond that

4:56

we see a feature where fully autonomous

4:59

agents can do things uh either on behalf

5:04

of the users or maybe just because

5:08

agents will start talk to other agents.

5:14

So this is how these are four pillars

5:18

that we believe will cover all these new

5:21

modalities. The first one is

5:25

AI needs to know who I am. So this is

5:29

this is key. Uh if the agent doesn't

5:32

know who I am, it can never apply any

5:35

security or any restriction or any

5:37

authoration authentication because

5:40

>> I'm just an anonymous

5:43

source or actor in this and this is

5:46

important. The second is

5:50

obviously the agents will be autonomous

5:53

enough but it doesn't mean that we'll be

5:56

alone. It will be just doing things on

5:58

its own. Eventually they will need to

6:00

access other services to consume other

6:02

resources. So AI needs to call APIs on

6:06

on my behalf as a user.

6:11

But sooner or later the agent will try

6:14

to do something riskier or something

6:16

that I don't I don't think as a user the

6:20

agent should do on its own uh without

6:24

any supervision uh from my side. So AI

6:28

can request my confirmation

6:31

and lastly um AI access

6:36

should be fine grain. So I need to to

6:39

give the agent control to access my

6:41

resources but not any resource, not any

6:44

collection or document or anything. It's

6:46

just it has to be on my hands to what

6:49

the agent can access and what not.

6:54

And just to to also introduce

6:57

where octa and alto can play or

7:03

complement each other.

7:05

So we talked about a user and it could

7:08

be me, it could be you but eventually

7:11

will be an employee within an enterprise

7:13

or a company and in this case the

7:16

employee is not only acting on his own

7:19

behalf is also representing the company

7:22

and in in those cases the company needs

7:25

also control what exactly those agents

7:27

that are acting on behalf those

7:29

employees are doing. So that's where uh

7:33

Opta also plays a uh important part and

7:38

in the other end Alzero is what we uh

7:42

the the capabilities and features that

7:44

we've implemented I think is where they

7:46

connect. Yeah.

7:48

>> Just trying to understand you said the

7:49

agents need to know who you are.

7:51

>> Yes.

7:51

>> Who you are is what as the user and the

7:53

coder and the one with the permissions.

7:57

uh is the subject of the the the

7:59

operation that you're doing. Like it

8:01

could be anything. It could be you as an

8:03

employee. It could be you as an owner or

8:05

something as an administrator or

8:06

something. But at the end is a person a

8:09

human.

8:10

>> Yeah.

8:11

>> Yeah.

8:12

>> In in the scenario I was talking about.

8:14

>> Is is this what

8:18

what permission the agent have access to

8:21

or who has access to the Asian

8:24

capabilities?

8:26

I'm not like I don't understand

8:28

>> both. Yeah.

8:29

>> What does that two here?

8:32

>> We're sorry.

8:34

>> We are definitely touching on both. So

8:36

yes, let's Yes. And time for your

8:39

questions at the end. Absolutely. Let's

8:41

make sure.

8:42

>> Thank you.

8:43

>> Thank you.

8:43

>> Thank you.

8:45

>> All right. So let's get deep on exactly

8:48

what we are going to present today. Uh

8:51

we talk about four pillars. um not in a

8:54

particular order but we are I'm going to

8:56

introduce uh one of the three which is

8:59

or how we made possible one of the three

9:02

which is um AI can request my approval.

9:06

Um for that we implemented a sync O as

9:09

part of the O for uh AI us offering and

9:15

basically [snorts] this feature what it

9:17

does is creates a mechanism and and a

9:21

protocol for the agent to reach out the

9:23

user when an operation needs to be

9:26

approved by the human in in in this

9:28

flow.

9:30

It's seems simple. Um

9:33

it it is in in [snorts] essence but well

9:36

it's security [laughter]

9:38

but uh on it's built on top of uh client

9:41

initiated authentication uh sorry client

9:43

initiated back channel authentication

9:45

protocol. It's an ITC uh specification

9:49

and it's yeah so in this scenario is the

9:53

agent that it's initiating the

9:55

authentication and authorization.

9:58

So the agent is running maybe it could

10:01

be a long run autonomous thing and at

10:04

some point needs to make a purchase or

10:07

make something that is flagged as risk.

10:10

Uh so with with a sync uh with a simple

10:14

SDK call it can initiate um

10:19

an authorization request that

10:21

materializes a notification to the user.

10:24

The user receives the details of that

10:27

transaction well structured. The user

10:30

acknowledges that, approves that and

10:32

then that approval gets back to the to

10:35

the agent in form of an access token.

10:37

And that access token contains the exact

10:40

details that the user approved.

10:44

And yeah, I'm going to hand over to

10:47

Patrick for this one.

10:48

>> Awesome. Yeah, thank you Carlos. And

10:51

yeah, good question. Thank you both

10:52

questions. the the token vault as the

10:55

other kind of like you know major

10:58

feature we're introducing with this AI

11:01

more AI targeted AIO release um token

11:04

vault is a new mechanism for persisting

11:08

your upstream uh resource refresh tokens

11:13

so I'm sorry refresh tokens and you may

11:16

have used oor before right for social

11:18

providers um or in tangent with like

11:21

other identity providers

11:23

Um this makes use cases with agents much

11:27

much easier. Um so we we we have a

11:30

really fine grained now flow which

11:33

allows you to exchange tokens. So on on

11:36

behalf of users so I can you know I can

11:38

send my access token or my application's

11:41

refresh token um whether it's for an API

11:44

whether it's for my application um and I

11:47

can then request scopes for an upstream

11:50

uh you know service. So whether that's

11:52

accessing Slack API or Facebook API or

11:56

um any any other identity you know uh

12:00

scoped API and so yeah and we we

12:03

actually persist scopes we manage

12:04

lifetimes of tokens um we do a lot of

12:07

handling there to ensure that your SDK

12:10

life is very easy um and that your agent

12:13

stays online and it's it's it's

12:15

available and it's secure u um yeah

12:19

we've been testing this flow really

12:21

extensively. Um, but you can kind of get

12:23

a picture of what is going on under the

12:26

hood and um, yeah, we'll talk more about

12:30

token vault in the in the shop. It'll

12:31

make a lot more sense when we get in

12:33

there. Um, I do want to kind of

12:34

highlight a few flows though. Um, where

12:39

you know I mentioned refresh token and

12:40

access token. um as we are digesting

12:44

each of the agentic frameworks you can

12:46

kind of see that well it may differ if

12:49

you're using a single page app right and

12:51

uh you know you're you don't have a

12:53

backend which is as you know uh as

12:56

secure you're or you're wanting to

12:57

access an external API um in these cases

13:00

especially like with langraph uh we we

13:03

use an access token it's shortlived

13:05

access token um that's simply because

13:08

langraph stands up an external API um

13:11

there's a langraph protocol around the

13:13

langraph CLI. So yeah, in this case like

13:16

we kind of model that flow whereas like

13:18

other flows you may just have a native

13:20

app or a simple Nex.js regular web app

13:24

um traditional web app with your agent

13:27

running embedded. Um then yeah in this

13:30

case like a refresh token may fits your

13:32

use case perfectly fine. Um, and then I

13:35

think as we're going to talk later,

13:36

there's also cases where, you know,

13:38

maybe you have an asynchronous agent

13:42

accessing other data. Um, we have a new

13:45

mechanism now called a custom API

13:46

client. Um, which can allow an MCP

13:50

server for example to access remote

13:53

data. Um, so that's kind of the

13:55

conceptually what we've done at Ozero.

13:56

We've taken agent, we've kind of modeled

13:58

it as a client and we've taken your APIs

14:00

and kind of modeled them as traditional

14:03

OOTH resource servers or APIs in our

14:06

platform. Um, so yeah, that's a little

14:08

bit what's going on here. I've kind of

14:10

listed some details about token exchange

14:13

on the [laughter] slide. Um, yes, that

14:16

just know that the subject token type is

14:18

kind of type of exchange whether access

14:20

or refresh. The subject token is your

14:23

your token. um [snorts]

14:25

the user token be in exchange for the

14:27

third party token. Um

14:30

let's see. This is a really quick GIF of

14:34

um our interrupt flow with Lingraph. Uh

14:38

recently wrote this. Um so it just shows

14:41

kind of you know what the what the

14:43

mechanism looks like. If the the prompt

14:45

says uh you know I need access to my

14:47

calendar, we have a a Google social

14:50

provider. um we have an interrupt you

14:53

know as part of our SDK it will feed you

14:56

back the the mention that you need to

14:57

request additional scopes we then do the

15:00

token exchange from token vault get you

15:02

a new access token and then you can up

15:05

access your upstream provider um really

15:08

quite simple in our in our framework now

15:11

um quickly about MCP and then we'll dive

15:14

into the workshop um MCP [snorts] is

15:17

very new for us we just launched a

15:18

preview Um but we've been avidly working

15:23

on this for quite some time. Um but

15:26

yeah, you can kind of see where we've

15:28

modeled the MCP server also as a client.

15:30

Um and yes, there are cases where agent

15:33

is a client talking to MCP server which

15:36

is also a client talking to upstream

15:38

APIs. So um and that's that's actually

15:41

what I'm going to show today. [laughter]

15:43

Um but yes, the the flow is quite

15:45

similar and we'll talk more about MCP

15:47

semantics and um you know how we've

15:50

implemented dynamic client registration

15:52

and um kind of what we have here. Uh

15:56

these are totally from our teammates. So

15:59

[laughter]

16:00

just trying to pick our favorite slides.

16:02

Um and yeah um as far as the workshop uh

16:06

I think we're planning to just kind of

16:08

highle high note each section. Um, if

16:12

you don't want to work through it,

16:13

that's okay. You can follow along. If

16:15

you want to work through it and you're

16:16

more hands-on, um, that's fine, too. Um,

16:20

and yeah, we really truly appreciate all

16:22

your feedback. We do have time at the

16:23

end for questions and all kinds of

16:26

feedback. So, um, we would love that.

16:28

And, um, yeah, this is what we are

16:29

building, um, today. Um,

16:33

basically, we are building an agent

16:36

Nex.js app. Um what's nice about Vcel's

16:39

platform, right, is we can build MCP

16:41

tools alongside our agent in the same

16:44

infrastructure quickly. We can then use

16:48

the agent client to communicate with the

16:50

MCP server and then leverage the MCP

16:53

server to talk to third parties. So um

16:55

that's really powerful and you know it's

16:57

secure and it's easy to build. um you

17:01

know we we feel quite good about several

17:04

areas of this the security stack there

17:06

but yeah I think this is kind of the the

17:09

rough idea like a lot of typical flows

17:12

you might see um you know in the

17:15

industry um yeah so uh I'm going to yeah

17:20

so we can pull it up and get going uh so

17:23

let's see uh yeah hopefully everybody is

17:26

able to capture the link Um

17:29

and

17:32

>> all right. Uh so yeah.

17:34

>> Yeah. Well, while while Patrick is um

17:37

showing and kind of doing the workshop,

17:39

um I'll be available for anyone has a

17:42

question or uh a problem with with the

17:45

workshop itself. Just raise your hand. I

17:47

will approach you.

17:50

>> Awesome. Awesome.

17:53

Yeah. and then I'll do like a quick

17:55

intro then kind of showcase what it does

17:57

and we'll kind of step through this

17:58

journey of building that topology. Um

18:03

so

18:05

yeah uh but welcome is really just

18:07

around getting your dependencies and

18:09

getting um a a client. Um so I guess the

18:15

first step here we we have a a root

18:18

tenant an upstream IDP for you. So this

18:20

is kind of a little more of an

18:22

enterprise use case. So let's say you

18:25

have a a core IDP provider um that you

18:29

know you you tap into for like upstream

18:32

API management or upstream identity. Um

18:35

so we have this like fictitious uh stock

18:38

trade application uh which looks like

18:41

this. Um and this application basically

18:45

the idea is is that you know consumers

18:48

can come here they can access a stock

18:50

API they can establish identity here but

18:54

this

18:56

this application also exposes a stock an

18:58

API for downstream consumers and

19:00

downstream agent clients and and

19:03

additional consumers. So we have a

19:05

basically a link a federated a linked

19:07

access uh with our ODC connection um to

19:11

this to this tenant. Um so yeah uh so

19:17

the first part is really just um getting

19:20

your um your client. Um, I already have

19:22

a client, but where you would start here

19:25

is basically just um going through

19:28

Ozer's stack and getting um

19:32

uh a tenant and starting to get your

19:35

client developer keys. Um

19:38

so we'll add O as the as a subsequent

19:41

step, but I'll show the like the first

19:43

step where we just have a really simple

19:45

agent and then we're we're adding on um

19:48

identity and then authorization.

19:51

Uh

19:52

so so yeah these are some prerequisites

19:55

node PNP

19:57

standard toys um OS CLI so we use a CLI

20:02

for a lot of CLI management of our stack

20:06

it makes some things easier we use a

20:08

combination of Terraform and CLIs um in

20:11

this demo um

20:14

um [sighs and gasps] yeah so that's kind

20:16

of the conceptual overview and some of

20:18

the like major dependencies Um, after

20:20

you've created your your client and kind

20:23

of signed up here, um, we've got a link

20:26

to it here. Um, you should be ready to

20:28

go for spinning up your tenant. Um, but

20:31

yeah, I'll talk more about that in step

20:33

two. Um, so yeah, let's start with the

20:36

very beginnings here. Um, so we're in

20:40

this step, we're just we're we're

20:42

building our downstream chatbot. Um,

20:44

this is a downstream application that

20:47

we're just spinning up. hasn't connected

20:49

to anything yet and we're adding we're

20:51

adding on this upstream provider and

20:54

adding on access um with agents and with

20:57

tools. Um

21:00

and so yeah uh I used OpenAI with my

21:03

agent but yeah you'll need uh an open

21:06

API access key. Um this is the repo

21:10

which has the base um the base template.

21:14

I'll give you a branch at the end which

21:16

has all of the changes we make in this

21:18

workshop. Um

21:21

and

21:23

um yeah, so let's take a look at what

21:25

that looks like. Go for

21:34

agent.

21:41

Okay.

21:44

Oops. [snorts]

21:48

Okay.

21:50

Go for it.

21:52

One, two.

21:53

>> Sure.

21:55

>> So, well, yes, standard uh chat box. Um

22:00

so at this point when when when you

22:03

start if you try to do anything other

22:07

than just regular gen AI questions you

22:11

will get just the model nothing else but

22:15

um the important part is if we try to to

22:19

ask the model who who I am

22:22

>> that's when the model then says okay I

22:24

don't know who you are I don't know what

22:26

they is so I don't I know nothing.

22:31

The same for in this case this is a

22:34

downstream of a trade uh app. If you try

22:38

to consume data from that trading

22:40

service like again the chatbot will tell

22:43

you I know nothing. Uh so let's let's

22:47

fix that. uh let's give uh the chat box

22:51

awareness uh first of the service uh and

22:55

tools and then also [clears throat]

22:57

>> authentication. So let's let's

22:59

authenticate and let the the agent know

23:02

who who I am.

23:04

>> Okay.

23:05

>> Uh

23:05

>> so that's okay. Yeah, keep going. I'm

23:07

going to apply this.

23:08

>> So well

23:11

I will try to sing with Patrick here.

23:13

>> Yeah. [laughter]

23:14

>> Um yeah, this is pretty standard. I

23:17

think you saw this in several workshops

23:19

already just today and imagine several

23:21

times in the last weeks but yeah we are

23:25

uh in the basel uh AI SDKs we will

23:28

introduce the uh get stock price tool

23:32

>> um and later the uh authentication part.

23:38

So, let's go for the simple thing. Um,

23:42

in this case, Patrick is cheating

23:43

because he has all everything stashed.

23:46

>> Won't be that easy for you guys, but

23:50

>> um

23:51

>> rest assured that uh let's run it again.

23:54

Um I

23:56

>> was going to say rest assured all of the

23:57

code that's here is is in this stash.

24:00

So, you don't have to worry about that.

24:03

So, um, let's go back to the chat box

24:06

and let's ask again about prices.

24:10

>> You guys want us to try to follow along?

24:12

You're going to do an overview.

24:15

>> Okay.

24:17

>> Like, am I supposed to try to keep up

24:18

with what you're doing?

24:19

>> Yeah, that's hard, right?

24:21

>> Yeah. [laughter]

24:22

>> Let's let's let's complete everything,

24:23

right? Yeah. Okay. Yeah. Good. Good

24:25

call.

24:26

>> You can tell it's the first time we run

24:28

inspection. [laughter]

24:30

Great.

24:32

>> Pretty awesome.

24:33

>> All right. So, let let's let's let's

24:36

make an actual or let's start uh with a

24:43

um trading questions or at least get

24:47

info questions about it. Okay, cool. So,

24:51

now we've got the chat box

24:54

um connected to the upstream API.

24:58

>> Yeah, exactly. Uh in this case it's a

25:00

public service. It's a public endpoint.

25:01

So no authentication association was

25:03

required

25:04

>> right

25:05

>> let's try so let's move along.

25:08

>> Um

25:10

>> there are more

25:12

info in that page but

25:14

>> sorry.

25:15

>> Yeah no no no it's okay. I was going to

25:16

say that let's go back to the kind of

25:18

important stuff.

25:19

>> Okay.

25:20

>> Um

25:21

all right.

25:23

What happens if we want to read not

25:27

public uh data from [snorts] the

25:29

upstream service but personalized data

25:31

so data that I as a resource owner own

25:35

in this case is we are going to use uh

25:38

token board so basically when when we

25:40

logged in can you go back uh the chat

25:42

box

25:43

>> yeah yeah yeah

25:45

>> so so far we didn't go through any login

25:48

process so there is no who I am or

25:50

anything like so it's just um anonymous

25:54

uh session so far but at some point we

25:57

will log in we will log in in the uh

26:01

Asian IDE

26:03

>> right and but that will give us a

26:06

relation a trust relationship between us

26:08

and the Asian alone

26:11

we need to go beyond that we need to

26:13

establish a relationship also it's kind

26:16

of a a three-way thing it's us is the

26:19

upstream service and the agent so we

26:21

need to establish this triangle

26:24

relationship, right? And we do that we

26:26

will do that through token bot. We will

26:29

uh first authenticate the agent that in

26:32

exchange well issue an ID token and an

26:35

access token u an access token that

26:38

basically authorize us to use the agent

26:40

alone. But we can with token bowl we can

26:43

use uh once we establish the third

26:45

relationship we can use that access

26:48

token to exchange to exchange it by an

26:52

upstream access token. Yeah. And that's

26:55

what token does. What it does is once we

26:58

connect our upstream app, in this case

27:00

the demo trade app,

27:03

Alzero will start storing the refresh

27:06

token

27:09

and dealing with the issuance that of

27:12

the access tokens. So we store the

27:14

refresh token, we store the the access

27:16

token for as long as it it until it

27:19

expires. And every time the agent needs

27:21

to access this data, it runs the refresh

27:25

token uh grant to obtain a new access

27:27

token and that is issued back to the

27:31

agent. So

27:33

>> can you Yeah, that's that's more or less

27:35

the the graph. Can I yeah jump to uh

27:39

>> so yes um you know it's also going to

27:42

show just adding the basic off for your

27:45

user and and built and then adding on

27:49

these these token vault requests. Um the

27:54

so SDK code here kind of walks you

27:57

through like the sign up the terraform

28:00

all of the tenant setup um so that you

28:04

can start to use these services, right?

28:06

so that you can access token mold so you

28:08

can start using identity with providers.

28:11

Um this is a very new feature set with

28:16

some of these features. So you'll you'll

28:19

notice like in some of our configuration

28:21

you're enabling a connected accounts

28:23

feature with our new my account API. Um

28:27

you're you know setting up grant types

28:30

for your client application, your agent

28:32

[snorts] application. Um, and you're

28:34

configuring your OIDC connection. Um,

28:38

um, so yeah. Um, [sighs]

28:42

I don't know if we want to. Let's keep

28:44

moving and then we can kind of show the

28:46

tenant. Um,

28:48

>> um, but these are kind of the steps, um,

28:51

we can apply to just add a basic

28:53

identity. And yeah, I'll turn to you

28:55

while I'm doing that.

28:57

>> Yeah, TDR, all the steps are there. uh

28:59

references, links, and everything you

29:01

need in case you want this to want to do

29:03

this later or at home.

29:05

>> Uh all right. [clears throat] So,

29:08

>> let's try. So, the

29:10

>> So, at this point, what we're going to

29:11

do is bring the login button to the

29:13

agent basically.

29:16

>> Um

29:17

>> just kind of show what that looks like.

29:20

>> Yeah.

29:22

>> So, uh route.

29:24

>> Yeah. So,

29:25

>> so we use ALJ SDK for Nex that provides

29:30

a middleware

29:32

>> um

29:32

>> not the right one. One second

29:34

>> and a wrapper uh for our routes.

29:38

>> You will see.

29:39

>> Sorry. One second.

29:40

>> Yeah,

29:41

>> I think it's that. Oh, it's complaining.

29:44

Sorry. Conflicts.

29:47

There we go. Okay, there we go.

29:52

>> Yeah, a huge change. It's intimidating

29:55

but it's because um it's dealing with

29:58

the connected account. I think uh we are

30:00

in the process of simplifying that in

30:02

the SDK

30:03

>> way more.

30:05

>> Uh but yeah uh

30:06

>> what is this?

30:08

>> Uh so this is the next uh route for the

30:11

chat.

30:12

>> Yeah. So we've taken the page uh that

30:16

yeah has the the chat um client. Uh so

30:19

it's yeah it's just your your standard

30:21

NexJS page and um yeah this is our

30:26

wrapper [snorts]

30:27

um which then basically forces login um

30:30

or gives you a redirect.

30:33

>> Um yeah

30:34

>> let's step back a

30:36

>> yes

30:37

>> and I'm going to add authentication to

30:39

this agent.

30:40

>> Yes.

30:40

>> Okay. Where does this fit in?

30:42

>> This is an embedded agent within the

30:45

next app. So yes, this chatbot is an

30:48

embedded agent. Um we'll show other

30:51

>> I'll tell you what I'm agent do is

30:53

>> I have a existing deployment what

30:56

additional components you're sharing

30:57

with me right now. What's my existing

30:59

deployment?

31:00

>> Yeah.

31:00

>> And what's out of the box?

31:01

>> Yeah. So it's really these wrappers u

31:04

from the SDK which wrap an endpoint um

31:07

you know whether it's a page route or um

31:10

something else. Um so yeah and then this

31:13

is pretty standard with like our next.js

31:15

JS SDK now um we established a session

31:20

um so yeah I'll show login but that's

31:22

there's there's really not a lot of

31:24

magic here um we are however requesting

31:27

this new connected accounts to see if

31:30

you have a federated connection so

31:32

that's kind of the confusing part here

31:34

because like you know the old school

31:36

zero flows would not have that like you

31:38

know we we wouldn't be requesting

31:40

upstream providers in many cases or

31:43

other APIs Um but in this case yes we

31:46

are using a federated provider and um so

31:49

yeah it's it's a little more contrived I

31:52

guess um and yeah we're creating a

31:55

client there you can kind of see the

31:57

OIDC options we're providing which are

32:00

you know are specific for OIDC and then

32:04

um this connect account endpoint um is

32:07

is new that's going to enable our new

32:09

connected accounts API um for managing

32:12

all of your accounts Um

32:14

I think that's Yeah. So let me show that

32:17

and kind of Yeah, go for it.

32:19

>> Yeah.

32:20

>> Okay.

32:22

Um

32:24

>> so that was code. Um

32:27

I think

32:28

>> let me restart.

32:30

>> All right. Okay. Let's try it again.

32:32

>> Yeah. Run it.

32:34

>> No, it didn't.

32:36

>> It's it's it's there.

32:38

>> Awesome.

32:38

>> So I'm gonna sign out and sign in.

32:40

>> Yeah. So we sign out. Um so at this

32:43

point is up to you want to place a login

32:46

button or whatever login UX is suits

32:50

best with with you in this case just to

32:53

simplify if you try to access the URL it

32:56

will just prompt you with the login

32:57

screen right away.

33:00

>> Um so we log in now um at this point we

33:03

are

33:04

>> well we it doesn't show but we are

33:06

logging to the upstream ID. Yes. So

33:09

using just one credentials

33:12

and then [sighs and gasps]

33:13

uh well at least uh now

33:16

>> uh it knows that I've got a session uh

33:20

>> and who I am.

33:22

>> Let's see.

33:25

>> Yeah.

33:25

>> Awesome. So it got the profile from the

33:28

IDP. It load that to the context. Yeah.

33:31

So now it knows who we are.

33:34

>> Yeah. And in this fictitious application

33:37

like this is also the same identity

33:39

that's uh I'm sorry that's linked with

33:43

the the stock trader uh sorry

33:47

yeah this dashboard. So so yeah your

33:51

identities are now linked between you

33:52

know these applications you're using an

33:54

upstream provider and you'll also see

33:57

shortly that they'll be linked with your

33:59

MCP tools as well. So, okay.

34:04

So, we've got identity for we've got

34:06

login. Um, we've got an embedded agent

34:09

running locally. Um,

34:12

um, what else do we want to talk about

34:14

in this step? Are we ready to go on?

34:15

>> Okay. So, it knows who I am, but it

34:19

doesn't know what I own. What What is

34:22

that? It doesn't have access to the

34:25

trading service resources that I own in.

34:28

So if you go back to the

34:31

>> uh demonstrated app one sec.

34:33

>> Uh yeah this one.

34:34

>> Yes. So my balance is 10k.

34:39

I've got these recent orders.

34:41

>> Yeah.

34:42

>> Uh so on so forth. So how can we give

34:45

the agent access to all this data?

34:47

>> Yeah. So all right.

34:50

>> So the first step is as we said earlier

34:53

>> we need to connect

34:55

the two accounts. So even if we are

34:58

using the same credentials, we still

35:00

didn't say explicitly or the a user

35:03

didn't set the explicitly to the agent,

35:06

hey I I know I I want you to know who I

35:09

am, but I didn't give you permissions to

35:12

access my account yet. So that's the

35:14

step you are doing. We are connected the

35:16

account. So that's when we prompt the

35:18

user with these extra permissions that

35:20

the agent needs, these extra scopes,

35:23

right? And that's when the relationships

35:26

is established. Uh so now the agent

35:28

knows that uh I have access to this

35:32

account

35:33

>> with that exact permissions. Nothing

35:35

more, nothing else.

35:37

>> Yeah. Yep.

35:40

And

35:40

>> yeah.

35:41

>> Yeah. So next I think it's just adding

35:43

some tools which can now leverage this

35:46

account. Um so I'm going to jump into

35:50

portfolio tools.

35:52

Um, and this is getting into that token

35:55

exchange and um, yeah, now we can start

35:58

to ask more pertinent queries, right? We

36:00

can say, can you view my portfolio? Um,

36:04

and uh, yeah, we're not going to give

36:06

you access yet to create orders. That'll

36:08

be uh, the next pieces. Um but yes uh

36:13

this kind of shows how our SDK kind of

36:16

models getting an access token for

36:19

another [snorts] connection upstream. Um

36:23

how to how to leverage shared tools and

36:26

TypeScript. Um I think what's really

36:28

nice here is that these tools can be

36:30

versatile. They can be shared between

36:32

whether it's an agent tool or an MCP

36:34

tool. Um hopefully your framework has

36:37

you know TypeScript support. Um that's

36:40

also a really nice uh capability

36:44

tool organization. Um so yeah let yeah

36:48

if you want to keep going I'm going to

36:49

add the the tools.

36:51

>> Awesome. So the same as the same the

36:54

first step we did we are going to load a

36:57

uh well to give the agent a new tool. So

37:01

far local tools we will get to we will

37:05

get to into the MCP part later but uh it

37:09

is a native tool that it does a simple

37:12

>> um HTTP request to the service but uh

37:16

the tool

37:19

will have a

37:22

>> so we can show yeah sorry

37:25

>> so one of the other things that we

37:27

provide in our SDKs is how we connect

37:30

this tool uh with the authentication

37:33

part and the authentication part.

37:35

>> Yeah. [snorts]

37:36

>> Use the the tools basically again.

37:39

>> Yeah.

37:39

>> So

37:40

>> So can you show

37:42

>> the code tool?

37:43

>> Yeah. Yeah.

37:44

>> No, the tool again the code tool.

37:47

>> Uh you show the

37:48

>> this one tools or

37:51

>> the the get portfolio tool.

37:53

>> Oh yeah. Go in

37:57

uh Yeah.

38:01

Sorry.

38:03

Yeah.

38:05

>> So at some point we have we create uh

38:09

with with a client and

38:12

in the handler.

38:14

>> Yeah.

38:15

>> What is that call?

38:18

>> So yeah it's just a a get with a include

38:21

history you know query pram option

38:25

optional uh addition there. um pretty

38:28

straightforward

38:30

API call once you have a client and a

38:32

token. Um but yeah, this the sweet sauce

38:35

is the you know we can now leverage this

38:38

get access token for connection really

38:40

easily on our SDK. Um so yeah let me

38:44

show that if you want to

38:45

>> yeah it's everything is summarized on

38:47

this slide that's what I wanted to show.

38:50

Uh so our SDK provides this you provide

38:53

the connection in this case that's the

38:54

upstream name that is represented in in

38:58

your tenant

39:00

uh and that's what does all the dance

39:03

with the top

39:04

>> there I'll say can you show my portfolio

39:07

sorry

39:12

>> so yeah um all right

39:15

>> so we've got an agent with access to our

39:18

data now so he knows who I am but also

39:21

has access to what I am

39:24

has digital access. Well, it's up to you

39:27

obviously that the tool implemented but

39:30

at least yeah I already know exactly

39:33

what we have.

39:35

>> Okay.

39:35

>> Okay.

39:36

>> So, so we have portfolio tools uh which

39:41

is great. Um

39:44

I didn't show the scopes but [laughter]

39:46

uh yeah rest assured that like I must

39:49

show the MCP server really quickly. So

39:52

kind of what we've scaffolded and

39:53

modeled. Um and this may help with some

39:56

of the questions but the um yeah here's

39:59

the MCP server which we've we've modeled

40:02

as an API. Um and we have you know

40:05

scopes around accessing the MCP server.

40:09

um we've kind of modeled those the same

40:11

way as our as our upstream um API. So

40:15

let's see permissions. Um we've got

40:19

scopes around reading trades, reading

40:21

our portfolio. Um and yeah, those are

40:24

referenced in in those tools in the

40:26

meta. Um that wasn't abundantly clear,

40:29

but um yes, we are representing those as

40:31

like scoped permissions. Um

40:33

>> how do you create these permissions?

40:36

Yes.

40:37

>> The keyword trade and portfolio these

40:39

are very application specific.

40:41

>> Yes.

40:42

>> Yes.

40:42

>> Yes.

40:42

>> So how would it know what they are mean

40:46

in the context of the application?

40:48

>> You want to take that one?

40:49

>> What do you mean?

40:51

>> So this app is a stock trading app. So

40:55

the word trade and portfolio will have

40:57

very specific meaning here.

40:58

>> Yes. Yes.

40:59

>> But I could have another app where the

41:01

word trade or the word portfolio maybe

41:04

it's like a project management app.

41:06

Portfolio would mean something else.

41:08

>> Yeah. But

41:09

>> so so how does it identify

41:11

[snorts] the meaning of the permission?

41:14

>> That's taking it.

41:15

>> Yeah, I can. So uh yes,

41:18

>> I think I understand but at the end of

41:20

the day is the upstream service that

41:22

sets the rules, right? [clears throat]

41:24

So [snorts] if you want to access my my

41:26

my resources, I need an access token

41:29

with this scope. Otherwise, I would

41:31

reject your request.

41:33

>> And it doesn't it doesn't matter if

41:34

you're an agent or even a just

41:35

traditional REST API client. And that

41:38

rel that you as an implementer of the

41:41

agent, you know that in advance. You

41:43

know if you are connected to an

41:45

upstream, you know what's the shape of

41:47

the request and what's the authorization

41:49

layer that I need to implement. You can

41:52

model your scopes as you want in your

41:54

local tenant but at the end of the day

41:56

the translation the scopes to the

41:59

upstream should be done. So you can you

42:02

can tell

42:03

>> where do I do that?

42:04

>> It's in the connection.

42:05

>> Yeah. When you define the connection.

42:09

>> Yeah.

42:12

Yeah. So the the enterprise connection

42:14

here to our upstream is here. And yeah,

42:17

you can kind of see we're requesting

42:19

those scopes from the upstream tenant

42:21

and it also in this case like has those

42:25

scopes modeled around the stock API. So

42:28

>> exactly.

42:28

>> Yeah.

42:29

>> So these scopes I'm getting from that

42:31

from the from the service.

42:32

>> Yes. So this comes out most likely

42:35

publicly available or it's something

42:36

that is part of the contract between you

42:38

and the upstream

42:40

>> and that's exactly what the user will

42:42

see on on the prom that you saw at the

42:44

moment that they connect the account.

42:46

>> Exactly.

42:46

>> So we are here for to simplify we use

42:50

the same names but it could be different

42:52

it could be different scopes have it's

42:55

the translation happens on top of both.

42:58

>> Yeah. Yeah. And um yeah, I should also

43:01

worth mentioning like we model roles

43:04

differently, right? like around you know

43:06

personas or other identities scopes are

43:09

really around API access right so if

43:11

you're looking to kind of model more

43:13

around a role um yeah definitely check

43:16

out FDA um we have role based access

43:19

controls which you can apply around

43:20

tools as well or around pages but this

43:23

is more just you know fine grained uh

43:26

access around an API um so all right

43:30

let's keep going

43:31

>> and this is new

43:33

>> yes Yeah, a lot of this is very new.

43:36

>> Connections has been around for forever,

43:39

but the purpose and actually that's the

43:42

name we chose. Uh the purpose of a

43:44

connection

43:46

>> uh we create a new one which is talking

43:48

mode.

43:49

>> All right, we're still doing pretty good

43:50

on time, but yeah, it's okay. Ready to

43:53

jump in MCP. So

43:54

>> yes, um any questions so far? Kind of

43:57

switching topics here. I I wanted to ask

44:00

similar to your question

44:03

>> the scopes will be available you get

44:05

them from the well-known oids like a

44:07

hard

44:09

common way to get these right and you

44:11

can publicly fetch them and then

44:13

>> yes

44:14

>> yes yes

44:14

>> yes exactly um so yeah that's you've

44:17

jumped right into the next flow and

44:20

>> uh yeah so we are trying to implement

44:23

the current spec with MCP now and that's

44:25

kind of the next part of this exercise

44:27

is adding the well-known protected

44:29

resource metadata endpoint. Um and um

44:34

yeah, so we've been testing this with a

44:36

lot of providers uh recently and

44:38

recently we just EA our DCR uh feature

44:41

like this week. So um but yeah, that

44:45

this flow is a little more involved,

44:47

right? Because the the MCP server

44:49

becomes um you know a client of the

44:53

agent. Um and we're kind of we're going

44:55

to show kind of how we modeled that in

44:56

the Verscell code. Um [clears throat]

44:59

um and you can see like you know all of

45:01

the steps there's you know obviously

45:03

more involved but it's you know it's

45:06

important because we're actually

45:09

securing MCP resources and tools and

45:13

kind of doing it in a granular way but

45:15

also enabling dynamic registration

45:18

um with many providers. Um so yeah we'll

45:23

showcase that towards the end here. Um

45:27

yeah, I can probably fire this up if you

45:29

want. Um kind of see if there's So this

45:31

kind of show maybe I'll talk through a

45:32

little bit of this. This kind of shows

45:34

some of the middleware

45:36

um and how we apply like scope

45:39

verification on the MCP server itself

45:42

and how we expose metadata. So yeah,

45:45

that's exactly what you're alluding to

45:47

is like we we advertise the supported

45:50

scopes um when you go to register um in

45:54

that part of the flow and then

45:57

um yeah further down I think it's in the

45:59

transport when we actually construct

46:03

uh so yeah this is just more helpers so

46:05

it's like you know creating middleware

46:08

to verify a JWT we're still you know

46:12

still a beer token um public private key

46:15

encryption. Um but yeah, we we reference

46:19

those libraries. We have a lot of shared

46:21

libraries for doing these things now. Um

46:23

and then um yeah, it another important

46:28

mention here is this is where we

46:29

introduced this custom API client. Um

46:32

maybe I can show so this is a separate

46:35

client that we've modeled in this uh

46:38

demonstration. You could really create

46:40

any number of API clients if you want to

46:44

model them, you know, more independently

46:46

or how you want to build your stack.

46:48

But, um, yeah, we've modeled this as a a

46:51

linked client, which is also a new

46:52

feature, not zero. Um, so now we can

46:56

actually link APIs to clients and model

46:58

them as basically you can think of them

47:01

as, you know, an agent client or an MCP

47:04

server client. So, um, so that's a

47:06

really nice new feature. um those are

47:09

now linked and um we have API support

47:13

for those as well. Um so yeah you can

47:16

see like constructing an API client with

47:19

the MCP server client ID and secret. Um

47:24

and

47:25

yeah I'll run that in just a second. I

47:27

want to see if this so this is again

47:30

like monitoring these shared tools. So

47:32

we've we've taken this like stock tool

47:35

portfolio tool from the agent over to

47:38

the MCP server now. So we can expose it

47:40

from there as well. Um and then you know

47:44

the registration of the tools.

47:47

Um and then yeah this is where we create

47:49

the transport right. So this is where we

47:51

create this MCP's endpoint and

47:54

construct the server and um yeah that

47:58

that's where we invoke our middleware

47:59

and so yeah let me show that and um yeah

48:03

if you want to add anything else feel

48:05

free

48:05

>> yeah so in in this case to an attempt to

48:09

to show the whole journey we decided to

48:12

create the NCP as part of this workshop

48:15

>> but it could also be that you

48:18

>> get your upstream NCP not that you are

48:22

building an NCP but you still need to

48:24

authorize to that right so in in in both

48:28

cases association works

48:30

>> so it's not that we wanted to show both

48:32

ends uh so that's why there's so many so

48:35

so much code in in that page it's just

48:38

because uh part of it is is the actual

48:40

MCP server

48:43

>> so I've unstashed all the changes in

48:46

this that I just showed and Um yes like

48:50

this is basically uh what's going to

48:53

give us the MCP tools. Um so um yeah I

48:57

will start this. [snorts]

49:01

All right. Um

49:06

so yeah we made the changes to the

49:08

client. So in this case in this the same

49:11

nextGS server that the agent is running

49:13

is where the MCP is served. But it's up

49:17

to you which as your architecture but

49:20

same same concept apply.

49:22

>> Yeah. So I'm gonna say

49:25

>> yes go. Yeah.

49:28

>> So if you go back to the chat UI, can

49:30

you can [clears throat] you do a prompt

49:32

injection to tell that now my connection

49:35

have a different scope and

49:40

>> so you can try that but it will take a

49:44

no effect because the fact that you are

49:46

asking scopes that are not part of the

49:48

connection would be either ignored or

49:51

rejected.

49:52

>> So so basically just ignore that. Yeah,

49:54

it depends on the the upstream, but

49:57

yeah.

49:58

>> Yeah.

49:59

>> So, the scopes that are not part,

50:02

correct me if I'm wrong, Patrick, but

50:03

scopes that are not part of the

50:05

connection can never

50:07

>> end up in the access token.

50:09

>> That's correct. That's right.

50:11

>> Right. So, I think our policy most of

50:13

the times is just ignore what we don't

50:15

recognize.

50:16

>> So, you just you will get an access

50:18

token with valid scopes, but not the one

50:20

you try to inject.

50:25

Okay.

50:27

>> And also I don't think now that you

50:30

mentioned I don't think we expose

50:34

the out part to the LM meaning we expose

50:38

the tool and we grab the tool but the

50:41

authorization happened before the tool

50:43

execution.

50:45

So I don't think the LM will have any

50:46

influence in what exactly. But I'm not

50:50

saying it's not possible because there

50:51

[laughter] are many ways to do many

50:54

things.

50:56

But either way, even in our end,

50:59

>> anything that we don't recognize

51:02

shouldn't end up in an access token.

51:05

>> Because you mean that the OP will

51:08

actually recognize what connections you

51:10

have before it pass your instruction

51:14

over to LM to execute. Is that right?

51:16

>> Yes. So you when you go Jio try to

51:20

execute the tool. So the tool will say

51:21

okay I need an access token because I

51:23

need to do an API call. So it's our

51:26

grapper or our SDK tools that provide

51:29

this access token to the tool. It's not

51:32

the tool on command to the end the to

51:35

from the LLM that runs the authorization

51:38

request. It's it's let me say it's just

51:41

oldfashioned

51:43

code. It's not LLM code.

51:46

>> Okay. So uh now I'm going to show kind

51:49

of step for step the DCR. Um so yeah

51:52

it's our I'm using MCP inspector and

51:56

common tool. Um and we'll show some

51:58

others but um yeah this will kind of

52:01

just show now we can actually target

52:03

that MCP server directly you know

52:05

running on the same server under /mcp

52:09

now. Um so yeah and this will show our o

52:12

flow and DCR happening. So I'm going to

52:14

hit continue.

52:17

disclaimer, open DCR is a thing. Yeah.

52:21

>> But in as in early access and I don't

52:25

think we will

52:26

>> Yeah.

52:27

>> There are some concerns about how this

52:30

will scale.

52:31

>> Yes.

52:32

>> Um but there are other aspects coming uh

52:35

that I think fit better in

52:38

>> in this scenario.

52:39

>> Absolutely. I agree.

52:42

Uh but yeah, you can see the protected

52:45

resource metadata coming back. So we

52:47

have the well-known endpoint. Um you can

52:49

see the scope supported and then we make

52:52

a request to the authorization server.

52:54

Um that returns more information about

52:57

our tenant. Um and you know additional

53:01

scopes how to authorize. Um so yeah, I'm

53:04

going to jump through that. And then we

53:06

get a registration call. Um, so now

53:10

we're going to get a new client just for

53:12

testing purposes with the MCP server.

53:15

Um, so yeah, now we're going to get um

53:19

believe this is PKCE. It's our

53:21

authorization code flow with proof key

53:23

code exchange. Um, so yeah, it's

53:25

standard on zero flow, but it's also

53:28

works well with with MCP. Um, so I'm

53:31

going to copy this.

53:36

Uh,

53:40

okay. So, yeah, now it's going to prompt

53:42

me and give me an authorization code.

53:55

And at the end of the line here, we

53:57

should get an access token. So, which is

54:00

great. So now we can access the MCP

54:02

server with these scopes from from

54:05

anywhere, right? That's the great thing.

54:07

So uh so now I'm going to hit connect

54:10

and let's see if we can get some tools.

54:13

Uh yeah. So

54:16

yes, so now we have access to our

54:19

portfolio and um you know our our

54:22

identity tools kind of accessing um the

54:25

same upstream stock API. Um, so yeah.

54:30

Um,

54:31

you want to add anything here, Carlos,

54:32

before we go further? Oh, any question?

54:38

Yeah.

54:41

>> Sorry, I'll ask at the end. Yeah.

54:45

>> Sure. All right.

54:47

Okay. So, um, yeah, this is really the

54:51

most involved part of this flow. Um I'm

54:55

going to show the claude. Uh so I've

54:58

actually deployed it if you want to play

55:00

around.

55:02

Uh

55:03

and um yeah, so um that's that's really

55:07

the most involved part with MCPA rather.

55:10

Um um yeah, I think we're hitting time.

55:14

So let's go into the async goth. That's

55:15

all right.

55:15

>> All right. Okay.

55:18

Um

55:18

>> go for it.

55:20

Do you mind still um driving the the

55:24

coding so I can

55:28

>> All right. So we said that earlier the

55:32

fact that the agent has access to our

55:34

resources it doesn't mean that you

55:36

should do anything in any time without

55:39

my supervision. Right?

55:42

I said this all the time. We don't want

55:44

an hallucinating agent buying a stock in

55:47

the middle of the night without my

55:49

permission.

55:50

>> What's wrong with that? [laughter]

55:53

>> Yeah. So that's where

55:57

part of our uh the bundle is provide a

56:02

simple way and a seamless way to the

56:06

agent to reach out the user and get

56:08

their approval for risky operation.

56:12

In this case, we consider place an order

56:15

either buy or sell a risky operation.

56:18

It's something that we as a developers

56:20

of the agent define. It's up to us. Um

56:25

so in this case what we are going to do

56:27

is we are we will bring um the create

56:32

order tool but with some conditions.

56:36

>> Yes. So D conditions would be that

56:38

before running the create order tool we

56:40

will call uh back channel O that's the

56:44

the SDK name for for the O uh sync

56:49

>> we will obtain an access token that

56:52

contains exactly what the user is so let

56:55

me let me go step uh backward so we will

56:58

create this request to back channel with

57:01

the detail with the details of the

57:03

transaction in this case it will be

57:05

exactly

57:06

the symbol I'm I'm buying or selling

57:09

quantity and the price for the user to

57:13

see that in their screen most likely out

57:16

of plan device see that and approve that

57:20

and only when that is approved we will

57:23

place the order.

57:24

>> Yeah.

57:26

Yeah. for that in this in this case in

57:28

this sample we will use guardian is our

57:32

uh mfa uh application is is out of the

57:35

box application you can use you can

57:37

install and use um but also we support

57:40

guardian SDK in case you want to

57:42

implement your own

57:45

>> um

57:46

>> I'll show the user

57:47

>> yeah so

57:50

to

57:52

for the agent to be able to reach out

57:54

the user in for this channel in

57:56

particular, the user needs to be

57:58

enrolled on MFA.

58:00

>> There are several mechanisms to do that

58:03

uh just for for for the workshop. We

58:05

show you kind of the back door of it,

58:07

>> but it depends on the UIX how you it

58:10

could be in sign up. It could be like a

58:12

step up kind of thing. I don't know.

58:14

It's up to uh to you. But we need to to

58:18

enroll. So you will find this is in the

58:20

docs but you will find a way to send an

58:22

email that contains all the instructions

58:24

to enroll.

58:26

>> So once we enroll we will we can we can

58:30

add this uh little helper here

58:33

>> uh that just basically forwards the uh

58:36

off to the to our SDK.

58:38

>> All right, let me undo and reapply here.

58:41

>> Yeah. Am I going faster than you?

58:43

>> No, it's Yeah, it's [laughter] perfect.

58:44

Sorry.

58:45

>> Catching up.

58:46

>> All right. Um

58:48

>> uh one sec.

58:50

>> Okay. So in a second I will show you

58:52

exactly what we are going to send in

58:55

this authorization.

58:57

>> Um

58:59

>> so we can see

59:02

>> so I think it was in a zero we add the

59:06

>> yeah so here is the uh this

59:09

>> is the helper. It's just a wrapper just

59:11

for wrap the errors and I'll test it.

59:14

But basically it's again this this line

59:17

of code in our SDK is what we sent and

59:20

what will run all these steps

59:22

>> internally.

59:23

>> Show the tool.

59:24

>> It will keep um it will wait for the

59:27

user response. So it's basically an an

59:31

sync uh operation and when the user

59:34

responds the agent can resume. Oh,

59:36

sorry. It's in uh it's in tools. This

59:40

one.

59:41

>> Uh yeah, this one.

59:43

>> So, yeah. So, here [clears throat] we

59:46

>> we're creating a new client with uh you

59:50

know, so we're specifying like what we

59:52

need in the authorization details. So,

59:55

we can provide that rich authorization

59:57

request detail when the authorization

60:00

request comes in. um we're you know

60:04

we're using this custom API client in

60:06

this case that we've already created you

60:08

could create others but yes we're

60:10

creating a custom API client to then

60:12

perform the back channel request um and

60:16

then uh yeah it in this case it waits

60:19

you could do a number of things you

60:21

could pull you could

60:23

there's other mechanisms here but yes in

60:25

this case for simplicity sake we wait

60:28

for the verification so let me give this

60:30

a

60:31

All right.

60:32

>> Yeah. [snorts]

60:33

So,

60:34

>> okay. So, we run the client again. Uh,

60:37

sorry, the chat box agent.

60:41

>> So, we'll go back to here.

60:43

>> All right.

60:44

>> And

60:46

so, now we can ask to

60:48

>> I don't know place an order

60:51

>> of what is it? Wayne.

60:53

>> Wayne. Yeah. For example,

60:58

>> fictitious stocks.

60:59

>> Yeah. So in this case,

61:01

>> yeah, go ahead.

61:02

>> I have this question about the code. I

61:03

don't know if all this code is checked

61:05

in.

61:06

>> I'm not sure. Do you have branches?

61:07

>> Uh yes. Yes. Yes. Uh yes, I'm happy to

61:10

share that towards uh towards the Do you

61:12

want me to share it now or

61:14

>> later? I just follow Yes, we do have a

61:17

final state branch. Yes.

61:20

>> Um in this case, the agent is instructed

61:22

to inform the user that this is going to

61:25

happen. So this is not yet the

61:27

authorization request. is just heads up

61:30

that hey you're going to receive a push

61:32

notification

61:34

is is okay it's just a really silly

61:37

system

61:39

um so you can proceed then

61:42

>> yeah waiting hang on

61:45

>> um

61:47

one minute here should be connected

61:50

let's see

61:52

>> one a minute

61:54

>> you run this like [laughter]

61:58

Uh,

62:00

turn that off. Oh, because you're hot.

62:03

>> And [sighs]

62:05

let's see.

62:07

Let me try again. Let's see.

62:09

>> Yeah. Refresh and try again.

62:10

>> Refresh.

62:13

[clears throat]

62:17

>> Apart from push notifications, we also

62:19

support email as a random note. Um, and

62:23

more channels. We we will be

62:24

implementing more channels to reach out

62:26

there.

62:29

Yeah, maybe I need to restart the

62:31

application server

62:33

is if I have

62:37

>> can I just pre-authorize certain users

62:41

>> in in your engine like

62:45

>> yeah I I mean I guess it's up to you how

62:47

you manage this session with your agent

62:49

this

62:50

>> no yeah I want to make sure no one else

62:52

can engage like

62:55

>> with the same agent You mean?

62:57

>> Yeah. Or like can I can I get can I can

62:59

I be able to pre-authorize the agent for

63:02

certain access but also for preauthorize

63:04

who can use the agent for access.

63:07

>> Just trying to understand what are the

63:09

different use cases around that.

63:11

>> Um yeah but this is kind of up to you

63:14

how you kind of the how you manage your

63:17

sessions and permissions to access the

63:19

app as a resource.

63:20

>> Okay. Uh but once you establish that

63:23

it's just you can you can establish any

63:26

policy that you want at the end. I don't

63:29

I don't know if I'm following the we can

63:32

we can chat later but

63:33

>> I approved it. So yeah I had to

63:36

reconnect here on this network. So

63:39

>> okay

63:40

>> uh let me try one more time.

63:44

>> It did come in

63:44

>> in this example for this agent. It's

63:46

saying okay basically the we the agent

63:50

is asking if if it's allowed to go to

63:52

that website. So I just want to make

63:54

sure that the the agent is filled with

63:58

that website but no other websites.

64:01

That's what I meant about pre

64:02

authentication authorization. But when

64:05

you say website, you say the the service

64:07

>> or certain APIs or certain tools

64:11

just trying to see what if anything can

64:13

be done as it because right now the

64:16

application is happening as interactive.

64:19

>> Yes.

64:19

>> So I'm just saying can it be enough?

64:21

>> Okay. I see. Yeah.

64:22

>> Yeah. So

64:24

>> this is how I I see I not access person.

64:29

>> No no I understand I understand now. I

64:31

understand now. So yeah, I I had similar

64:33

concerns. I'm I'm not in product, sorry.

64:36

But um yeah, so imagine that your

64:38

interface is not a chat box.

64:40

>> It's like a task runner kind of thing.

64:43

>> Exactly.

64:44

>> So I guess in what I would implement as

64:46

an engineer is I would attach my

64:48

identity or at least an identifier of

64:50

the user, the subject to that task in my

64:53

database. So I I enter the agent, I set

64:56

up a task and I say, "Okay, I want to I

64:59

don't know, find me a good deal or or

65:03

advise me or buy Wayne stocks when it's

65:05

below 70."

65:07

>> It could be a task, right? I think that

65:09

task is modeled in your system, right?

65:11

It has to be modeled somehow. I don't

65:14

know if it's prompt and ID of the user

65:17

and that thing that's when you establish

65:19

that. And we use the user that is the

65:22

subject is what we use to identify if

65:25

the user has a connection to that

65:26

account

65:28

you know so I need this account this

65:31

user to have this connected this

65:34

>> I understand

65:35

>> and then I will only create a sensitive

65:37

identity for the agent because I want to

65:40

differentiate if the connection is

65:41

coming from an agent or coming from the

65:43

user

65:43

>> but that's that's the thing you are in

65:46

in our uh because the event is an agent

65:51

performing the the the request to the

65:54

service

65:54

>> behalf

65:55

>> is in my behalf. what I need

65:57

>> but I want to know but but I want to

65:58

differentiate though

66:00

>> because if an agent goes wrong I want to

66:02

know the agent goes wrong right so I

66:04

want to know

66:05

>> yeah you can you can

66:07

>> yes so in that case because the agent is

66:10

the client your access token will have

66:12

an author authorizing party that's a

66:14

claim identify not not the user but who

66:18

is

66:21

who the user is delegating the access to

66:24

>> and that's where you can say okay This

66:26

is my ID as an agent. This is my

66:29

subject. So I can know exactly okay this

66:31

agent is acting on behalf of this user

66:33

and you can ruin any policy on that that

66:36

you need.

66:36

>> Yeah.

66:37

>> That's all that's nothing new. It's been

66:40

it's been around forever.

66:42

>> No, but now I understand. I understand.

66:44

Yes.

66:45

So um yeah I wanted to show kind of logs

66:48

and also just uh we did show the

66:52

exchange in the last example for

66:54

accessing the portfolio but this is the

66:56

actual async siba exchange uh which is

66:59

slightly different in our logs but I

67:02

think it also kind of ties it together

67:03

really well. Um and it shows you know

67:06

I'm going to show like what an actual

67:08

token payloaded looks like. again

67:11

fictitious and these tokens are

67:14

>> not going to give you much. [laughter]

67:16

>> So this is the details I was talking

67:18

about. Um we use an extension of it's

67:21

reach authorization request is a it's in

67:24

a specification and basically we can

67:26

describe exactly what the user is giving

67:29

consent to.

67:30

>> Yeah. uh and that gets recorded in the

67:33

accessory.

67:34

In a real scenario, most likely the

67:38

resource server will want to verify

67:41

that.

67:42

>> Uh but yeah, that that's up to the the

67:45

stack that out of our but yeah,

67:48

>> I'll show the uh notification to so

67:51

yeah, it looks like so yeah, that's what

67:53

it looked like on my phone actually when

67:55

I actually connected it to the network

67:56

and I got a slew of notifications.

68:00

One of the challenges with uh rich

68:01

associations request is that the object

68:04

is reported. You can put anything you

68:07

want. Um and that complicates thing in

68:10

terms of rendering that request. To

68:14

solve that, we created an schema. Uh so

68:17

we we support an on schema. is flexible

68:21

enough to give you any opportunity to

68:25

display anything but is known and we can

68:30

it helps for our [snorts] app in our

68:32

case but also in your apps if you are

68:34

developing yours to to render this

68:36

dynamically. So our garden app is able

68:39

to render any details um and yeah we

68:42

provide this schema for you. All right,

68:46

>> cool. We're good.

68:48

>> All right.

68:48

>> Awesome. So, that's a little bit about

68:52

our new asynchronous authorization

68:55

features. Um,

68:57

last piece and then kind of open up more

68:59

for discussion and yeah, I know we'll

69:02

have a little bit of time, but um I just

69:03

want to quickly show and kind of preface

69:06

with like some of the integrations which

69:07

we are testing. This is very beta and

69:11

shipped very recently. But um yeah, this

69:14

is using that DCR flow. Um I'm kind of

69:17

showing how again how we did it with um

69:21

with the inspector, but also with cloud

69:23

code or with uh the chat uh I'm sorry,

69:27

the open API app SDK. Um so this just

69:30

kind of I'm not going to do this now.

69:32

We're short on time, but obviously like

69:33

we can you know we can deploy this to

69:35

Burcell. Um I'm using an upstach

69:38

database uh varus database for handling

69:41

the state um on on the MCP server side.

69:45

Um

69:47

and yeah you you can get running pretty

69:49

quickly on on versell. So you can you

69:51

know you can take this agent and this

69:52

MCP server and start sharing you know

69:56

these tools. Uh bring your tools right

69:58

anywhere. So um

70:01

um yeah. So, I'm going to show um I

70:05

guess just I've got a deployment that I

70:08

mentioned earlier. I'll target that and

70:10

uh I'll I'll DCR with my deployment.

70:13

Ironically, it's also linked to the same

70:15

identity provider. So, I'll get back my

70:18

same information. Um which is nice. Uh

70:21

and then um I'll show kind of how um in

70:25

cloud code this works. Um I'm going to

70:28

skip over chat uh GPT app SDK. There is

70:33

there is an integration that is starting

70:34

to work here.

70:36

Um there's some configurations needed.

70:39

So reach out and let's talk uh if you

70:41

need this today. Um but yeah, it'll be

70:44

pretty much readily available in you

70:47

know the very near future. So we we do

70:49

have some integrations today um that

70:50

we've we've tested. Um but yes, there's

70:54

this kind of gives you a rough overview

70:56

of like how you could quickly bring

70:57

those tools to J GPT. Um um

71:04

so yeah, I'm gonna gloss through that.

71:06

This is just me showing like oh yes,

71:08

I've connected it in GPT and I can

71:10

access my tools there. Um

71:13

um yeah, let me go ahead and while if

71:16

you want to talk a little bit more of

71:17

that, I will show kind of uh getting a

71:20

new a new client with the with my

71:23

deployed instance and then integrating

71:25

it in cloud code. [snorts]

71:28

So yeah, just this is just to showcase

71:32

that the the client the MCP client

71:36

should also run the same policies all

71:38

policies that so all clients should run

71:41

the same uh so should identify

71:44

authenticate me and author and the

71:47

authorization the same authorization

71:48

policy should happen. So in this case um

71:51

we embedded the MCP as part of the

71:53

server but um

71:57

well in this case Patrick deployed that

72:00

for us. [laughter]

72:01

>> Uh so yeah

72:03

>> disconnect

72:04

>> same same thing we did before

72:07

um

72:09

in this case this is an production

72:11

issue.

72:12

>> Yeah same [snorts]

72:15

>> as you can see it's asking for my

72:17

authentication.

72:18

>> Okay. and it got an access token with

72:22

the scopes that we requested.

72:24

>> All right. So now we're going to pull up

72:26

claude

72:28

>> and uh

72:30

>> and yeah, we can just jump into

72:33

uh cloud cut uh give it the MCP.

72:37

>> So yep,

72:39

I got a command in the read me here

72:41

that's in the final.

72:42

>> All right.

72:43

>> So uh and then yeah, I need to replace

72:46

the token. I'll save. So in this case, I

72:49

am going to use my inspectors token and

72:52

claude does support authentication.

72:56

However, there is an open issue right

72:57

now about specifying scopes. [laughter]

73:00

Uh so yeah, I'm just going to use my

73:03

inspector's access token. Um but yeah,

73:06

you'll see you'll see that with Claude

73:08

and then Claude will still initiate. Let

73:11

me show that. Unfortunately, the spec is

73:14

pretty new

73:15

>> and not all the clients implemented the

73:18

same way. Um,

73:20

>> yeah.

73:21

>> So, yeah, that's um I expect that to

73:24

stabilize advantages.

73:26

>> There's no like copy in this tool, is

73:29

there?

73:29

>> No. Okay.

73:32

Okay.

73:35

Once again, my my token is not going to

73:37

do you much. These are fictitious uh

73:41

trains.

73:42

>> All right.

73:43

>> Okay.

73:43

>> So, yeah, same same thing as before. We

73:45

can start asking about

73:47

>> what we got in the in the app service.

73:50

>> Uh what happened?

73:54

>> It's connected.

73:54

>> Is it connected? Okay. Oh, okay. So, let

73:58

me res sometimes I have to restart it. I

74:01

don't know why. Okay. Now, let's see.

74:05

No. Huh.

74:08

Yeah. Let me try once more here.

74:12

That did not work. I'm sure. Yeah, I'm

74:16

not seeing it.

74:18

Okay.

74:20

Clawed ad.

74:22

Yeah, it looked like it was there.

74:29

Let's see.

74:33

[snorts]

74:42

In the meantime, more questions.

74:44

>> Yeah, [snorts] you had a question

74:47

before.

74:48

>> Uh, yeah, I I think I get the perview

74:50

when you're a zero customer. Maybe the

74:53

context here if you're building an app

74:54

for let's say your consumers or

74:57

something, then maybe this whole flow

74:59

will be applicable.

75:01

I'm thinking but if you are an octa uh

75:04

tenant you're using octa in your

75:07

workspace how do the two work together

75:10

or do is this thing also going to be

75:12

available on the opta side

75:14

>> no I think the idea that got me I'm

75:18

going to I don't know exactly so 100%

75:21

but what I think it is is we are going

75:24

to create some sort of bridge um that

75:28

you can apply the the the same policies

75:30

as octa as an employee to agents

75:34

>> and restrict those accesses to those

75:36

services as you would do with that

75:38

employee that's where I is that your

75:41

question more or less

75:43

>> kind of yeah

75:44

>> but also how how the two systems are

75:46

going to work together because

75:48

>> this seems like a feature of zero which

75:50

is my understand

75:54

>> yeah it is it is a separate part but um

75:58

as far as I know

76:01

work together on on protests.

76:04

Um, but yeah, we can we can connect

76:07

later if you want. I can dig into dogs.

76:10

Yeah, most likely us.

76:18

Yeah. Not sure what I'm doing wrong

76:20

here. Uh, do you need to do the

76:27

>> uh let's see

76:28

>> this this cloud command you don't you

76:31

have to run it outside cloud session

76:33

>> maybe

76:34

>> in the terminal.

76:35

>> Oh, in the terminal. Okay. Yeah, let's

76:37

try that.

76:39

>> Anything else?

76:41

>> Yeah. Uh so it seems like if I were

76:43

deploying an agent, one way I can start

76:45

is just to use the user's token on

76:48

behalf of who the agent is acting as the

76:50

token for the agent themselves. So what

76:53

do you feel like is the advantage of

76:54

existing agent identity? What are the

76:56

the features that have?

76:58

>> So when you say I can just pass so you

77:01

authenticate the user and just forward

77:03

the access token to the agent somehow or

77:06

>> that's that don't do that please. So the

77:09

access tokens are meant to first it will

77:12

be in terms of operability it will be

77:15

cumbersome because access tokens will

77:17

expire eventually. So at some point you

77:19

will need to reach out the user again

77:21

okay login and do all the dance again.

77:25

So how autonomous your agent will be in

77:27

that scenario.

77:29

Um so that's kind of what we try to

77:31

solve. So we establish that connection,

77:34

that relationship and we take care of

77:36

this nasty complex part of refreshing

77:39

tokens, storing tokens

77:42

um and and yeah all the scope step up

77:45

things like that.

77:46

>> Okay, so finally got it working here.

77:49

[laughter]

77:50

>> Some of the interactions I might make

77:51

with the agent are through say the the

77:53

chat assistant and so whenever the agent

77:56

is taking action, I'm

77:59

initiating an action, right? Or Not

78:02

necessarily as as for example the

78:03

example we were talking about before.

78:05

Imagine like a taskr runner kind of

78:07

thing. You log in, you have the

78:10

identity, you have a like a kind of

78:12

traditional dashboard where you list

78:14

your connectable apps, Slack, Gmail, uh

78:19

Google calendar, whatever. And the user

78:21

does that once,

78:23

just once. So once the these are

78:26

connected you can you give the Asian

78:29

client well not not double quot is the

78:33

Asian client

78:34

>> access to those apps. So every time so

78:37

the user next time that connects to the

78:38

chat that's it. You don't need to run

78:40

all this thing again.

78:42

>> It's it's already done. It's it's the

78:45

relationship has been established

78:46

already. So the user will open the chat

78:50

again. You don't need to do all this

78:53

connecting scopes, prompts, consent

78:55

screens. That's it. That's done.

78:59

Eventually, it can die. It depends on

79:02

the policy of your upstream. The refresh

79:03

tokens may expire. In that case, yes,

79:06

you will need to deal with, oh, you need

79:09

to reload again. You do that once and

79:11

that's it.

79:15

>> Yeah. So, just an update. Was they

79:17

finally able to have syntax or my

79:19

version of cloud, I guess. But um yeah

79:21

was able to off and kind of show went

79:24

through the authenticate screen and um

79:27

yeah now I can access my same tools in a

79:29

deployed instance. Um you can do this

79:32

with several providers now, right? Um

79:36

all of which

79:38

any which support uh D as as Carlos was

79:41

saying like any which support DCR static

79:44

client or preconfigured clients um and

79:46

then yeah soon to be client ID metadata

79:49

is the next uh spec I believe that's

79:53

going to be implemented. Um, so yeah,

79:56

you'll have a lot of options to to

79:59

register new clients, new agents, um,

80:02

and access your tools. Um,

80:05

uh, yeah, I don't know if there's

80:07

anything else we turn back to.

80:09

>> Questions?

80:10

>> Okay,

80:12

>> I think that's it. Um, questions and

80:14

feedback, whatever. Um, please reach out

80:17

or

80:19

>> Yeah. I know I the guy I showed in your

80:22

workshop, but to his question, is there

80:25

a a later branch?

80:28

>> Yes.

80:30

>> Yes, absolutely. And let me push that to

80:32

his repository and let me show my final

80:35

state now. And yeah, I'll pull that up

80:38

and link it here.

80:40

>> Also,

80:42

the live demo and build

80:45

a lot

80:46

>> for the first time. Yeah, for the first

80:48

time with a major release this week was

80:50

like we just shipped this like two days

80:52

ago. So, but [snorts] yeah.

80:57

>> All right. Okay.

80:59

>> Uh but yeah, the final state is in my

81:02

branch here. Finish

81:05

finish state. Uh that should have all

81:07

the applied changes and I think I've

81:09

like tweaked uh one of the like order

81:12

history tools, but it's it's pretty

81:14

straightforward. Um there's some other

81:16

tools that are implemented there, but

81:18

yeah, it's it's up to you what you want

81:20

to implement there. Um but yeah, can I

81:24

let's see I don't know if I can I can

81:26

link this in the notes after and um

81:28

>> we'll make sure that you have this uh

81:30

I'll probably actually push it to our

81:32

our upstream workshop branch. So, and

81:35

yeah,

81:36

>> just little disclaimer, the workshop

81:38

app, well, it can suffer some

81:42

disruptions uh as we uh develop more

81:45

things. So, yeah, take that into

81:47

consideration.

81:50

>> All right.

81:52

>> All right. Awesome. Thank you.

81:54

[applause]

81:55

[music]

82:11

Heat.

Interactive Summary

Ask follow-up questions or revisit key timestamps.

The presentation from Auth0/Okta introduces new features and a product launch aimed at solving identity and authorization challenges for AI agents and Microservice Communication Protocol (MCP) servers. Their vision, "to free everyone to safely use any technology," is extended to the AI era, acknowledging the new threats and complexities agents introduce. The core of their approach is built on four pillars: AI needs to know who the user is, AI needs to call APIs on the user's behalf, AI can request user confirmation for risky actions, and AI access must be fine-grained. Key features discussed include Async O (Client Initiated Backchannel Authentication or CIBA), which allows agents to seek user approval for sensitive operations, and Token Vault, which persists refresh tokens and manages token lifetimes for seamless agent interaction with upstream APIs. They also cover how MCP servers are modeled as clients to secure resources. The presentation concludes with a demonstration of implementing these features in a chat agent, showcasing user authentication, token exchange for personalized data access, and asynchronous approval flows to ensure human supervision for critical actions.

Suggested questions

7 ready-made prompts