Authentication

ArcGIS REST JS includes a comprehensive set of classes for managing authentication. Each helper corresponds with one of the main types of authentication discussed in the Security and authentication guide.

The classes for each type of authentication are:

These managers handle much of the complexity of dealing with authentication including:

  • Performing OAuth authentication workflows.
  • Automatically refreshing credentials when they expire.
  • Obtaining credentials for a specific instance of ArcGIS Server.
  • Passing credentials between clients and servers.

How authentication managers work

Each authentication manager has several static methods to help construct the manager object. These static methods are the preferred way to create the manager objects and implement specific workflows and patterns.

The general workflow is:

  1. Create or .
  2. Create the manager using the correct helper method for your authentication workflow.
  3. Access services with the authentication parameter.

API key manager

An instance of ApiKeyManager can be created with the ApiKeyManager.fromKey() method.

1
2
3
import { ApiKeyManager } from "@esri/arcgis-rest-request";

const accessToken = ApiKeyManager.fromKey("YOUR_ACCESS_TOKEN");

Example

Use an API key to authenticate a request

To quickly set up authentication in your application, use an API key. When using an , make sure that it is properly scoped to the services you are accessing.

Because of their simplicity, API keys can be passed directly to the authentication parameter.

  1. Reference the library.
  2. Get an access token from .
  3. Set the access token.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { ApiKeyManager } from "@esri/arcgis-rest-request";
import { geocode } from "@esri/arcgis-rest-geocoding";

geocode({
  address: "1600 Pennsylvania Ave",
  postal: 20500,
  countryCode: "USA",
  authentication: ApiKeyManager.fromKey("YOUR_ACCESS_TOKEN") // API key scoped to access the geocoding service
});

ArcGIS identity manager

An instance of ArcGISIdentityManager can be created with several different methods including helper methods for OAuth 2.0 workflows.

1
2
3
4
5
6
7
8
import { ArcGISIdentityManager } from "@esri/arcgis-rest-request";

ArcGISIdentityManager.beginOAuth2({
  clientId: "YOUR_CLIENT_ID",
  redirectUri: "YOUR_REDIRECT_URI"
}).then((manager) => {
  console.log(manager);
});

Example

Implement user authentication with OAuth 2.0

When your app requires access to owned by users or if you are distributing your app through ArcGIS Marketplace, you should implement with OAuth 2.0.

The ArcGIS REST JS request package includes the ArcGISIdentityManager to authenticate users with their ArcGIS Online or ArcGIS Enterprise accounts. The ArcGISIdentityManager also includes helper methods to simplify the authentication process and manage credentials once they are obtained.

  1. Reference the library.
  2. Go to your .
  3. Create a set of OAuth 2.0 credentials.
  4. Configure the redirect URL for your application.
  5. Get the client ID and redirect URI for your application.
  6. Set the client ID.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { ArcGISIdentityManager } from "@esri/arcgis-rest-request";

// register your own app to create a unique clientId
const clientId = "abc123"

// send the user to the authorization page
ArcGISIdentityManager.beginOAuth2({
  clientId,
  redirectUri: 'https://yourapp.com/authenticate.html'
})
  .then(authenticationManager => {
    geocode({
      address: "1600 Pennsylvania Ave",
      postal: 20500,
      countryCode: "USA",
      authentication: authenticationManager
    })
  })

After the user authorizes your application they will be taken to the page specified by the redirectUrl which should complete the OAuth 2.0 process.

1
2
3
4
5
6
7
8
9
10
11
12
13
import { ArcGISIdentityManager } from "@esri/arcgis-rest-request";

const clientId = "abc123"

/**
 * after the user authorizes the application they will be redirected to
 * the page defined in redirectUrl which will need to complete the
 * authentication process.
 **/
ArcGISIdentityManager.completeOAuth2({
  clientId,
  redirectUri: 'https://yourapp.com/authenticate.html'
});

Application credential manager

This manager is used to implement . An instance of ApplicationCredentialsManager can be created with the ApplicationCredentialsManager.fromCredentials method:

1
2
3
4
5
6
7
8
9
import { ApplicationCredentialsManager } from "@esri/arcgis-rest-request";

