Select an Application Type of Native or Single-Page App, depending on your application type.
Add an Allowed Callback URL of {yourCallbackUrl}. Your callback URL format will vary depending on your application type and platform. For details about the format for your application type and platform, see our Native/Mobile Quickstarts and Single-Page App Quickstarts.
Make sure the Application’s Grant Types include Authorization Code. To learn how, read Update Grant Types.
If you want your Application to be able to use Refresh Tokens, make sure the Application’s Grant Types include Refresh Token. To learn how, read Update Grant Types. To learn more about Refresh Tokens, read Refresh Tokens.
// See https://developer.android.com/reference/android/util/Base64// Import the Base64 class// import android.util.Base64;SecureRandom sr = new SecureRandom();byte[] code = new byte[32];sr.nextBytes(code);String verifier = Base64.encodeToString(code, Base64.URL_SAFE | Base64.NO_WRAP | Base64.NO_PADDING);
Once you’ve created the code_verifier and the code_challenge, you must get the user’s authorization. This is technically the beginning of the , and this step may include one or more of the following processes:* Authenticating the user;
* Redirecting the user to an to handle authentication;
* Checking for active Single Sign-on (SSO) sessions;
* Obtaining user consent for the requested permission level, unless consent has been previously given.To authorize the user, your app must send the user to the authorization URL, including the code_challenge you generated in the previous step and the method you used to generate the code_challenge.
Note that for authorizing a user when calling a custom API, you:
must include an parameter
can include additional scopes supported by the target API
Parameter Name
Description
response_type
Denotes the kind of credential that Auth0 will return (code or token). For this flow, the value must be code.
code_challenge
Generated challenge from the code_verifier.
code_challenge_method
Method used to generate the challenge (e.g., S256). The PKCE spec defines two methods, S256 and plain, the former is used in this example and is the only one supported by Auth0 since the latter is discouraged.
client_id
Your application’s Client ID. You can find this value in your Application Settings.
redirect_uri
The URL to which Auth0 will redirect the browser after authorization has been granted by the user. The Authorization Code will be available in the code URL parameter. You must specify this URL as a valid callback URL in your Application Settings.
Warning: Per the OAuth 2.0 Specification, Auth0 removes everything after the hash and does not honor any fragments.
scope
The scopes for which you want to request authorization. These must be separated by a space. You can request any of the standard OpenID Connect (OIDC) scopes about users, such as profile and email, custom claims conforming to a namespaced format, or any scopes supported by the target API (e.g., read:contacts). Include offline_access to get a (make sure that the Allow Offline Access field is enabled in the Application Settings).
audience
The unique identifier of the API your mobile app wants to access. Use the Identifier value on the Settings tab for the API you created as part of the prerequisites for this tutorial.
state
(recommended) An opaque arbitrary alphanumeric string your app adds to the initial request that Auth0 includes when redirecting back to your application. To see how to use this value to prevent cross-site request forgery (CSRF) attacks, see Mitigate CSRF Attacks With State Parameters.
organization
(optional) ID of the organization to use when authenticating a user. When not provided, if your application is configured to Display Organization Prompt, the user will be able to enter the organization name when authenticating.
invitation
(optional) Ticket ID of the organization invitation. When inviting a member to an Organization, your application should handle invitation acceptance by forwarding the invitation and organization key-value pairs when the user accepts the invitation.
As an example, your HTML snippet for your authorization URL when calling an API might look like:
Now that you have an Authorization Code, you must exchange it for tokens. Using the extracted Authorization Code (code) from the previous step, you will need to POST to the token URL sending along the code_verifier.
The cryptographically-random key that was generated in the first step of this tutorial.
code
The authorization_code retrieved in the previous step of this tutorial.
client_id
Your application’s Client ID. You can find this value in your Application Settings.
redirect_uri
The valid callback URL set in your Application settings. This must exactly match the redirect_uri passed to the authorization URL in the previous step of this tutorial. Note that this must be URL encoded.
ID tokens contain user information that must be decoded and extracted.Access tokens are used to call the Auth0 Authentication API’s /userinfo endpoint or another API. If you are calling your own API, the first thing your API will need to do is verify the Access token.Refresh tokens are used to obtain a new or after the previous one has expired. The refresh_token will only be present in the response if you included the offline_access scope and enabled Allow Offline Access for your API in the Dashboard.
Refresh tokens must be stored securely since they allow a user to remain authenticated essentially forever.
To call your API from a native/mobile application, the application must pass the retrieved Access Token as a Bearer token in the Authorization header of your HTTP request.
You have already received a refresh token if you’ve been following this tutorial and completed the following:
configured your API to allow offline access
included the offline_access scope when you initiated the authentication request through the authorize endpoint.
You can use the to get a new access token. Usually, a user will need a new access token only after the previous one expires or when gaining access to a new resource for the first time. It’s bad practice to call the endpoint to get a new access token every time you call an API, and Auth0 maintains rate limits that will throttle the amount of requests to the endpoint that can be executed using the same token from the same IP.To refresh your token, make a POST request to the /oauth/token endpoint in the Authentication API, using grant_type=refresh_token.
Your application’s Client ID. You can find this value in your Application Settings.
refresh_token
The refresh token to use.
scope
(optional) A space-delimited list of requested scope permissions. If not sent, the original scopes will be used; otherwise you can request a reduced set of scopes. Note that this must be URL encoded.
If all goes well, you’ll receive an HTTP 200 response with a payload containing a new access_token, its lifetime in seconds (expires_in), granted scope values, and token_type. If the scope of the initial token included openid, then the response will also include a new id_token:
You can use Actions to change the returned scopes of Access Tokens and/or add claims to Access and ID Tokens. (To learn more about Actions, read Auth0 Actions. ) To do so, add the following Action, which will run after the user authenticates:
Copy
Ask AI
exports.onExecutePostLogin = async (event, api) => { // Add custom claims to Access Token and ID Token api.accessToken.setCustomClaim('https://foo/bar', 'value'); api.idToken.setCustomClaim('https://fiz/baz', 'some other value'); // Modify the scope of the Access Token api.accessToken.addScope('foo'); api.accessToken.addScope('bar');};
Scopes will be available in the token after the Action has run.