Authorization
A TokenSet
is required to access protected endpoints.
Integration tokens do not expire and therefore dont have a refresh_token
.
However be sure to store the the refresh_token
for person token sets.
You are required to provide both when making requests on behalf of a person.
The SDK provides a TokenSet
interface and TokenSetType
enum (seen below) to help you manage your tokens.
export type TokenSet {
access_token: string;
refresh_token?: string;
expires_in?: number;
type: TokenSetType;
}
export enum TokenSetType = {
Integration = 'integration',
Person = 'person'
}
User Authentication
To authenticate a user first build your login url. This url will redirect the user to the Edlink login page.
Login URLs are structured as follows:
https://ed.link/sso/login
?client_id=[...]
&redirect_uri=[...]
&state=[...]
&response_type=code
The SDK provides a utility function that will build the login url for you.
edlink.loginUrl({ redirect_uri: 'https://oauthdebugger.com/debug' });
Optionally you may provide a state
parameter for Edlink to passback to you upon authentication of the user.
edlink.loginUrl({
redirect_uri: 'https://oauthdebugger.com/debug',
state
});
Once the user has logged in they will be redirected back to your application with a code
query parameter.
You can then exchange this code for a token set. If you provided a state
parameter you will also recieve it back in the redirect.
Provide the value of the code
parameter with the matching redirect_uri
to recieve a token set.
const person_token_set = await edlink.auth.grant({
code: '[...]',
redirect_uri: 'https://oauthdebugger.com/debug'
});
Store this entire object securely. You will require more than just the access_token
You can now make requests on behalf of this user
const profile = await edlink.use(person_token_set).my.profile();
Integration Authentication
In order to authenticate as an integration you must go to the edlink dashboard and copy the access_token
from the integration overview.
You can then create a TokenSet with this token and use it to make requests on behalf of the integration.
const integration_token_set = {
access_token: '[...]',
type: TokenSetType.Integration
};
const school = await edlink.use(integration_token_set).schools.fetch('3a95a779-0ed1-499b-a352-9ea30d0bd5ea');