UNPKG

@auth0/auth0-spa-js

Version:

Auth0 SDK for Single Page Applications using Authorization Code Grant Flow with PKCE

189 lines (137 loc) 8.6 kB
![Auth0 SDK for Single Page Applications using Authorization Code Grant Flow with PKCE.](https://cdn.auth0.com/website/sdks/banners/spa-js-banner.png) [![npm version](https://img.shields.io/npm/v/@auth0/auth0-spa-js?style=flat-square&logo=npm&logoColor=CB3837)](https://www.npmjs.com/package/@auth0/auth0-spa-js) [![Codecov](https://img.shields.io/codecov/c/github/auth0/auth0-spa-js)](https://codecov.io/gh/auth0/auth0-spa-js) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/auth0/auth0-spa-js) ![Downloads](https://img.shields.io/npm/dw/@auth0/auth0-spa-js) [![License](https://img.shields.io/:license-mit-blue.svg?style=flat)](https://opensource.org/licenses/MIT) ![CircleCI](https://img.shields.io/circleci/build/github/auth0/auth0-spa-js) 📚 [Documentation](#documentation) - 🚀 [Getting Started](#getting-started) - 💻 [API Reference](#api-reference) - 💬 [Feedback](#feedback) ## Documentation - [Quickstart](https://auth0.com/docs/quickstart/spa/vanillajs/interactive) - our interactive guide for quickly adding login, logout and user information to your app using Auth0. - [Sample app](https://github.com/auth0-samples/auth0-javascript-samples/tree/master/01-Login) - a full-fledged sample app integrated with Auth0. - [FAQs](https://github.com/auth0/auth0-spa-js/blob/main/FAQ.md) - frequently asked questions about auth0-spa-js SDK. - [Examples](https://github.com/auth0/auth0-spa-js/blob/main/EXAMPLES.md) - code samples for common scenarios. - [Docs Site](https://auth0.com/docs) - explore our Docs site and learn more about Auth0. ## Getting Started ### Installation Using [npm](https://npmjs.org) in your project directory run the following command: ```sh npm install @auth0/auth0-spa-js ``` From the CDN: ```html <script src="https://cdn.auth0.com/js/auth0-spa-js/2.24/auth0-spa-js.production.js"></script> ``` ### Configure Auth0 Create a **Single Page Application** in the [Auth0 Dashboard](https://manage.auth0.com/#/applications). > **If you're using an existing application**, verify that you have configured the following settings in your Single Page Application: > > - Click on the "Settings" tab of your application's page. > - Scroll down and click on the "Show Advanced Settings" link. > - Under "Advanced Settings", click on the "OAuth" tab. > - Ensure that "JsonWebToken Signature Algorithm" is set to `RS256` and that "OIDC Conformant" is enabled. Next, configure the following URLs for your application under the "Application URIs" section of the "Settings" page: - **Allowed Callback URLs**: `http://localhost:3000` - **Allowed Logout URLs**: `http://localhost:3000` - **Allowed Web Origins**: `http://localhost:3000` > These URLs should reflect the origins that your application is running on. **Allowed Callback URLs** may also include a path, depending on where you're handling the callback (see below). Take note of the **Client ID** and **Domain** values under the "Basic Information" section. You'll need these values in the next step. ### Configure the SDK Create an `Auth0Client` instance before rendering or initializing your application. You should only have one instance of the client. ```js import { createAuth0Client } from '@auth0/auth0-spa-js'; //with async/await const auth0 = await createAuth0Client({ domain: '<AUTH0_DOMAIN>', clientId: '<AUTH0_CLIENT_ID>', authorizationParams: { redirect_uri: '<MY_CALLBACK_URL>' } }); //or, you can just instantiate the client on its own import { Auth0Client } from '@auth0/auth0-spa-js'; const auth0 = new Auth0Client({ domain: '<AUTH0_DOMAIN>', clientId: '<AUTH0_CLIENT_ID>', authorizationParams: { redirect_uri: '<MY_CALLBACK_URL>' } }); //if you do this, you'll need to check the session yourself try { await auth0.getTokenSilently(); } catch (error) { if (error.error !== 'login_required') { throw error; } } ``` ### Logging In You can then use login using the `Auth0Client` instance you created: ```html <button id="login">Click to Login</button> ``` ```js //redirect to the Universal Login Page document.getElementById('login').addEventListener('click', async () => { await auth0.loginWithRedirect(); }); //in your callback route (<MY_CALLBACK_URL>) window.addEventListener('load', async () => { const redirectResult = await auth0.handleRedirectCallback(); //logged in. you can get the user profile like this: const user = await auth0.getUser(); console.log(user); }); ``` ### Online Access > [!NOTE] > Online Access (Online Refresh Tokens) support via SDKs is currently in Early Access. To request access to this feature, contact your Auth0 representative. > [!WARNING] > Online Refresh Tokens do not currently support resource servers with **Ephemeral Sessions** enabled. Enabling both `allow_online_access` and "Allow for Ephemeral Sessions" on the same resource server results in the authorization server issuing an Online Refresh Token that is then rejected (`invalid_grant`) on the very next refresh. Until Ephemeral Sessions support is added for Online Refresh Tokens, disable "Allow for Ephemeral Sessions" on any resource server used with `refreshTokenMode: RefreshTokenMode.Online`. Set `refreshTokenMode` to `RefreshTokenMode.Online` (together with the required `useRefreshTokens: true` and `useDpop: true`) to use **Online Refresh Tokens** — non-rotating refresh tokens bound to the Auth0 session lifetime. The SDK injects the `online_access` scope and routes renewal through the refresh-token grant. ```js import { createAuth0Client, RefreshTokenMode } from '@auth0/auth0-spa-js'; const auth0 = await createAuth0Client({ domain: '<AUTH0_DOMAIN>', clientId: '<AUTH0_CLIENT_ID>', useRefreshTokens: true, refreshTokenMode: RefreshTokenMode.Online, useDpop: true, authorizationParams: { redirect_uri: '<MY_CALLBACK_URL>' } }); ``` `refreshTokenMode` is a sub-option of `useRefreshTokens`: it defaults to `RefreshTokenMode.Offline` (the rotating refresh tokens described above) and must be set to `RefreshTokenMode.Online` for Online Refresh Tokens. Online mode requires both `useRefreshTokens: true` and `useDpop: true`. See [Online Access](https://github.com/auth0/auth0-spa-js/blob/main/EXAMPLES.md#online-access-online-refresh-tokens) in EXAMPLES.md for the full guide. ### More Examples For comprehensive examples covering various scenarios including logging out, calling APIs, refresh tokens, online access, organizations, passkeys, MFA, DPoP, and more, see the [EXAMPLES.md](https://github.com/auth0/auth0-spa-js/blob/main/EXAMPLES.md) document. ## API Reference Explore API Methods available in auth0-spa-js. - [Configuration Options](https://auth0.github.io/auth0-spa-js/interfaces/Auth0ClientOptions.html) - [Auth0Client](https://auth0.github.io/auth0-spa-js/classes/Auth0Client.html) - [createAuth0Client](https://auth0.github.io/auth0-spa-js/functions/createAuth0Client.html) ## Feedback ### Contributing We appreciate feedback and contribution to this repo! Before you get started, please see the following: - [Auth0's general contribution guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md) - [Auth0's code of conduct guidelines](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md) - [This repo's contribution guide](https://github.com/auth0/auth0-spa-js/blob/main/CONTRIBUTING.md) ### Raise an issue To provide feedback or report a bug, please [raise an issue on our issue tracker](https://github.com/auth0/auth0-spa-js/issues). ### Vulnerability Reporting Please do not report security vulnerabilities on the public GitHub issue tracker. The [Responsible Disclosure Program](https://auth0.com/whitehat) details the procedure for disclosing security issues. ## What is Auth0? <p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://cdn.auth0.com/website/sdks/logos/auth0_dark_mode.png" width="150"> <source media="(prefers-color-scheme: light)" srcset="https://cdn.auth0.com/website/sdks/logos/auth0_light_mode.png" width="150"> <img alt="Auth0 Logo" src="https://cdn.auth0.com/website/sdks/logos/auth0_light_mode.png" width="150"> </picture> </p> <p align="center"> Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout <a href="https://auth0.com/why-auth0">Why Auth0?</a> </p> <p align="center"> This project is licensed under the MIT license. See the <a href="https://github.com/auth0/auth0-spa-js/blob/main/LICENSE"> LICENSE</a> file for more info. </p>