From 663ed8e16dba899c9d7e8c1bbf6410b0d55987a7 Mon Sep 17 00:00:00 2001 From: Kevin Lillybridge Date: Tue, 12 May 2026 14:07:42 -0700 Subject: [PATCH 1/4] feat: add HowTo JSON-LD schema to quickstart guides Adds a reusable JsonLd snippet and HowTo structured data to 39 quickstart index pages across native, SPA, webapp, and backend platforms. Improves discoverability in AI search (ChatGPT, Perplexity, Google AI Overviews) and in traditional search rich results by exposing each quickstart's steps as machine-readable HowToStep entries. Also corrects four pre-existing broken links surfaced by Lychee in the Next Steps sections of files being touched: - golang: Production Checklist -> Production Readiness Checks (/deploy-monitor/pre-deployment-checks/production-checks-best-practices) - express: Add Authorization -> /manage-users/access-control/rbac - express: Call Protected APIs -> /secure/tokens/access-tokens/get-access-tokens - java: drop Support Center link (auth-gated 302); keep Community --- .../backend/aspnet-core-webapi/index.mdx | 47 + .../docs/quickstart/backend/fastapi/index.mdx | 53 + .../docs/quickstart/backend/fastify/index.mdx | 53 + main/docs/quickstart/backend/golang/index.mdx | 96 +- .../backend/java-spring-security5/index.mdx | 47 + main/docs/quickstart/backend/python/index.mdx | 53 + .../native/android-facebook-login/index.mdx | 47 + main/docs/quickstart/native/android/index.mdx | 1127 +++++++++-------- main/docs/quickstart/native/flutter/index.mdx | 53 + .../quickstart/native/ionic-angular/index.mdx | 46 + .../quickstart/native/ionic-react/index.mdx | 46 + .../quickstart/native/ionic-vue/index.mdx | 46 + .../native/ios-swift-facebook-login/index.mdx | 47 + .../quickstart/native/ios-swift/index.mdx | 52 + main/docs/quickstart/native/maui/index.mdx | 53 + .../native/net-android-ios/index.mdx | 47 + .../native/react-native-expo/index.mdx | 47 + .../quickstart/native/react-native/index.mdx | 53 + .../quickstart/native/wpf-winforms/index.mdx | 53 + main/docs/quickstart/spa/angular/index.mdx | 46 + main/docs/quickstart/spa/capn-web/index.mdx | 46 + main/docs/quickstart/spa/flutter/index.mdx | 47 + main/docs/quickstart/spa/react/index.mdx | 22 + main/docs/quickstart/spa/svelte/index.mdx | 46 + main/docs/quickstart/spa/vanillajs/index.mdx | 40 + main/docs/quickstart/spa/vuejs/index.mdx | 46 + .../aspnet-core-blazor-server/index.mdx | 52 + .../quickstart/webapp/aspnet-core/index.mdx | 59 + .../quickstart/webapp/aspnet-owin/index.mdx | 47 + main/docs/quickstart/webapp/express/index.mdx | 50 +- main/docs/quickstart/webapp/fastapi/index.mdx | 47 + main/docs/quickstart/webapp/fastify/index.mdx | 52 + main/docs/quickstart/webapp/hono/index.mdx | 40 + main/docs/quickstart/webapp/java-ee/index.mdx | 58 + .../webapp/java-spring-boot/index.mdx | 46 + main/docs/quickstart/webapp/java/index.mdx | 54 +- main/docs/quickstart/webapp/nextjs/index.mdx | 76 ++ main/docs/quickstart/webapp/nuxt/index.mdx | 47 + main/docs/quickstart/webapp/python/index.mdx | 40 + main/snippets/JsonLd.jsx | 6 + 40 files changed, 2489 insertions(+), 544 deletions(-) create mode 100644 main/snippets/JsonLd.jsx diff --git a/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx b/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx index ddb0faf691..14ba02879e 100644 --- a/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx +++ b/main/docs/quickstart/backend/aspnet-core-webapi/index.mdx @@ -2,6 +2,53 @@ title: 'ASP.NET Core Web API' description: 'Add Auth0 JWT authentication to an ASP.NET Core Web API with protected endpoints' --- +import {JsonLd} from "/snippets/JsonLd.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..a86b579c35 100644 --- a/main/docs/quickstart/backend/fastapi/index.mdx +++ b/main/docs/quickstart/backend/fastapi/index.mdx @@ -4,6 +4,59 @@ description: 'Add Auth0 JWT authentication to an FastAPI with protected endpoint sidebarTitle: FastAPI API title: 'FastAPI API' --- +import {JsonLd} from "/snippets/JsonLd.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..3670b90b1e 100644 --- a/main/docs/quickstart/backend/fastify/index.mdx +++ b/main/docs/quickstart/backend/fastify/index.mdx @@ -5,6 +5,59 @@ sidebarTitle: Fastify API title: Protect Your Fastify API --- +import {JsonLd} from "/snippets/JsonLd.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..f67c169133 100644 --- a/main/docs/quickstart/backend/golang/index.mdx +++ b/main/docs/quickstart/backend/golang/index.mdx @@ -6,6 +6,100 @@ title: Protect Your Go API --- import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; +import {JsonLd} from "/snippets/JsonLd.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 +981,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..e76c78101a 100644 --- a/main/docs/quickstart/backend/java-spring-security5/index.mdx +++ b/main/docs/quickstart/backend/java-spring-security5/index.mdx @@ -3,6 +3,53 @@ title: "Java Springboot API" description: "Add Auth0 JWT authentication to a Spring Boot API with protected endpoints" --- +import {JsonLd} from "/snippets/JsonLd.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..9e7de1c603 100644 --- a/main/docs/quickstart/backend/python/index.mdx +++ b/main/docs/quickstart/backend/python/index.mdx @@ -3,6 +3,59 @@ title: 'Flask API' description: 'This guide demonstrates how to integrate Auth0 with any new or existing Python API built with Flask.' --- +import {JsonLd} from "/snippets/JsonLd.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..359a6af6f3 100644 --- a/main/docs/quickstart/native/android-facebook-login/index.mdx +++ b/main/docs/quickstart/native/android-facebook-login/index.mdx @@ -4,6 +4,53 @@ sidebarTitle: Android Facebook Login title: Add Native Facebook Login to Your Android Application --- +import {JsonLd} from "/snippets/JsonLd.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..bd6a30a857 100644 --- a/main/docs/quickstart/native/android/index.mdx +++ b/main/docs/quickstart/native/android/index.mdx @@ -1,540 +1,587 @@ ---- -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 {JsonLd} from "/snippets/JsonLd.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..9498f4fe16 100644 --- a/main/docs/quickstart/native/flutter/index.mdx +++ b/main/docs/quickstart/native/flutter/index.mdx @@ -7,6 +7,59 @@ mode: wide 'twitter:title': 'Auth0 Flutter SDK Quickstarts: Add Login to Your Flutter Application' --- +import {JsonLd} from "/snippets/JsonLd.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..82aa8881a6 100644 --- a/main/docs/quickstart/native/ionic-angular/index.mdx +++ b/main/docs/quickstart/native/ionic-angular/index.mdx @@ -15,6 +15,52 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..eae040c29f 100644 --- a/main/docs/quickstart/native/ionic-react/index.mdx +++ b/main/docs/quickstart/native/ionic-react/index.mdx @@ -15,6 +15,52 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..75489b1b6d 100644 --- a/main/docs/quickstart/native/ionic-vue/index.mdx +++ b/main/docs/quickstart/native/ionic-vue/index.mdx @@ -15,6 +15,52 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..abccec7348 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,53 @@ sidebarTitle: iOS Facebook Login title: Add Native Facebook Login to Your iOS Application --- +import {JsonLd} from "/snippets/JsonLd.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..8016250b2f 100644 --- a/main/docs/quickstart/native/ios-swift/index.mdx +++ b/main/docs/quickstart/native/ios-swift/index.mdx @@ -7,6 +7,58 @@ title: Add Login to Your iOS or macOS Application using the Auth0.swift SDK import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.jsx"; + + ## Get Started diff --git a/main/docs/quickstart/native/maui/index.mdx b/main/docs/quickstart/native/maui/index.mdx index 5f7fe07fab..428ea35ee3 100644 --- a/main/docs/quickstart/native/maui/index.mdx +++ b/main/docs/quickstart/native/maui/index.mdx @@ -6,6 +6,59 @@ 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 {JsonLd} from "/snippets/JsonLd.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..35b1a123b9 100644 --- a/main/docs/quickstart/native/net-android-ios/index.mdx +++ b/main/docs/quickstart/native/net-android-ios/index.mdx @@ -4,6 +4,53 @@ sidebarTitle: .NET Android & iOS title: Add Login to Your .NET Android & iOS Application --- +import {JsonLd} from "/snippets/JsonLd.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..200062bea9 100644 --- a/main/docs/quickstart/native/react-native-expo/index.mdx +++ b/main/docs/quickstart/native/react-native-expo/index.mdx @@ -10,6 +10,53 @@ title: Add Login to Your Expo Application 'twitter:title': 'Auth0 Expo SDK Quickstarts: Add Login to Your Expo Application' --- +import {JsonLd} from "/snippets/JsonLd.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..abc39fe864 100644 --- a/main/docs/quickstart/native/react-native/index.mdx +++ b/main/docs/quickstart/native/react-native/index.mdx @@ -12,6 +12,59 @@ title: Add Login to Your React Native Application 'twitter:title': 'Auth0 React Native SDK Quickstarts: Add Login to Your React Native Application' --- +import {JsonLd} from "/snippets/JsonLd.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..10397192e0 100644 --- a/main/docs/quickstart/native/wpf-winforms/index.mdx +++ b/main/docs/quickstart/native/wpf-winforms/index.mdx @@ -4,6 +4,59 @@ description: 'Add Auth0 login, logout, and user profile to a WPF or WinForms app sidebarTitle: WPF / WinForms --- +import {JsonLd} from "/snippets/JsonLd.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..0fa8ecece9 100644 --- a/main/docs/quickstart/spa/angular/index.mdx +++ b/main/docs/quickstart/spa/angular/index.mdx @@ -10,6 +10,52 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..f25c46e5df 100644 --- a/main/docs/quickstart/spa/capn-web/index.mdx +++ b/main/docs/quickstart/spa/capn-web/index.mdx @@ -8,6 +8,52 @@ title: Add Login to Your Cap'n Web Application import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..e29b59b26b 100644 --- a/main/docs/quickstart/spa/flutter/index.mdx +++ b/main/docs/quickstart/spa/flutter/index.mdx @@ -5,6 +5,53 @@ sidebarTitle: Flutter (Web) title: Add Login to Your Flutter Web Application --- +import {JsonLd} from "/snippets/JsonLd.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..cf8b1a31f9 100644 --- a/main/docs/quickstart/spa/react/index.mdx +++ b/main/docs/quickstart/spa/react/index.mdx @@ -9,6 +9,28 @@ 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 {JsonLd} from "/snippets/JsonLd.jsx"; + + diff --git a/main/docs/quickstart/spa/svelte/index.mdx b/main/docs/quickstart/spa/svelte/index.mdx index de583d6efd..b27d522516 100644 --- a/main/docs/quickstart/spa/svelte/index.mdx +++ b/main/docs/quickstart/spa/svelte/index.mdx @@ -10,6 +10,52 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..a21c89531f 100644 --- a/main/docs/quickstart/spa/vanillajs/index.mdx +++ b/main/docs/quickstart/spa/vanillajs/index.mdx @@ -9,6 +9,46 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..e22a5a48d8 100644 --- a/main/docs/quickstart/spa/vuejs/index.mdx +++ b/main/docs/quickstart/spa/vuejs/index.mdx @@ -10,6 +10,52 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..02fc729fed 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,58 @@ title: Add Login to Your Blazor Server Application import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..26ef188796 100644 --- a/main/docs/quickstart/webapp/aspnet-core/index.mdx +++ b/main/docs/quickstart/webapp/aspnet-core/index.mdx @@ -5,6 +5,65 @@ sidebarTitle: ASP.NET Core MVC title: Add Login to Your ASP.NET MVC Application --- +import {JsonLd} from "/snippets/JsonLd.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..48419e62f7 100644 --- a/main/docs/quickstart/webapp/aspnet-owin/index.mdx +++ b/main/docs/quickstart/webapp/aspnet-owin/index.mdx @@ -4,6 +4,53 @@ description: This guide demonstrates how to integrate Auth0 with any new or exis sidebarTitle: ASP.NET OWIN --- +import {JsonLd} from "/snippets/JsonLd.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..af78d9ddce 100644 --- a/main/docs/quickstart/webapp/express/index.mdx +++ b/main/docs/quickstart/webapp/express/index.mdx @@ -7,6 +7,52 @@ title: Add Login to Your Express Application import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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 +726,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..80a3d8cc4a 100644 --- a/main/docs/quickstart/webapp/fastapi/index.mdx +++ b/main/docs/quickstart/webapp/fastapi/index.mdx @@ -5,6 +5,53 @@ sidebarTitle: FastAPI title: Add Login to Your FastAPI Application --- +import {JsonLd} from "/snippets/JsonLd.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..0807b3d845 100644 --- a/main/docs/quickstart/webapp/fastify/index.mdx +++ b/main/docs/quickstart/webapp/fastify/index.mdx @@ -8,6 +8,58 @@ title: Add Login to Your Fastify Application import {CreateInteractiveApp} from "/snippets/recipe.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..85855595b3 100644 --- a/main/docs/quickstart/webapp/hono/index.mdx +++ b/main/docs/quickstart/webapp/hono/index.mdx @@ -7,6 +7,46 @@ description: "This Quickstart demonstrates how to secure your Hono applications import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..e826534916 100644 --- a/main/docs/quickstart/webapp/java-ee/index.mdx +++ b/main/docs/quickstart/webapp/java-ee/index.mdx @@ -7,6 +7,64 @@ title: Add Login to Your Java EE Application import { AuthCodeGroup } from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..b46e5b7a32 100644 --- a/main/docs/quickstart/webapp/java-spring-boot/index.mdx +++ b/main/docs/quickstart/webapp/java-spring-boot/index.mdx @@ -5,6 +5,52 @@ description: "Add Auth0 login to a Spring Boot web application using the Okta Sp import { AuthCodeGroup } from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..93c394b66a 100644 --- a/main/docs/quickstart/webapp/java/index.mdx +++ b/main/docs/quickstart/webapp/java/index.mdx @@ -7,6 +7,58 @@ title: Add Login to Your Java Servlet Application import { AuthCodeGroup } from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.jsx"; + + **Prerequisites:** Before you begin, ensure you have the following installed: @@ -688,6 +740,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..ca65884670 100644 --- a/main/docs/quickstart/webapp/nextjs/index.mdx +++ b/main/docs/quickstart/webapp/nextjs/index.mdx @@ -9,6 +9,82 @@ import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; import {AuthCodeBlock} from "/snippets/AuthCodeBlock.jsx"; import {CreateInteractiveApp} from "/snippets/recipe.jsx"; +import {JsonLd} from "/snippets/JsonLd.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..1e8f6dc1a9 100644 --- a/main/docs/quickstart/webapp/nuxt/index.mdx +++ b/main/docs/quickstart/webapp/nuxt/index.mdx @@ -5,6 +5,53 @@ sidebarTitle: Nuxt.js title: Add Login to Your Nuxt.js Application --- +import {JsonLd} from "/snippets/JsonLd.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..e447999e41 100644 --- a/main/docs/quickstart/webapp/python/index.mdx +++ b/main/docs/quickstart/webapp/python/index.mdx @@ -7,6 +7,46 @@ title: 'Add Login to Your Flask Application' import {AuthCodeGroup} from "/snippets/AuthCodeGroup.jsx"; +import {JsonLd} from "/snippets/JsonLd.jsx"; + + **Prerequisites:** Before you begin, ensure you have the following installed: diff --git a/main/snippets/JsonLd.jsx b/main/snippets/JsonLd.jsx new file mode 100644 index 0000000000..9465b537d2 --- /dev/null +++ b/main/snippets/JsonLd.jsx @@ -0,0 +1,6 @@ +export const JsonLd = ({ data }) => ( +