@simulacrum/auth0-simulator
Version:
Run local instance of Auth0 API for local development and integration testing
105 lines (68 loc) • 4.5 kB
Markdown
# Auth0 simulator
Read about this simulator on our blog: [Simplified Local Development and Testing with Auth0 Simulation](https://frontside.com/blog/2022-01-13-auth0-simulator/).
## Table of Contents
- [Auth0 simulator](#auth0-simulator)
- [Table of Contents](#table-of-contents)
- [Quick Start](#quick-start)
- [Using Default User](#using-default-user)
- [Code](#code)
- [Example](#example)
- [Configuration](#configuration)
- [Options](#options)
- [Rules](#rules)
- [Endpoints](#endpoints)
Please read the [main README](../../README.md) for more background on simulacrum.
The auth0 simulator has been initially written to mimic the responses of a real auth0 server that is called from auth0 client libraries like [auth0/react](https://auth0.com/docs/quickstart/spa/react/01-login) and [auth0-spa-js](https://github.com/auth0/auth0-spa-js) that use the OpenID [authorization code flow](https://developer.okta.com/docs/concepts/oauth-openid/).
If this does not meet your needs then please create a github issue to start a conversation about adding new OpenID flows.
## Quick Start
This quick start assumes you have your own app with Auth0.
> [!IMPORTANT]
> The Auth0 clients expect the server to be served as `https`, and will throw an error if it is served as `http`. Currently, we rely on a certificate available in the home directory. On first run, you will see instructions on how to set up this certificate through `mkcert`.
### Using Default User
You may start a server directly from the command line.
```bash
npx @simulacrum/auth0-simulator # this will start a simulation server at http://localhost:4400
```
Given no further input, it will use the default values as below. This will point your app at the simulation instead of the Auth0 endpoint.
```json
{
"domain": "https://localhost:4400",
"clientId": "00000000000000000000000000000000",
"audience": "https://thefrontside.auth0.com/api/v1/"
}
```
You now have a running auth0 server!
### Code
You may import and run the simulation server in a script.
```js
import { simulation } from "@simulacrum/auth0-simulator";
const app = simulation();
app.listen(4400, () =>
console.log(`auth0 simulation server started at https://localhost:4400`)
);
```
By passing an `initialState`, you may control the initial users in the store.
### Example
The folks at Auth0 maintain many samples such as [github.com/auth0-samples/auth0-react-samples](https://github.com/auth0-samples/auth0-react-samples). Follow the instructions to run the sample, set the configuration in `auth_config.json` to match the defaults as noted above, and run the Auth0 simulation server with `npx auth0-simulator`.
## Configuration
The Auth0 Simulator uses [cosmiconfig](https://github.com/cosmiconfig/cosmiconfig) to load the configuration options. This provides many options in where to place your configuration. Using the module name, `auth0Simulator`, you could, for example, set your configuration in a `.auth0Simulatorrc.json` file.
### Options
The `options` field supports the [auth0 configuration fields](https://auth0.com/docs/quickstart/spa/vanillajs#configure-auth0). The option fields should match the fields in the client application that is calling the auth0 server.
The `scope` also accepts an array of objects containing `clientId`, `scope` and optionally `audience` to enable dynamic scopes from a single simulator. This should allow multiple clients to all use the same simulator. Additionally, setting the `clientId: "default"` will enable a default fallback scope so every client does not need to be included.
An optional [`rulesDirectory` field](#rules) can specify a directory of [auth0 rules](https://auth0.com/docs/rules) code files, more on this [below](#rules).
### Rules
It is possible to run [auth0 rules](https://auth0.com/docs/rules) if the compiled code files are on disk and all located in the same directory.
Set the `rulesDirectory` of the [options field](#options) to a path relative to your current working directory.
For example, a [sample rules directory](./test/rules) is in the auth0 package for testing.
If we want to run these rules files then we would add the `rulesDirectory` field to the [options object](#options).
## Endpoints
The following endpoints have been assigned handlers:
- `/authorize`
- `/login`
- `/u/login`
- `/usernamepassword/login`
- `/login/callback`
- `/oauth/token`
- `/v2/logout`
- `/.well-known/jwks.json`
- `/.well-known/openid-configuration`