const appManager = ApplicationCredentialsManager.fromCredentials({
  clientId: "YOUR_CLIENT_ID",
  clientSecret: "YOUR_CLIENT_SECRET"
});
appManager.refreshToken().then((manager) => {
  console.log(manager);
});

Example

  1. Reference the library.
  2. Go to your .
  3. Create a set of OAuth 2.0 credentials.
  4. Get the client ID and client secret for your application.
  5. Create an instance of ApplicationCredentialsManager with the client ID and client secret.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { ApplicationCredentialsManager } from "@esri/arcgis-rest-request";
import { geocode } from "@esri/arcgis-rest-geocoding";

const appManager = ApplicationCredentialsManager.fromCredentials({
  clientId: "YOUR_CLIENT_ID",
  clientSecret: "YOUR_CLIENT_SECRET"
});
appManager.refreshToken().then((manager) => {
  geocode({
    address: "1600 Pennsylvania Ave",
    postal: 20500,
    countryCode: "USA",
    authentication: manager
  })
});

Access services with authentication

The authentication option on most methods accepts one of the three manager classes. Use the authentication to make a request to a service.

1
2
3
4
5
6
7
8
9
10
11
import { ApiKeyManager } from "@esri/arcgis-rest-request";
import { solveRoute } from "@esri/arcgis-request-routing";

solveRoute({
  stops: [
    [-117.195677, 34.056383],
    [-117.918976, 33.812092],
   ],
   authentication: ApiKeyManager.fromKey("YOUR_ACCESS_TOKEN")
})
  .then(response)

If you have an from another source, you can pass it directly to the authentication option; however this is not recommended. If you directly pass an from or , ArcGIS REST JS will skip most of its error handling (which is a key feature), so this should be used with caution.

1
2
3
4
5
6
7
8
9
10
import { solveRoute } from "@esri/arcgis-request-routing";

solveRoute({
  stops: [
    [-117.195677, 34.056383],
    [-117.918976, 33.812092],
   ],
   authentication: "YOUR_ACCESS_TOKEN"
})
  .then(response)

Refresh a credential

Both ArcGISIdentityManager and ApplicationCredentialsManager generate short lived credentials by default. Both of these classes have a canRefresh property that indicates if the credentials can be refreshed after they expire. Credentials can be refreshed by calling the refreshCredentials method.

1
2
3
4
5
6
7
8
9
// assuming `manager` is an instance of `ArcGISIdentityManager`
// or `ApplicationCredentialsManager`.
if(manager.canRefresh) {
  manager.refreshCredentials().then(()=> {
    console.log("Credentials refreshed");
  }).catch((error) => {
    console.log("Error refreshing credentials");
  })
}

Tokens are also automatically refreshed in the following cases if the canRefresh property is true:

  • If a token is used for a request 5 minutes or less before a token expires, the token will be refreshed and the new token will be used for the request.
  • If a service responds with an invalid token error, the token will be refreshed and the request retried with the new token.

You can also use canRefresh and refreshCredentials() to periodically refresh the credentials while the user is using your application.

1
2
3
4
5
6
7
8
9
10
// ideally this would run sometime after your application loads
if (manager.canRefresh) {
  // refresh the credentials to ensure we have a fresh access token which will expire in 30 minutes
  manager.refreshCredentials().then(()=>{
    // once we have a fresh token set a timeout to refresh every 25 minutes.
    setTimeout(()=>{
      manager.refreshCredentials()
    }, 25 * 60000)
  })
}

Handle errors

When using ArcGISIdentityManager and ApplicationCredentialsManager ArcGIS REST JS will throw additional errors related to managing the token and token lifecycle.

These errors provide more insight into the token lifecycle and are discussed more in the error handling topic.

Tutorials

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.

You can no longer sign into this site. Go to your ArcGIS portal or the ArcGIS Location Platform dashboard to perform management tasks.

Your ArcGIS portal

Create, manage, and access API keys and OAuth 2.0 developer credentials, hosted layers, and data services.

Your ArcGIS Location Platform dashboard

Manage billing, monitor service usage, and access additional resources.

Learn more about these changes in the What's new in Esri Developers June 2024 blog post.

Close