Authentication
Use kittl.auth to run OAuth from a sandboxed extension without exposing secrets in the client.
Setup
Declare your OAuth provider in the extension manifest.
Example:
{
oauthProviders: {
myProvider: {
client_id: 'client_id_from_provider',
scope: 'example:read,example:write',
authorization_url: 'https://myAuthProvider.com/oauth2/authorize',
access_type: 'offline',
token_url: 'https://myAuthProvider.com/oauth2/token',
},
},
}
Trigger the auth flow
const provider = 'myProvider';
const { code, code_verifier } = await kittl.auth.startAuth({
provider,
// Recommended when your provider supports OAuth 2.1 / PKCE
generatePKCE: true,
});
// Exchange the auth code for tokens
const resp = await kittl.auth.exchangeCode({
code,
provider,
code_verifier,
});
// resp contains the provider token response payload
Restore token on reload
On extension mount, check if a token is already stored:
const provider = 'myProvider';
const token = await kittl.auth.getAuthToken({ provider });
if (token) {
// Already authenticated
}
Logout
await kittl.auth.logout({ provider: 'myProvider' });
Omit provider to clear all provider tokens for the extension.
Backend proxy and provider limitations
If your provider does not support PKCE, run a backend proxy for token exchange so your client secret stays server-side.
In general:
- Prefer OAuth with PKCE (
generatePKCE: true) - Keep secrets off the extension client
- Use your backend for provider-specific token handling when needed