Confidential and Public Applications
According to the OAuth 2.0 specification, applications can be classified as either confidential or public. The main difference relates to whether or not the application is able to hold credentials (such as a client ID and secret) securely. This affects the type of authentication the applications can use.
When you create an application using the Dashboard, Auth0 will ask you what Auth0 application type you want to assign to the new application and use that information to determine whether the application is confidential or public.
To learn more, read Check if Application is Confidential or Public.
Confidential applications can hold credentials in a secure way without exposing them to unauthorized parties. They require a trusted backend server to store the secret(s).
Confidential applications use a trusted backend server and can use grant types that require specifying their Client ID and Client Secret (or alternative registered credentials) for authentication when calling the Auth0 Authentication API Get Token endpoint. Confidential applications can use Client Secret Post, Client Secret Basic, or Private Key JWT authentication methods.
These are considered confidential applications:
A machine-to-machine (M2M) application that uses the Client Credentials Flow
Because confidential applications are capable of holding secrets, you can have ID tokens issued to them that have signed in one of two ways:
Symmetrically, using their client secret (
Asymmetrically, using a private key (
Public applications cannot hold credentials securely.
Public applications can only use grant types that do not require the use of their client secret. They can't send a client secret because they can't maintain the confidentiality of the credentials required.
These are public applications:
A native desktop or mobile application that uses the Authorization Code Flow with PKCE
Because public applications are unable to hold secrets, ID tokens issued to them must be:
Signed asymmetrically using a private key (
Verified using the public key corresponding to the private key used to sign the token