YAML Scopes
As a web agent app developer, you will write agent backends that handle requests.
These requests can come from your own frontend code, or from entirely separate systems, depending on how your app or service works.
Three entries in your app’s .yml file allow you to control access to your backend:
scopedefines your own custom capabilities on your app.grantdefines which agents gets which of these capabilities.audiencedefines auto-created token(s) given to your app when launched.
Note that we use the term party to refer to the agent that has installed and launched your app.
Example
Let’s say your app is a game which saves its state in the agent backend. In that
case you might provide a route /saveGame and another route /retrieveGame that
can be called by your own frontend code.
But you don’t want just anyone to be able to do this! So you use the .yml entries
to:
- Define your app’s custom capabilities (
scope) - Grant them to same agent as launched your app (
grant) - Ensure that when a party launches your app it gets a token that it can put in the
X-Tabserver-Tokenheader when making those two calls (audience)
Scope
This is how you define your own capabilities:
scope:
getGame:
description: Can get the game object
setGame:
description: Can set the game object
Note that these capabilities exist only on your app. When the token is generated
later, it includes your app URL in the src attribute - and this has to match the
origin header in the request, if made from a browser.
Grant
This ensures that tokens signed by the same web agent as launched the app can make the request whose token includes the custom capabilities:
grant:
${party}:
- getGame
- setGame
The variable ${party} is of course different for every agent that installs and
subsequently launches the app.
That’s why we are not using a constant such as my.agent.id which would be
far more restrictive.
Audience
When your app is launched, it is automatically given one token per agent whose name
is provided under the audience property.
In this case, we give the launched app a token for the same agent as launched the app (i.e. the party), which requests the two capabilities on this app.
audience:
${party}:
${source}: getGame setGame
The variable ${source} is simply the URL of the HTML file that includes this YAML
file.
You could use the literal URL if it’s known in advance. For example:
audience:
${party}:
https://some.web.site/some/page.html: getGame setGame