diff --git a/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx b/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx index ddb0faf691..7f6c43b3a8 100644 --- a/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx +++ b/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx @@ -2,6 +2,10 @@ title: 'ASP.NET Core Web API' description: 'Add Auth0 JWT authentication to an ASP.NET Core Web API with protected endpoints' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This Quickstart is currently in **Beta**. We'd love to hear your feedback! diff --git a/main/docs/quickstart/backend/fastapi/index.mdx b/main/docs/quickstart/backend/fastapi/index.mdx index 72105f8154..44da07bec1 100644 --- a/main/docs/quickstart/backend/fastapi/index.mdx +++ b/main/docs/quickstart/backend/fastapi/index.mdx @@ -4,6 +4,10 @@ description: 'Add Auth0 JWT authentication to an FastAPI with protected endpoint sidebarTitle: FastAPI API title: 'FastAPI API' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + **Using AI to integrate Auth0?** Add this prompt to Cursor, Windsurf, Copilot, Claude Code or your favourite AI-powered IDE to speed up development. diff --git a/main/docs/quickstart/backend/fastify/index.mdx b/main/docs/quickstart/backend/fastify/index.mdx index 7813b23480..146c5e1aff 100644 --- a/main/docs/quickstart/backend/fastify/index.mdx +++ b/main/docs/quickstart/backend/fastify/index.mdx @@ -5,6 +5,10 @@ sidebarTitle: Fastify API title: Protect Your Fastify API --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 API authentication automatically in minutes using [agent skills](https://agentskills.io/home). diff --git a/main/docs/quickstart/backend/golang/index.mdx b/main/docs/quickstart/backend/golang/index.mdx index ddb5673612..f478f67b43 100644 --- a/main/docs/quickstart/backend/golang/index.mdx +++ b/main/docs/quickstart/backend/golang/index.mdx @@ -6,6 +6,9 @@ title: Protect Your Go API --- import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + export const envSnippet = `# The URL of your Auth0 Tenant Domain. # If you're using a Custom Domain, set this to that value instead. @@ -887,7 +890,7 @@ Now that you have a protected API, consider exploring: - **[Role-Based Access Control](https://auth0.com/docs/manage-users/access-control/rbac)** — Implement fine-grained permissions - **[Access Token Best Practices](https://auth0.com/docs/secure/tokens/access-tokens)** — Learn about token security - **[Monitor Your API](https://auth0.com/docs/deploy-monitor/logs)** — Set up logging and monitoring -- **[Production Checklist](https://auth0.com/docs/deploy-monitor/production-checks)** — Pre-launch security review +- **[Production Readiness Checks](https://auth0.com/docs/deploy-monitor/pre-deployment-checks/production-checks-best-practices)** — Pre-launch security review --- diff --git a/main/docs/quickstart/backend/java-spring-security5/index.mdx b/main/docs/quickstart/backend/java-spring-security5/index.mdx index 93086d629c..99e66342b9 100644 --- a/main/docs/quickstart/backend/java-spring-security5/index.mdx +++ b/main/docs/quickstart/backend/java-spring-security5/index.mdx @@ -3,6 +3,10 @@ title: "Java Springboot API" description: "Add Auth0 JWT authentication to a Spring Boot API with protected endpoints" --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This Quickstart is currently in **Beta**. We'd love to hear your feedback! diff --git a/main/docs/quickstart/backend/python/index.mdx b/main/docs/quickstart/backend/python/index.mdx index d0813a460d..620deb9700 100644 --- a/main/docs/quickstart/backend/python/index.mdx +++ b/main/docs/quickstart/backend/python/index.mdx @@ -3,6 +3,10 @@ title: 'Flask API' description: 'This guide demonstrates how to integrate Auth0 with any new or existing Python API built with Flask.' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + **Prerequisites:** Before you begin, ensure you have the following installed: diff --git a/main/docs/quickstart/native/android-facebook-login/index.mdx b/main/docs/quickstart/native/android-facebook-login/index.mdx index 7a5e7e2020..e861c35582 100644 --- a/main/docs/quickstart/native/android-facebook-login/index.mdx +++ b/main/docs/quickstart/native/android-facebook-login/index.mdx @@ -4,6 +4,10 @@ sidebarTitle: Android Facebook Login title: Add Native Facebook Login to Your Android Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + ## Before You Start Complete these prerequisites before following this quickstart: diff --git a/main/docs/quickstart/native/android/index.mdx b/main/docs/quickstart/native/android/index.mdx index af2c837c2b..9da633074f 100644 --- a/main/docs/quickstart/native/android/index.mdx +++ b/main/docs/quickstart/native/android/index.mdx @@ -1,540 +1,544 @@ ---- -mode: wide -sidebarTitle: Android -title: Add Login to Your Android Application using the Auth0.Android SDK ---- - - - -If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). - -**Install:** - -```bash -npx skills add auth0/agent-skills --skill auth0-quickstart --skill auth0-android -``` - -**Then ask your AI assistant:** - -```text -Add Auth0 authentication to my Android app -``` - -Your AI assistant will automatically create your Auth0 application, fetch credentials, add the Auth0 Android SDK dependency, configure manifest placeholders, and implement login/logout flows. [Full agent skills documentation →](/quickstart/agent-skills) - - - -## Get Started - - - - Create a new Android project for this quickstart. - - **In Android Studio:** - - 1. **File** → **New** → **New Project** - 2. Select **Phone and Tablet** → **Empty Activity** template - 3. Configure your project: - * **Name**: `Auth0-Android-Sample` - * **Package name**: `com.auth0.samples.android` - * **Language**: **Kotlin** - * **Minimum SDK**: **API 24 (Android 7.0)** - * **Build configuration language**: **Kotlin DSL** - 4. Click **Finish** - - - This creates a modern Android app with Kotlin and Gradle Kotlin DSL, following current Android development best practices. - - - - - Add the Auth0 Android SDK to your project using Gradle. - - **Update your app-level `build.gradle.kts` file:** - - ```kotlin app/build.gradle.kts lines - dependencies { - // Auth0 SDK - implementation("com.auth0.android:auth0:3.14.0") - } - ``` - - **Add manifest placeholders in your app-level `build.gradle.kts`:** - - ```kotlin app/build.gradle.kts lines - android { - defaultConfig { - // Add these manifest placeholders - manifestPlaceholders += mapOf( - "auth0Domain" to "@string/com_auth0_domain", // this will be set in the next step - "auth0Scheme" to "https" - ) - } - } - - ``` - - **Add Internet permission to `AndroidManifest.xml`:** - - ```xml app/src/main/AndroidManifest.xml lines - - - - - ``` - - - The Auth0 SDK automatically handles dependency resolution and includes secure token storage capabilities. - - - - - Next up, you need to create a new app on your Auth0 tenant and add the configuration to your Android project. - - First, prepare your `app/src/main/res/values/strings.xml` file with placeholder values: - - ```xml app/src/main/res/values/strings.xml - - - {yourDomain} - YOUR_AUTH0_CLIENT_ID - https - - ``` - - 1. Head to the [Auth0 Dashboard](https://manage.auth0.com/dashboard/) - 2. Click on **Applications** > **Applications** > **Create Application** - 3. In the popup, enter a name for your app, select `Native` as the app type and click **Create** - 4. Switch to the **Settings** tab on the Application Details page - 5. Replace `{yourDomain}` and `YOUR_AUTH0_CLIENT_ID` in the `strings.xml` file with the **Domain** and **Client ID** values from the dashboard - - Finally, on the **Settings** tab of your Application Details page, configure the following URLs: - - **Allowed Callback URLs:** - ``` - https://{yourDomain}/android/PACKAGE_NAME/callback - ``` - - **Allowed Logout URLs:** - ``` - https://{yourDomain}/android/PACKAGE_NAME/callback - ``` - - Replace `{yourDomain}` with your actual Auth0 domain (e.g., `dev-abc123.us.auth0.com`). - - - **Allowed Callback URLs** are a critical security measure to ensure users are safely returned to your application after authentication. Without a matching URL, the login process will fail, and users will be blocked by an Auth0 error page instead of accessing your app. - - **Allowed Logout URLs** are essential for providing a seamless user experience upon signing out. Without a matching URL, users will not be redirected back to your application after logout and will instead be left on a generic Auth0 page. - - The URL scheme includes your package name (`com.auth0.samples.android`) to ensure the callback is routed to your specific app. - - - - **Important**: Ensure the package name in your callback URLs matches your `applicationId` in `build.gradle.kts`. If authentication fails, verify these values are identical. - - - - When using the `https` scheme (as configured above), you must set up Android App Links so that Android routes the callback URL directly to your app instead of opening it in a browser. See the **Configure Android App Links** section under [Troubleshooting & Advanced](#troubleshooting--advanced) below. - - - - - Create an Auth0 instance in your Activity to communicate with Auth0. - - **In your `MainActivity.kt`:** - - ```kotlin MainActivity.kt lines - import com.auth0.android.Auth0 - import com.auth0.android.authentication.AuthenticationException - import com.auth0.android.callback.Callback - import com.auth0.android.provider.WebAuthProvider - import com.auth0.android.result.Credentials - - class MainActivity : ComponentActivity() { - private lateinit var auth0: Auth0 - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - // Initialize Auth0 - auth0 = Auth0.getInstance( - getString(R.string.com_auth0_client_id), - getString(R.string.com_auth0_domain) - ) - } - } - ``` - - - The Auth0 instance is initialized with your client ID and domain from the `strings.xml` file you configured earlier. This instance will be used for all authentication operations. - - - - - - **Implement Login:** Use WebAuthProvider to launch the universal login page. - - Add these methods to your `MainActivity`: - - - - ```kotlin MainActivity.kt lines - private fun login() { - WebAuthProvider.login(auth0) - .withScheme("https") - .withScope("openid profile email offline_access") - .start(this, object : Callback { - override fun onSuccess(credentials: Credentials) { - // Save the credentials - // User is authenticated - } - - override fun onFailure(exception: AuthenticationException) { - // Handle error cases - } - }) - } - ``` - - - - ```kotlin MainActivity.kt lines - private fun login() { - lifecycleScope.launch { - try { - val credentials = WebAuthProvider.login(auth0) - .withScheme("https") - .withScope("openid profile email offline_access") - .await(this@MainActivity) - // Save the credentials - // User is authenticated - } catch (exception: AuthenticationException) { - // Handle error - } - } - } - ``` - - - - **Implement Logout:** Use WebAuthProvider to clear the user's session. - - - - ```kotlin MainActivity.kt lines - private fun logout() { - WebAuthProvider.logout(auth0) - .withScheme("https") - .start(this, object : Callback { - override fun onSuccess(result: Void?) { - // Clear saved credentials - // User is logged out - } - - override fun onFailure(exception: AuthenticationException) { - // Handle error - } - }) - } - ``` - - - - ```kotlin MainActivity.kt lines - private fun logout() { - lifecycleScope.launch { - try { - WebAuthProvider.logout(auth0) - .withScheme("https") - .await(this@MainActivity) - // Clear saved credentials - // User is logged out - } catch (exception: AuthenticationException) { - // Handle error - } - } - } - ``` - - - - - The `login()` and `logout()` methods should be called when the user taps the respective buttons in your UI. The code uses `this` (referring to the Activity) as the context parameter, which is required for WebAuthProvider to launch Chrome Custom Tabs and handle the authentication flow. - - - - - Build and run your Android application. - - **In Android Studio:** - - ```shellscript - # Sync project with Gradle files (or use Android Studio's "Sync Now") - ./gradlew clean build - - # Build and install on connected device or emulator - ./gradlew installDebug - - # Or run directly from Android Studio - # Click the "Run" button or press Shift+F10 - ``` - - **Expected flow:** - - 1. App launches with "Log In" button and shield icon - 2. Tap "Log In" → Chrome Custom Tab opens → Complete login - 3. Returns to app automatically - 4. Success!! - - - Android will show a browser selection dialog if multiple browsers are installed. Chrome Custom Tabs provide the best user experience for Auth0 authentication. - - - - - - **Checkpoint** - - You should now have a fully functional Auth0 login experience running on your Android device or emulator. The app uses Chrome Custom Tabs for secure authentication and automatically stores credentials. - - -*** - -## Troubleshooting & Advanced - - - ### Chrome Custom Tab doesn't redirect back to app - - **Solutions:** - - 1. Check **Allowed Callback URLs** in Auth0 Dashboard match your `applicationId` exactly - 2. Verify manifest placeholders in `build.gradle.kts` are correct - 3. Ensure both HTTPS and custom scheme URLs are configured - 4. Clean and rebuild: **Build** → **Clean Project** → **Rebuild Project** - - ### App crashes: 'Auth0 domain not found' - - **Fix:** - - 1. Check `com_auth0_domain` and `com_auth0_client_id` values are correct - 2. Ensure no typos in domain format (should not include `https://`) - - ### Build errors with dependencies - - **Fix:** - - 1. Update to latest Android Gradle Plugin in `build.gradle` (project level) - 2. Sync project: **File** → **Sync Project with Gradle Files** - 3. Clean build: `./gradlew clean build` - - ### Authentication cancelled by user - - Handle gracefully in your error callback: - - ```kotlin {3,4,5,6} expandable - override fun onFailure(exception: AuthenticationException) { - when { - exception.isAuthenticationCanceled -> - showMessage("Login was cancelled") - exception.isBrowserAppNotAvailable -> - showMessage("No browser available") - else -> - showMessage("Login failed: ${exception.getDescription()}") - } - } - ``` - - ### No compatible browser error - - * Install Chrome or another modern browser on your device/emulator - * Enable Chrome Custom Tabs for better user experience - * Test on real device with Chrome installed - - - - [Android App Links](https://developer.android.com/training/app-links) allow your app to designate itself as the default handler for Auth0 callback URLs, providing a more secure and seamless authentication experience. Without App Links, Android may show a disambiguation dialog asking the user to choose between your app and a browser. - - - App Links use verified `https` scheme callbacks. This is more secure than custom URL schemes, which can be subject to [client impersonation attacks](https://datatracker.ietf.org/doc/html/rfc8252#section-8.6). - - - ### Get your signing certificate fingerprint - - You need the SHA256 fingerprint of your app's signing certificate. Run the following command in your terminal: - - ```shellscript - # For debug builds - keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - - # For release builds - keytool -list -v -keystore my-release-key.keystore - ``` - - Copy the **SHA256** fingerprint value from the output. - - ### Configure in the Auth0 Dashboard - - 1. Go to [Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/#/applications), and select your application - 2. Scroll to the bottom of the **Settings** page and select **Show Advanced Settings** - 3. Select the **Device Settings** tab - 4. Under **Android**, provide: - - **App Package Name**: Your `applicationId` (e.g., `com.auth0.samples.android`) - - **SHA256 Cert Fingerprints**: The fingerprint you copied above - 5. Click **Save Changes** - - ### Verify the configuration - - Auth0 automatically generates the `assetlinks.json` file used by Android to verify your app. Test it by navigating to: - - ``` - https://{yourDomain}/.well-known/assetlinks.json - ``` - - You should see a JSON response containing your package name and certificate fingerprint: - - ```json - [{ - "relation": ["delegate_permission/common.handle_all_urls"], - "target": { - "namespace": "android_app", - "package_name": "[YOUR_PACKAGE_NAME]", - "sha256_cert_fingerprints": ["YOUR_SHA256_FINGERPRINT"] - } - }] - ``` - - - The quickstart already uses `https` as the scheme in the manifest placeholders and `WebAuthProvider` calls, which is required for App Links. No code changes are needed if you followed the steps above. - - - To learn more, see the [Enable Android App Links Support](/get-started/applications/enable-android-app-links-support) documentation and Android's [Verify App Links](https://developer.android.com/training/app-links/verify-site-associations) guide. - - - - If you cannot use Android App Links (for example, when targeting Android API versions below 23), you can configure a custom URL scheme instead. - - - Custom URL schemes are less secure than App Links because they can be subject to [client impersonation attacks](https://datatracker.ietf.org/doc/html/rfc8252#section-8.6). Use App Links whenever possible. - - - 1. Update the `auth0Scheme` manifest placeholder in your `app/build.gradle.kts`: - - ```kotlin app/build.gradle.kts lines - android { - defaultConfig { - manifestPlaceholders += mapOf( - "auth0Domain" to "@string/com_auth0_domain", - "auth0Scheme" to "myapp" // Use a unique custom scheme - ) - } - } - ``` - - 2. Update the **Allowed Callback URLs** and **Allowed Logout URLs** in your [Auth0 Dashboard](https://manage.auth0.com/#/applications) application settings to use the custom scheme: - - ``` - myapp://{yourDomain}/android/PACKAGE_NAME/callback - ``` - - 3. Pass the custom scheme when calling `WebAuthProvider`: - - ```kotlin MainActivity.kt lines - WebAuthProvider.login(auth0) - .withScheme("myapp") - .withScope("openid profile email offline_access") - .start(this, callback) - ``` - - - Custom schemes [can only contain lowercase letters](https://developer.android.com/guide/topics/manifest/data-element). - - - - - ### App Store Preparation - - * Configure Android App Links for seamless authentication - * Test on multiple Android versions and screen sizes - * Implement proper error handling for network failures - * Add ProGuard rules for Auth0 SDK if using code obfuscation - * Follow Google Play Store policies for authentication flows - - ### Security Considerations - - * Use `SecureCredentialsManager` for production credential storage - * Implement certificate pinning for additional API security - * Consider Android Keystore for enhanced credential protection - * Enable biometric authentication for sensitive operations - - - - ### Enhanced Credential Security - - Implement biometric authentication for credential access: - - ```kotlin AuthenticationManager.kt expandable lines - class AuthenticationManager(private val context: Context) { - - private val credentialsManager: SecureCredentialsManager - - init { - val authentication = AuthenticationAPIClient(auth0) - val storage = SharedPreferencesStorage(context) - credentialsManager = SecureCredentialsManager(context, authentication, storage) - - // Enable biometric authentication - credentialsManager.requireAuthentication( - context as FragmentActivity, - REQUEST_CODE_BIOMETRIC, - "Biometric Authentication", - "Please authenticate to access your account" - ) - } - - companion object { - private const val REQUEST_CODE_BIOMETRIC = 321 - } - } - ``` - - ### Custom Scopes and Audience - - Request specific scopes and audience for your API: - - ```kotlin AuthenticationManager.kt expandable lines - fun login() { - WebAuthProvider.login(auth0) - .withScheme("https") - .withScope("openid profile email offline_access read:posts") - .withAudience("https://myapi.example.com") - .withParameter("prompt", "login") - .start(context as MainActivity, loginCallback) - } - ``` - - ### Network Configuration - - Handle network security and certificate pinning: - - ```xml app/src/main/res/xml/network_security_config.xml expandable lines - - - - your-auth0-domain.auth0.com - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - - - ``` - - Add to `AndroidManifest.xml`: - - ```xml - - ``` - +--- +mode: wide +sidebarTitle: Android +title: Add Login to Your Android Application using the Auth0.Android SDK +--- + +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + + + +If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). + +**Install:** + +```bash +npx skills add auth0/agent-skills --skill auth0-quickstart --skill auth0-android +``` + +**Then ask your AI assistant:** + +```text +Add Auth0 authentication to my Android app +``` + +Your AI assistant will automatically create your Auth0 application, fetch credentials, add the Auth0 Android SDK dependency, configure manifest placeholders, and implement login/logout flows. [Full agent skills documentation →](/quickstart/agent-skills) + + + +## Get Started + + + + Create a new Android project for this quickstart. + + **In Android Studio:** + + 1. **File** → **New** → **New Project** + 2. Select **Phone and Tablet** → **Empty Activity** template + 3. Configure your project: + * **Name**: `Auth0-Android-Sample` + * **Package name**: `com.auth0.samples.android` + * **Language**: **Kotlin** + * **Minimum SDK**: **API 24 (Android 7.0)** + * **Build configuration language**: **Kotlin DSL** + 4. Click **Finish** + + + This creates a modern Android app with Kotlin and Gradle Kotlin DSL, following current Android development best practices. + + + + + Add the Auth0 Android SDK to your project using Gradle. + + **Update your app-level `build.gradle.kts` file:** + + ```kotlin app/build.gradle.kts lines + dependencies { + // Auth0 SDK + implementation("com.auth0.android:auth0:3.14.0") + } + ``` + + **Add manifest placeholders in your app-level `build.gradle.kts`:** + + ```kotlin app/build.gradle.kts lines + android { + defaultConfig { + // Add these manifest placeholders + manifestPlaceholders += mapOf( + "auth0Domain" to "@string/com_auth0_domain", // this will be set in the next step + "auth0Scheme" to "https" + ) + } + } + + ``` + + **Add Internet permission to `AndroidManifest.xml`:** + + ```xml app/src/main/AndroidManifest.xml lines + + + + + ``` + + + The Auth0 SDK automatically handles dependency resolution and includes secure token storage capabilities. + + + + + Next up, you need to create a new app on your Auth0 tenant and add the configuration to your Android project. + + First, prepare your `app/src/main/res/values/strings.xml` file with placeholder values: + + ```xml app/src/main/res/values/strings.xml + + + {yourDomain} + YOUR_AUTH0_CLIENT_ID + https + + ``` + + 1. Head to the [Auth0 Dashboard](https://manage.auth0.com/dashboard/) + 2. Click on **Applications** > **Applications** > **Create Application** + 3. In the popup, enter a name for your app, select `Native` as the app type and click **Create** + 4. Switch to the **Settings** tab on the Application Details page + 5. Replace `{yourDomain}` and `YOUR_AUTH0_CLIENT_ID` in the `strings.xml` file with the **Domain** and **Client ID** values from the dashboard + + Finally, on the **Settings** tab of your Application Details page, configure the following URLs: + + **Allowed Callback URLs:** + ``` + https://{yourDomain}/android/PACKAGE_NAME/callback + ``` + + **Allowed Logout URLs:** + ``` + https://{yourDomain}/android/PACKAGE_NAME/callback + ``` + + Replace `{yourDomain}` with your actual Auth0 domain (e.g., `dev-abc123.us.auth0.com`). + + + **Allowed Callback URLs** are a critical security measure to ensure users are safely returned to your application after authentication. Without a matching URL, the login process will fail, and users will be blocked by an Auth0 error page instead of accessing your app. + + **Allowed Logout URLs** are essential for providing a seamless user experience upon signing out. Without a matching URL, users will not be redirected back to your application after logout and will instead be left on a generic Auth0 page. + + The URL scheme includes your package name (`com.auth0.samples.android`) to ensure the callback is routed to your specific app. + + + + **Important**: Ensure the package name in your callback URLs matches your `applicationId` in `build.gradle.kts`. If authentication fails, verify these values are identical. + + + + When using the `https` scheme (as configured above), you must set up Android App Links so that Android routes the callback URL directly to your app instead of opening it in a browser. See the **Configure Android App Links** section under [Troubleshooting & Advanced](#troubleshooting--advanced) below. + + + + + Create an Auth0 instance in your Activity to communicate with Auth0. + + **In your `MainActivity.kt`:** + + ```kotlin MainActivity.kt lines + import com.auth0.android.Auth0 + import com.auth0.android.authentication.AuthenticationException + import com.auth0.android.callback.Callback + import com.auth0.android.provider.WebAuthProvider + import com.auth0.android.result.Credentials + + class MainActivity : ComponentActivity() { + private lateinit var auth0: Auth0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Initialize Auth0 + auth0 = Auth0.getInstance( + getString(R.string.com_auth0_client_id), + getString(R.string.com_auth0_domain) + ) + } + } + ``` + + + The Auth0 instance is initialized with your client ID and domain from the `strings.xml` file you configured earlier. This instance will be used for all authentication operations. + + + + + + **Implement Login:** Use WebAuthProvider to launch the universal login page. + + Add these methods to your `MainActivity`: + + + + ```kotlin MainActivity.kt lines + private fun login() { + WebAuthProvider.login(auth0) + .withScheme("https") + .withScope("openid profile email offline_access") + .start(this, object : Callback { + override fun onSuccess(credentials: Credentials) { + // Save the credentials + // User is authenticated + } + + override fun onFailure(exception: AuthenticationException) { + // Handle error cases + } + }) + } + ``` + + + + ```kotlin MainActivity.kt lines + private fun login() { + lifecycleScope.launch { + try { + val credentials = WebAuthProvider.login(auth0) + .withScheme("https") + .withScope("openid profile email offline_access") + .await(this@MainActivity) + // Save the credentials + // User is authenticated + } catch (exception: AuthenticationException) { + // Handle error + } + } + } + ``` + + + + **Implement Logout:** Use WebAuthProvider to clear the user's session. + + + + ```kotlin MainActivity.kt lines + private fun logout() { + WebAuthProvider.logout(auth0) + .withScheme("https") + .start(this, object : Callback { + override fun onSuccess(result: Void?) { + // Clear saved credentials + // User is logged out + } + + override fun onFailure(exception: AuthenticationException) { + // Handle error + } + }) + } + ``` + + + + ```kotlin MainActivity.kt lines + private fun logout() { + lifecycleScope.launch { + try { + WebAuthProvider.logout(auth0) + .withScheme("https") + .await(this@MainActivity) + // Clear saved credentials + // User is logged out + } catch (exception: AuthenticationException) { + // Handle error + } + } + } + ``` + + + + + The `login()` and `logout()` methods should be called when the user taps the respective buttons in your UI. The code uses `this` (referring to the Activity) as the context parameter, which is required for WebAuthProvider to launch Chrome Custom Tabs and handle the authentication flow. + + + + + Build and run your Android application. + + **In Android Studio:** + + ```shellscript + # Sync project with Gradle files (or use Android Studio's "Sync Now") + ./gradlew clean build + + # Build and install on connected device or emulator + ./gradlew installDebug + + # Or run directly from Android Studio + # Click the "Run" button or press Shift+F10 + ``` + + **Expected flow:** + + 1. App launches with "Log In" button and shield icon + 2. Tap "Log In" → Chrome Custom Tab opens → Complete login + 3. Returns to app automatically + 4. Success!! + + + Android will show a browser selection dialog if multiple browsers are installed. Chrome Custom Tabs provide the best user experience for Auth0 authentication. + + + + + + **Checkpoint** + + You should now have a fully functional Auth0 login experience running on your Android device or emulator. The app uses Chrome Custom Tabs for secure authentication and automatically stores credentials. + + +*** + +## Troubleshooting & Advanced + + + ### Chrome Custom Tab doesn't redirect back to app + + **Solutions:** + + 1. Check **Allowed Callback URLs** in Auth0 Dashboard match your `applicationId` exactly + 2. Verify manifest placeholders in `build.gradle.kts` are correct + 3. Ensure both HTTPS and custom scheme URLs are configured + 4. Clean and rebuild: **Build** → **Clean Project** → **Rebuild Project** + + ### App crashes: 'Auth0 domain not found' + + **Fix:** + + 1. Check `com_auth0_domain` and `com_auth0_client_id` values are correct + 2. Ensure no typos in domain format (should not include `https://`) + + ### Build errors with dependencies + + **Fix:** + + 1. Update to latest Android Gradle Plugin in `build.gradle` (project level) + 2. Sync project: **File** → **Sync Project with Gradle Files** + 3. Clean build: `./gradlew clean build` + + ### Authentication cancelled by user + + Handle gracefully in your error callback: + + ```kotlin {3,4,5,6} expandable + override fun onFailure(exception: AuthenticationException) { + when { + exception.isAuthenticationCanceled -> + showMessage("Login was cancelled") + exception.isBrowserAppNotAvailable -> + showMessage("No browser available") + else -> + showMessage("Login failed: ${exception.getDescription()}") + } + } + ``` + + ### No compatible browser error + + * Install Chrome or another modern browser on your device/emulator + * Enable Chrome Custom Tabs for better user experience + * Test on real device with Chrome installed + + + + [Android App Links](https://developer.android.com/training/app-links) allow your app to designate itself as the default handler for Auth0 callback URLs, providing a more secure and seamless authentication experience. Without App Links, Android may show a disambiguation dialog asking the user to choose between your app and a browser. + + + App Links use verified `https` scheme callbacks. This is more secure than custom URL schemes, which can be subject to [client impersonation attacks](https://datatracker.ietf.org/doc/html/rfc8252#section-8.6). + + + ### Get your signing certificate fingerprint + + You need the SHA256 fingerprint of your app's signing certificate. Run the following command in your terminal: + + ```shellscript + # For debug builds + keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android + + # For release builds + keytool -list -v -keystore my-release-key.keystore + ``` + + Copy the **SHA256** fingerprint value from the output. + + ### Configure in the Auth0 Dashboard + + 1. Go to [Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/#/applications), and select your application + 2. Scroll to the bottom of the **Settings** page and select **Show Advanced Settings** + 3. Select the **Device Settings** tab + 4. Under **Android**, provide: + - **App Package Name**: Your `applicationId` (e.g., `com.auth0.samples.android`) + - **SHA256 Cert Fingerprints**: The fingerprint you copied above + 5. Click **Save Changes** + + ### Verify the configuration + + Auth0 automatically generates the `assetlinks.json` file used by Android to verify your app. Test it by navigating to: + + ``` + https://{yourDomain}/.well-known/assetlinks.json + ``` + + You should see a JSON response containing your package name and certificate fingerprint: + + ```json + [{ + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "[YOUR_PACKAGE_NAME]", + "sha256_cert_fingerprints": ["YOUR_SHA256_FINGERPRINT"] + } + }] + ``` + + + The quickstart already uses `https` as the scheme in the manifest placeholders and `WebAuthProvider` calls, which is required for App Links. No code changes are needed if you followed the steps above. + + + To learn more, see the [Enable Android App Links Support](/get-started/applications/enable-android-app-links-support) documentation and Android's [Verify App Links](https://developer.android.com/training/app-links/verify-site-associations) guide. + + + + If you cannot use Android App Links (for example, when targeting Android API versions below 23), you can configure a custom URL scheme instead. + + + Custom URL schemes are less secure than App Links because they can be subject to [client impersonation attacks](https://datatracker.ietf.org/doc/html/rfc8252#section-8.6). Use App Links whenever possible. + + + 1. Update the `auth0Scheme` manifest placeholder in your `app/build.gradle.kts`: + + ```kotlin app/build.gradle.kts lines + android { + defaultConfig { + manifestPlaceholders += mapOf( + "auth0Domain" to "@string/com_auth0_domain", + "auth0Scheme" to "myapp" // Use a unique custom scheme + ) + } + } + ``` + + 2. Update the **Allowed Callback URLs** and **Allowed Logout URLs** in your [Auth0 Dashboard](https://manage.auth0.com/#/applications) application settings to use the custom scheme: + + ``` + myapp://{yourDomain}/android/PACKAGE_NAME/callback + ``` + + 3. Pass the custom scheme when calling `WebAuthProvider`: + + ```kotlin MainActivity.kt lines + WebAuthProvider.login(auth0) + .withScheme("myapp") + .withScope("openid profile email offline_access") + .start(this, callback) + ``` + + + Custom schemes [can only contain lowercase letters](https://developer.android.com/guide/topics/manifest/data-element). + + + + + ### App Store Preparation + + * Configure Android App Links for seamless authentication + * Test on multiple Android versions and screen sizes + * Implement proper error handling for network failures + * Add ProGuard rules for Auth0 SDK if using code obfuscation + * Follow Google Play Store policies for authentication flows + + ### Security Considerations + + * Use `SecureCredentialsManager` for production credential storage + * Implement certificate pinning for additional API security + * Consider Android Keystore for enhanced credential protection + * Enable biometric authentication for sensitive operations + + + + ### Enhanced Credential Security + + Implement biometric authentication for credential access: + + ```kotlin AuthenticationManager.kt expandable lines + class AuthenticationManager(private val context: Context) { + + private val credentialsManager: SecureCredentialsManager + + init { + val authentication = AuthenticationAPIClient(auth0) + val storage = SharedPreferencesStorage(context) + credentialsManager = SecureCredentialsManager(context, authentication, storage) + + // Enable biometric authentication + credentialsManager.requireAuthentication( + context as FragmentActivity, + REQUEST_CODE_BIOMETRIC, + "Biometric Authentication", + "Please authenticate to access your account" + ) + } + + companion object { + private const val REQUEST_CODE_BIOMETRIC = 321 + } + } + ``` + + ### Custom Scopes and Audience + + Request specific scopes and audience for your API: + + ```kotlin AuthenticationManager.kt expandable lines + fun login() { + WebAuthProvider.login(auth0) + .withScheme("https") + .withScope("openid profile email offline_access read:posts") + .withAudience("https://myapi.example.com") + .withParameter("prompt", "login") + .start(context as MainActivity, loginCallback) + } + ``` + + ### Network Configuration + + Handle network security and certificate pinning: + + ```xml app/src/main/res/xml/network_security_config.xml expandable lines + + + + your-auth0-domain.auth0.com + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + ``` + + Add to `AndroidManifest.xml`: + + ```xml + + ``` + diff --git a/main/docs/quickstart/native/flutter/index.mdx b/main/docs/quickstart/native/flutter/index.mdx index 2d2a0273f8..ad52d3210a 100644 --- a/main/docs/quickstart/native/flutter/index.mdx +++ b/main/docs/quickstart/native/flutter/index.mdx @@ -7,6 +7,10 @@ mode: wide 'twitter:title': 'Auth0 Flutter SDK Quickstarts: Add Login to Your Flutter Application' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This guide demonstrates how to integrate Auth0 with a Flutter application using the [Auth0 Flutter SDK](https://github.com/auth0/auth0-flutter). This guide covers setup for **Android**, **iOS**, **macOS**, and **Web** platforms. ## Get Started diff --git a/main/docs/quickstart/native/ionic-angular/index.mdx b/main/docs/quickstart/native/ionic-angular/index.mdx index 8bf65c98ac..90e8c6852c 100644 --- a/main/docs/quickstart/native/ionic-angular/index.mdx +++ b/main/docs/quickstart/native/ionic-angular/index.mdx @@ -15,6 +15,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + ## Get Started This quickstart demonstrates how to add Auth0 authentication to an Ionic Angular application with Capacitor. You'll build a mobile-ready app with login, logout, and user profile features using the Auth0 Angular SDK and Capacitor's native browser plugins. diff --git a/main/docs/quickstart/native/ionic-react/index.mdx b/main/docs/quickstart/native/ionic-react/index.mdx index de81835a4a..42a9d9bdf5 100644 --- a/main/docs/quickstart/native/ionic-react/index.mdx +++ b/main/docs/quickstart/native/ionic-react/index.mdx @@ -15,6 +15,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + ## Get Started This quickstart demonstrates how to add Auth0 authentication to an Ionic React application with Capacitor. You'll build a mobile-ready app with login, logout, and user profile features using the Auth0 React SDK and Capacitor's native browser integration. diff --git a/main/docs/quickstart/native/ionic-vue/index.mdx b/main/docs/quickstart/native/ionic-vue/index.mdx index 16bf51cba4..a6c98c6521 100644 --- a/main/docs/quickstart/native/ionic-vue/index.mdx +++ b/main/docs/quickstart/native/ionic-vue/index.mdx @@ -15,6 +15,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + ## Get Started This quickstart demonstrates how to add Auth0 authentication to an Ionic Vue application running on iOS and Android with Capacitor. You'll build a secure mobile app with login, logout, and user profile features using the Auth0 Vue SDK and Capacitor's native browser plugins. diff --git a/main/docs/quickstart/native/ios-swift-facebook-login/index.mdx b/main/docs/quickstart/native/ios-swift-facebook-login/index.mdx index 1c0788d2bb..d311361474 100644 --- a/main/docs/quickstart/native/ios-swift-facebook-login/index.mdx +++ b/main/docs/quickstart/native/ios-swift-facebook-login/index.mdx @@ -4,6 +4,10 @@ sidebarTitle: iOS Facebook Login title: Add Native Facebook Login to Your iOS Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + ## Before You Start Complete these prerequisites before following this quickstart: diff --git a/main/docs/quickstart/native/ios-swift/index.mdx b/main/docs/quickstart/native/ios-swift/index.mdx index 0c2a5e380a..b02148d685 100644 --- a/main/docs/quickstart/native/ios-swift/index.mdx +++ b/main/docs/quickstart/native/ios-swift/index.mdx @@ -7,6 +7,9 @@ title: Add Login to Your iOS or macOS Application using the Auth0.swift SDK import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + ## Get Started diff --git a/main/docs/quickstart/native/maui/index.mdx b/main/docs/quickstart/native/maui/index.mdx index 5f7fe07fab..adcc4d49ab 100644 --- a/main/docs/quickstart/native/maui/index.mdx +++ b/main/docs/quickstart/native/maui/index.mdx @@ -6,6 +6,10 @@ description: This guide demonstrates how to integrate Auth0 with a .NET MAUI app 'twitter:title': 'Auth0 .NET MAUI SDK Quickstart: Add Login to Your .NET MAUI Application' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This guide demonstrates how to integrate Auth0 with a .NET MAUI application using the [Auth0.OidcClient.MAUI SDK](https://github.com/auth0/auth0-oidc-client-net). By the end, your app will support login, logout, and displaying user profile information across **Android**, **iOS**, **macOS**, and **Windows** from a single codebase. This guide uses `Auth0.OidcClient.MAUI` version **1.x**. diff --git a/main/docs/quickstart/native/net-android-ios/index.mdx b/main/docs/quickstart/native/net-android-ios/index.mdx index 01ec6d12bf..e9b11af77c 100644 --- a/main/docs/quickstart/native/net-android-ios/index.mdx +++ b/main/docs/quickstart/native/net-android-ios/index.mdx @@ -4,6 +4,10 @@ sidebarTitle: .NET Android & iOS title: Add Login to Your .NET Android & iOS Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + ## Get Started diff --git a/main/docs/quickstart/native/react-native-expo/index.mdx b/main/docs/quickstart/native/react-native-expo/index.mdx index cf92f629c2..94520f7f92 100644 --- a/main/docs/quickstart/native/react-native-expo/index.mdx +++ b/main/docs/quickstart/native/react-native-expo/index.mdx @@ -10,6 +10,10 @@ title: Add Login to Your Expo Application 'twitter:title': 'Auth0 Expo SDK Quickstarts: Add Login to Your Expo Application' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This Quickstart is for Expo applications. To integrate Auth0 into your React Native application, refer to the [React Native Quickstart](https://auth0.com/docs/quickstart/native/react-native/interactive). diff --git a/main/docs/quickstart/native/react-native/index.mdx b/main/docs/quickstart/native/react-native/index.mdx index 5a400049d8..c61a949eb3 100644 --- a/main/docs/quickstart/native/react-native/index.mdx +++ b/main/docs/quickstart/native/react-native/index.mdx @@ -12,6 +12,10 @@ title: Add Login to Your React Native Application 'twitter:title': 'Auth0 React Native SDK Quickstarts: Add Login to Your React Native Application' --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This Quickstart is for the React Native framework. To integrate Auth0 into your Expo application, refer to the [Expo Quickstart](https://auth0.com/docs/quickstart/native/react-native-expo/interactive). diff --git a/main/docs/quickstart/native/wpf-winforms/index.mdx b/main/docs/quickstart/native/wpf-winforms/index.mdx index f6281b6d03..3f1bd447c4 100644 --- a/main/docs/quickstart/native/wpf-winforms/index.mdx +++ b/main/docs/quickstart/native/wpf-winforms/index.mdx @@ -4,6 +4,10 @@ description: 'Add Auth0 login, logout, and user profile to a WPF or WinForms app sidebarTitle: WPF / WinForms --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + **Prerequisites:** Before you begin, ensure you have the following: diff --git a/main/docs/quickstart/spa/angular/index.mdx b/main/docs/quickstart/spa/angular/index.mdx index 8b5016bb90..9ca5fcaba1 100644 --- a/main/docs/quickstart/spa/angular/index.mdx +++ b/main/docs/quickstart/spa/angular/index.mdx @@ -10,6 +10,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). diff --git a/main/docs/quickstart/spa/capn-web/index.mdx b/main/docs/quickstart/spa/capn-web/index.mdx index a5b6692907..3427aaf1f3 100644 --- a/main/docs/quickstart/spa/capn-web/index.mdx +++ b/main/docs/quickstart/spa/capn-web/index.mdx @@ -8,6 +8,9 @@ title: Add Login to Your Cap'n Web Application import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + This Quickstart is currently in **Beta**. We'd love to hear your feedback! diff --git a/main/docs/quickstart/spa/flutter/index.mdx b/main/docs/quickstart/spa/flutter/index.mdx index d5725ad679..ebf20202f6 100644 --- a/main/docs/quickstart/spa/flutter/index.mdx +++ b/main/docs/quickstart/spa/flutter/index.mdx @@ -5,6 +5,10 @@ sidebarTitle: Flutter (Web) title: Add Login to Your Flutter Web Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + **Prerequisites:** Before you begin, ensure you have the following installed: diff --git a/main/docs/quickstart/spa/react/index.mdx b/main/docs/quickstart/spa/react/index.mdx index 44053af19a..e9ca958324 100644 --- a/main/docs/quickstart/spa/react/index.mdx +++ b/main/docs/quickstart/spa/react/index.mdx @@ -9,6 +9,9 @@ title: Add Login to Your React Application import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + diff --git a/main/docs/quickstart/spa/svelte/index.mdx b/main/docs/quickstart/spa/svelte/index.mdx index de583d6efd..2004ddd3d3 100644 --- a/main/docs/quickstart/spa/svelte/index.mdx +++ b/main/docs/quickstart/spa/svelte/index.mdx @@ -10,6 +10,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + This Quickstart is currently in **Beta**. We'd love to hear your feedback! diff --git a/main/docs/quickstart/spa/vanillajs/index.mdx b/main/docs/quickstart/spa/vanillajs/index.mdx index 56ee49d3ea..9733de0b1e 100644 --- a/main/docs/quickstart/spa/vanillajs/index.mdx +++ b/main/docs/quickstart/spa/vanillajs/index.mdx @@ -9,6 +9,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + **Using AI to integrate Auth0?** Add this prompt to Cursor, Windsurf, Copilot, Claude Code or your favourite AI-powered IDE to speed up development. diff --git a/main/docs/quickstart/spa/vuejs/index.mdx b/main/docs/quickstart/spa/vuejs/index.mdx index 171e60874d..a3d371a17b 100644 --- a/main/docs/quickstart/spa/vuejs/index.mdx +++ b/main/docs/quickstart/spa/vuejs/index.mdx @@ -10,6 +10,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). diff --git a/main/docs/quickstart/webapp/aspnet-core-blazor-server/index.mdx b/main/docs/quickstart/webapp/aspnet-core-blazor-server/index.mdx index 97e52b0046..bc3e0436a0 100644 --- a/main/docs/quickstart/webapp/aspnet-core-blazor-server/index.mdx +++ b/main/docs/quickstart/webapp/aspnet-core-blazor-server/index.mdx @@ -7,6 +7,9 @@ title: Add Login to Your Blazor Server Application import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + **Using AI to integrate Auth0?** Add this prompt to Cursor, Windsurf, Copilot, Claude Code or your favourite AI-powered IDE to speed up development. diff --git a/main/docs/quickstart/webapp/aspnet-core/index.mdx b/main/docs/quickstart/webapp/aspnet-core/index.mdx index 54217f2200..1e7a211ffd 100644 --- a/main/docs/quickstart/webapp/aspnet-core/index.mdx +++ b/main/docs/quickstart/webapp/aspnet-core/index.mdx @@ -5,6 +5,10 @@ sidebarTitle: ASP.NET Core MVC title: Add Login to Your ASP.NET MVC Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + **Using AI to integrate Auth0?** Add this prompt to Cursor, Windsurf, Copilot, Claude Code or your favourite AI-powered IDE to speed up development. diff --git a/main/docs/quickstart/webapp/aspnet-owin/index.mdx b/main/docs/quickstart/webapp/aspnet-owin/index.mdx index 689df65128..a670ecb57d 100644 --- a/main/docs/quickstart/webapp/aspnet-owin/index.mdx +++ b/main/docs/quickstart/webapp/aspnet-owin/index.mdx @@ -4,6 +4,10 @@ description: This guide demonstrates how to integrate Auth0 with any new or exis sidebarTitle: ASP.NET OWIN --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + Auth0 allows you to add authentication to your ASP.NET OWIN application in minutes. This guide walks you through adding login, logout, and user profile display to a classic ASP.NET OWIN application. By the end of this guide, your application will: diff --git a/main/docs/quickstart/webapp/express/index.mdx b/main/docs/quickstart/webapp/express/index.mdx index 6aad9d4cf6..08a845ddc8 100644 --- a/main/docs/quickstart/webapp/express/index.mdx +++ b/main/docs/quickstart/webapp/express/index.mdx @@ -7,6 +7,9 @@ title: Add Login to Your Express Application import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). @@ -680,8 +683,8 @@ console.log('Config check:', { Now that you have authentication working, consider exploring: -- **[Add Authorization](https://auth0.com/docs/quickstart/webapp/express/02-user-profile)** - Implement role-based access control -- **[Call Protected APIs](https://auth0.com/docs/quickstart/webapp/express/03-authorization)** - Use access tokens to call your backend APIs +- **[Add Authorization](https://auth0.com/docs/manage-users/access-control/rbac)** - Implement role-based access control +- **[Call Protected APIs](https://auth0.com/docs/secure/tokens/access-tokens/get-access-tokens)** - Use access tokens to call your backend APIs - **[Customize Universal Login](https://auth0.com/docs/customize/universal-login-pages)** - Brand your login experience - **[Add Social Connections](https://auth0.com/docs/connections/social)** - Enable Google, GitHub, and other social logins - **[Implement MFA](https://auth0.com/docs/secure/multi-factor-authentication)** - Add multi-factor authentication diff --git a/main/docs/quickstart/webapp/fastapi/index.mdx b/main/docs/quickstart/webapp/fastapi/index.mdx index ee8afe39c4..49ec139166 100644 --- a/main/docs/quickstart/webapp/fastapi/index.mdx +++ b/main/docs/quickstart/webapp/fastapi/index.mdx @@ -5,6 +5,10 @@ sidebarTitle: FastAPI title: Add Login to Your FastAPI Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + **Using AI to integrate Auth0?** Add this prompt to Cursor, Windsurf, Copilot, Claude Code or your favourite AI-powered IDE to speed up development. diff --git a/main/docs/quickstart/webapp/fastify/index.mdx b/main/docs/quickstart/webapp/fastify/index.mdx index 5e3d5e0cbd..dfe61337ee 100644 --- a/main/docs/quickstart/webapp/fastify/index.mdx +++ b/main/docs/quickstart/webapp/fastify/index.mdx @@ -8,6 +8,9 @@ title: Add Login to Your Fastify Application import {CreateInteractiveApp} from "/snippets/recipe.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + export function generateRandomString(length) { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; return Array.from({length}, () => chars[Math.floor(Math.random() * chars.length)]).join(''); diff --git a/main/docs/quickstart/webapp/hono/index.mdx b/main/docs/quickstart/webapp/hono/index.mdx index 70c8c04933..bc42324e97 100644 --- a/main/docs/quickstart/webapp/hono/index.mdx +++ b/main/docs/quickstart/webapp/hono/index.mdx @@ -7,6 +7,9 @@ description: "This Quickstart demonstrates how to secure your Hono applications import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + This Quickstart is currently in **Beta**. We'd love to hear your feedback! diff --git a/main/docs/quickstart/webapp/java-ee/index.mdx b/main/docs/quickstart/webapp/java-ee/index.mdx index b15b20f663..45888ceeb0 100644 --- a/main/docs/quickstart/webapp/java-ee/index.mdx +++ b/main/docs/quickstart/webapp/java-ee/index.mdx @@ -7,6 +7,9 @@ title: Add Login to Your Java EE Application import { AuthCodeGroup } from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). diff --git a/main/docs/quickstart/webapp/java-spring-boot/index.mdx b/main/docs/quickstart/webapp/java-spring-boot/index.mdx index bc0f0d9207..930f9f49d6 100644 --- a/main/docs/quickstart/webapp/java-spring-boot/index.mdx +++ b/main/docs/quickstart/webapp/java-spring-boot/index.mdx @@ -5,6 +5,9 @@ description: "Add Auth0 login to a Spring Boot web application using the Okta Sp import { AuthCodeGroup } from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + **Prerequisites:** - JDK 17+ ([download](https://adoptium.net/)) diff --git a/main/docs/quickstart/webapp/java/index.mdx b/main/docs/quickstart/webapp/java/index.mdx index fd526edf41..cd130283d3 100644 --- a/main/docs/quickstart/webapp/java/index.mdx +++ b/main/docs/quickstart/webapp/java/index.mdx @@ -7,6 +7,9 @@ title: Add Login to Your Java Servlet Application import { AuthCodeGroup } from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + **Prerequisites:** Before you begin, ensure you have the following installed: @@ -688,6 +691,6 @@ You should now have a fully functional Auth0-integrated servlet application runn - Check that cookies are enabled in your browser - Verify HTTPS is used in production environments -For additional support, visit the [Auth0 Community](https://community.auth0.com/) or check the [Auth0 Support Center](https://support.auth0.com/). +For additional support, visit the [Auth0 Community](https://community.auth0.com/). diff --git a/main/docs/quickstart/webapp/nextjs/index.mdx b/main/docs/quickstart/webapp/nextjs/index.mdx index 9ecd4a7bb3..efad52eafc 100644 --- a/main/docs/quickstart/webapp/nextjs/index.mdx +++ b/main/docs/quickstart/webapp/nextjs/index.mdx @@ -9,6 +9,9 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + If you use an AI coding assistant like Claude Code, Cursor, or GitHub Copilot, you can add Auth0 authentication automatically in minutes using [agent skills](https://agentskills.io/home). diff --git a/main/docs/quickstart/webapp/nuxt/index.mdx b/main/docs/quickstart/webapp/nuxt/index.mdx index 8dd176a12f..10fc8a3045 100644 --- a/main/docs/quickstart/webapp/nuxt/index.mdx +++ b/main/docs/quickstart/webapp/nuxt/index.mdx @@ -5,6 +5,10 @@ sidebarTitle: Nuxt.js title: Add Login to Your Nuxt.js Application --- +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + + This Quickstart is currently in **Beta**. We'd love to hear your feedback! diff --git a/main/docs/quickstart/webapp/python/index.mdx b/main/docs/quickstart/webapp/python/index.mdx index 251a733d50..15ee057244 100644 --- a/main/docs/quickstart/webapp/python/index.mdx +++ b/main/docs/quickstart/webapp/python/index.mdx @@ -7,6 +7,9 @@ title: 'Add Login to Your Flask Application' import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {HowToSchema} from "/snippets/HowToSchema.jsx"; + + **Prerequisites:** Before you begin, ensure you have the following installed: diff --git a/main/snippets/HowToSchema.jsx b/main/snippets/HowToSchema.jsx new file mode 100644 index 0000000000..47e782278c --- /dev/null +++ b/main/snippets/HowToSchema.jsx @@ -0,0 +1,17 @@ +import { useEffect, useRef } from 'react'; + +export const HowToSchema = () => { + const scriptRef = useRef(null); + + useEffect(() => { + if (scriptRef.current) { + const data = { + '@context': 'https://schema.org', + '@type': 'HowTo', + }; + scriptRef.current.text = JSON.stringify(data).replace(/; +};