Skip to main content

Link Session

Sometimes, you may need to enable a front-end single-page application to make independent API calls to Agave API without going through your backend.

Instead of passing Client-Id, Client-Secret, or Account-Token directly to your front-end which can compromises them to replay attacks (allowing a malicious actor to make API request on your behalf or on the behalf of your customer), you can create a temporary, limited-in-scope Link Session and pass that as the Session header to Agave APIs.

When creating a Link Session, you specify both a TTL (time-to-live; in seconds) as well as a set of "scopes" (for example, link:read means read-only access to endpoints under /link, such as /link/account and construction.drawings:write means write access to endpoints under /construction/projects/{id}/drawings and /construction/projects/{id}/drawing-versions). The Session is only valid for the given duration and on endpoints accessible through those scopes.

For more information, see Link Session endpoint.

Example request:

Specifying a "mode":

curl --request POST 'https://api.agaveapi.com/link/sessions' \
--header 'API-Version: 2021-11-21' \
--header 'Content-Type: application/json' \
--header 'Client-Id: 53b2b9cb-9828-5197-8fe8-ed91f623b135' \
--header 'Client-Secret: bFrL8y0VRycIETBhNjHHQcWM75q74V8fBhX766uH' \
--header 'Account-Token: 94JjjPRHAQneWNNOkXP708zta4gRk81u0bOLZUoB' \
--data-raw '{
"name": "file picker session",
"ttl": "1800",
"mode": "construction-file-picker"
}'

Specifying "scopes":

curl --request POST 'https://api.agaveapi.com/link/sessions' \
--header 'API-Version: 2021-11-21' \
--header 'Content-Type: application/json' \
--header 'Client-Id: 53b2b9cb-9828-5197-8fe8-ed91f623b135' \
--header 'Client-Secret: bFrL8y0VRycIETBhNjHHQcWM75q74V8fBhX766uH' \
--header 'Account-Token: 94JjjPRHAQneWNNOkXP708zta4gRk81u0bOLZUoB' \
--data-raw '{
"name": "file picker session",
"ttl": "1800",
"scopes": [
"link:read",
"construction.projects:read",
"construction.documents:read",
"construction.drawings:read",
"construction.specifications:read"
]
}'

Example response:

{
"id": "9c2f9482-210f-43a6-b39b-40ddd5f21676",
"name": "file picker session",
"session": "iJMLvBa5Tuyd0i2ur9FcPlE1NCM1iKzIDjX8HLwl",
"scopes": [
"link:read",
"construction.projects:read",
"construction.documents:read",
"construction.drawings:read",
"construction.specifications:read"
],
"expires_at": "2022-04-11T04:06:26Z"
}

You can pass this session to the Agave File Picker component.