@cdmbase/wiki-browser 12.0.18-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/lib/components/Logo.d.ts +4 -0
- package/lib/components/Logo.d.ts.map +1 -0
- package/lib/components/Logo.js +16 -0
- package/lib/components/Logo.js.map +1 -0
- package/lib/components/help/SidebarSearch.d.ts +8 -0
- package/lib/components/help/SidebarSearch.d.ts.map +1 -0
- package/lib/components/help/SidebarSearch.js +111 -0
- package/lib/components/help/SidebarSearch.js.map +1 -0
- package/lib/components/help/index.d.ts +2 -0
- package/lib/components/help/index.d.ts.map +1 -0
- package/lib/components/landing/FeatureCard.d.ts +13 -0
- package/lib/components/landing/FeatureCard.d.ts.map +1 -0
- package/lib/components/landing/FeatureCard.js +85 -0
- package/lib/components/landing/FeatureCard.js.map +1 -0
- package/lib/components/landing/QuickLinkCard.d.ts +8 -0
- package/lib/components/landing/QuickLinkCard.d.ts.map +1 -0
- package/lib/components/landing/QuickLinkCard.js +26 -0
- package/lib/components/landing/QuickLinkCard.js.map +1 -0
- package/lib/components/landing/SearchInput.d.ts +10 -0
- package/lib/components/landing/SearchInput.d.ts.map +1 -0
- package/lib/components/landing/SearchInput.js +223 -0
- package/lib/components/landing/SearchInput.js.map +1 -0
- package/lib/components/landing/index.d.ts +4 -0
- package/lib/components/landing/index.d.ts.map +1 -0
- package/lib/components/welcome.d.ts +3 -0
- package/lib/components/welcome.d.ts.map +1 -0
- package/lib/compute.d.ts +4 -0
- package/lib/compute.d.ts.map +1 -0
- package/lib/compute.js +96 -0
- package/lib/compute.js.map +1 -0
- package/lib/config/env-config.d.ts +4 -0
- package/lib/config/env-config.d.ts.map +1 -0
- package/lib/config/env-config.js +7 -0
- package/lib/config/env-config.js.map +1 -0
- package/lib/docs.config.d.ts +48 -0
- package/lib/docs.config.d.ts.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/loaders/search.d.ts +1 -0
- package/lib/loaders/search.d.ts.map +1 -0
- package/lib/module.d.ts +4 -0
- package/lib/module.d.ts.map +1 -0
- package/lib/module.js +11 -0
- package/lib/module.js.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts +4 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.js +222 -0
- package/lib/pages/ArticlePage/ArticlePage.js.map +1 -0
- package/lib/pages/ArticlePage/index.d.ts +3 -0
- package/lib/pages/ArticlePage/index.d.ts.map +1 -0
- package/lib/pages/ArticlePage/index.js +3 -0
- package/lib/pages/ArticlePage/index.js.map +1 -0
- package/lib/pages/CategoryCollection/CategoryCollection.d.ts +4 -0
- package/lib/pages/CategoryCollection/CategoryCollection.d.ts.map +1 -0
- package/lib/pages/CategoryCollection/CategoryCollection.js +103 -0
- package/lib/pages/CategoryCollection/CategoryCollection.js.map +1 -0
- package/lib/pages/CategoryCollection/index.d.ts +3 -0
- package/lib/pages/CategoryCollection/index.d.ts.map +1 -0
- package/lib/pages/CategoryCollection/index.js +3 -0
- package/lib/pages/CategoryCollection/index.js.map +1 -0
- package/lib/pages/Help/HelpIndex.d.ts +4 -0
- package/lib/pages/Help/HelpIndex.d.ts.map +1 -0
- package/lib/pages/Help/HelpIndex.js +44 -0
- package/lib/pages/Help/HelpIndex.js.map +1 -0
- package/lib/pages/Help/index.d.ts +4 -0
- package/lib/pages/Help/index.d.ts.map +1 -0
- package/lib/pages/Help/index.js +226 -0
- package/lib/pages/Help/index.js.map +1 -0
- package/lib/pages/Landing/index.d.ts +3 -0
- package/lib/pages/Landing/index.d.ts.map +1 -0
- package/lib/pages/Landing/index.js +281 -0
- package/lib/pages/Landing/index.js.map +1 -0
- package/lib/routes.json +2533 -0
- package/lib/seo.d.ts +22 -0
- package/lib/seo.d.ts.map +1 -0
- package/lib/slot-fill/FooterFill.d.ts +3 -0
- package/lib/slot-fill/FooterFill.d.ts.map +1 -0
- package/lib/slot-fill/FooterFill.js +18 -0
- package/lib/slot-fill/FooterFill.js.map +1 -0
- package/lib/slot-fill/LogoFill.d.ts +5 -0
- package/lib/slot-fill/LogoFill.d.ts.map +1 -0
- package/lib/slot-fill/LogoFill.js +74 -0
- package/lib/slot-fill/LogoFill.js.map +1 -0
- package/lib/slot-fill/consts.d.ts +5 -0
- package/lib/slot-fill/consts.d.ts.map +1 -0
- package/lib/slot-fill/consts.js +1 -0
- package/lib/slot-fill/consts.js.map +1 -0
- package/lib/slot-fill/index.d.ts +4 -0
- package/lib/slot-fill/index.d.ts.map +1 -0
- package/lib/templates/assets/images/add-link-frontend.png +0 -0
- package/lib/templates/assets/images/add-package-backend.png +0 -0
- package/lib/templates/assets/images/add-to-backend-module.png +0 -0
- package/lib/templates/assets/images/add-upload-client-frontend.png +0 -0
- package/lib/templates/assets/images/additional-parameters.png +0 -0
- package/lib/templates/assets/images/aeh-implementation.png +0 -0
- package/lib/templates/assets/images/aeh-usage.png +0 -0
- package/lib/templates/assets/images/apollo-client/recommendation_cache_mgmt.png +0 -0
- package/lib/templates/assets/images/app-deploy-new-version/jenkins1.PNG +0 -0
- package/lib/templates/assets/images/app-deploy-new-version/jenkins2.PNG +0 -0
- package/lib/templates/assets/images/auth-wrapper-code.png +0 -0
- package/lib/templates/assets/images/cdebase.png +0 -0
- package/lib/templates/assets/images/cdm-locales-directory.png +0 -0
- package/lib/templates/assets/images/client-settings.png +0 -0
- package/lib/templates/assets/images/codegen_file_update.png +0 -0
- package/lib/templates/assets/images/configuration.png +0 -0
- package/lib/templates/assets/images/copy-plugin.png +0 -0
- package/lib/templates/assets/images/docusaurus.png +0 -0
- package/lib/templates/assets/images/error-link.png +0 -0
- package/lib/templates/assets/images/error-sample.png +0 -0
- package/lib/templates/assets/images/extension copy.png +0 -0
- package/lib/templates/assets/images/extension.png +0 -0
- package/lib/templates/assets/images/graphql/graphql-folder-backend.png +0 -0
- package/lib/templates/assets/images/graphql/graphql-folder-with-gql.png +0 -0
- package/lib/templates/assets/images/i18n-config.png +0 -0
- package/lib/templates/assets/images/image.png +0 -0
- package/lib/templates/assets/images/logo.svg +10 -0
- package/lib/templates/assets/images/logo1.svg +1 -0
- package/lib/templates/assets/images/modify-upload-false-server.png +0 -0
- package/lib/templates/assets/images/navigation-auth-enabled.png +0 -0
- package/lib/templates/assets/images/org-dashboard-navigation.png +0 -0
- package/lib/templates/assets/images/org-navigation.png +0 -0
- package/lib/templates/assets/images/preferences_graphql_type.png +0 -0
- package/lib/templates/assets/images/provider.png +0 -0
- package/lib/templates/assets/images/route-config.png +0 -0
- package/lib/templates/assets/images/service-accounts.png +0 -0
- package/lib/templates/assets/images/source-code/source-code-environments.png +0 -0
- package/lib/templates/assets/images/source-code/source-code-organization.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/jenkins-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/lerna-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/root-package-json-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/values-dev-changes.png +0 -0
- package/lib/templates/assets/images/sso-mappers.png +0 -0
- package/lib/templates/assets/images/sso-picture-mapper.png +0 -0
- package/lib/templates/assets/images/sso-settings.png +0 -0
- package/lib/templates/assets/images/timesheet_apollo_cache.png +0 -0
- package/lib/templates/assets/images/timesheet_query.png +0 -0
- package/lib/templates/assets/images/tutorial/docsVersionDropdown.png +0 -0
- package/lib/templates/assets/images/tutorial/localeDropdown.png +0 -0
- package/lib/templates/assets/images/unauthenticated.png +0 -0
- package/lib/templates/assets/images/undraw_docusaurus_mountain.svg +170 -0
- package/lib/templates/assets/images/undraw_docusaurus_react.svg +169 -0
- package/lib/templates/assets/images/undraw_docusaurus_tree.svg +1 -0
- package/lib/templates/assets/images/vite-plugin-config.png +0 -0
- package/lib/templates/content/docs/Generators/Project/generate-fullproject.md +12 -0
- package/lib/templates/content/docs/LLM/Logger.llm.md +194 -0
- package/lib/templates/content/docs/LLM/backend-proxies-services-llm.md +2687 -0
- package/lib/templates/content/docs/LLM/backend-service-llm.md +3384 -0
- package/lib/templates/content/docs/LLM/db_migration_llm.md +954 -0
- package/lib/templates/content/docs/LLM/frontend/REMIX-15.3-upgrade-llm.md +1245 -0
- package/lib/templates/content/docs/LLM/inngest/INNGEST_FUNCTION_DEVELOPMENT_GUIDE_LLM.md +1241 -0
- package/lib/templates/content/docs/LLM/inngest/INNGEST_NAMESPACE_LLM.md +384 -0
- package/lib/templates/content/docs/LLM/llm_workflow_namespace.md +384 -0
- package/lib/templates/content/docs/LLM/organization-components-form-llm.md +1395 -0
- package/lib/templates/content/docs/LLM/page-component-llm.md +173 -0
- package/lib/templates/content/docs/LLM/preferences-settings-llm.md +2781 -0
- package/lib/templates/content/docs/LLM/tailwind-css-llm.md +502 -0
- package/lib/templates/content/docs/UI/SchemaBasedUI.md +334 -0
- package/lib/templates/content/docs/UI/SlotFillComponent.md +334 -0
- package/lib/templates/content/docs/adminide-modules/account/auth0-login.md +31 -0
- package/lib/templates/content/docs/adminide-modules/account/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/account/keycloak-remix-setup.md +86 -0
- package/lib/templates/content/docs/adminide-modules/account/remix-auth-setup.md +79 -0
- package/lib/templates/content/docs/adminide-modules/account/various-auth-qatest.md +157 -0
- package/lib/templates/content/docs/adminide-modules/api-builders/graphql.md +906 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/settingup-stripe-locally.md +25 -0
- package/lib/templates/content/docs/adminide-modules/billing/tier-config.md +293 -0
- package/lib/templates/content/docs/adminide-modules/connectors/Connector.md +207 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/index.md +16 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/setup.md +435 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/upload-file-using-signed-url.md +161 -0
- package/lib/templates/content/docs/adminide-modules/preferences/AddAdditionalPermissions.md +151 -0
- package/lib/templates/content/docs/adminide-modules/preferences/Configuration.md +241 -0
- package/lib/templates/content/docs/adminide-modules/preferences/Policy-Configuration.md +61 -0
- package/lib/templates/content/docs/adminide-modules/preferences/UI-components/ResourceSettingsLoader.md +319 -0
- package/lib/templates/content/docs/adminide-modules/preferences/contribute_scope_target.md +280 -0
- package/lib/templates/content/docs/adminide-modules/preferences/generate-urii.md +94 -0
- package/lib/templates/content/docs/adminide-modules/preferences/index.md +28 -0
- package/lib/templates/content/docs/adminide-modules/preferences/machine-configuration.md +157 -0
- package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/generateCdecodeUri.md +1289 -0
- package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/migratingFromUseSettings.md +215 -0
- package/lib/templates/content/docs/adminide-modules/preferences/permissions/Roles-Permissions.md +72 -0
- package/lib/templates/content/docs/adminide-modules/preferences/permissions/settingUserPermissions.md +139 -0
- package/lib/templates/content/docs/adminide-modules/preferences/preference-dependency.md +138 -0
- package/lib/templates/content/docs/adminide-modules/preferences/route-based-configuration.md +41 -0
- package/lib/templates/content/docs/adminide-modules/preferences/schema-configuration.md +71 -0
- package/lib/templates/content/docs/adminide-modules/preferences/supported.md +24 -0
- package/lib/templates/content/docs/adminide-modules/preferences/useSettingsLoader.md +248 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/auth-providers.md +1317 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/keycloak-guide.md +543 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-based-authentication.md +846 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-management.md +708 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenants.md +1117 -0
- package/lib/templates/content/docs/chrome-extension/index.md +14 -0
- package/lib/templates/content/docs/chrome-extension/setup.md +30 -0
- package/lib/templates/content/docs/contributing/adding-package.md +23 -0
- package/lib/templates/content/docs/contributing/adding_new_modules.md +99 -0
- package/lib/templates/content/docs/contributing/architecture-updates.md +19 -0
- package/lib/templates/content/docs/contributing/avoid-using-promises-ui.md +116 -0
- package/lib/templates/content/docs/contributing/coding-guidelines.md +111 -0
- package/lib/templates/content/docs/contributing/do-and-dont.md +42 -0
- package/lib/templates/content/docs/contributing/faq.md +22 -0
- package/lib/templates/content/docs/contributing/folder-setup/browser.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/config.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/containers-server.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/core.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/graphql.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/index.md +30 -0
- package/lib/templates/content/docs/contributing/folder-setup/module.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/server.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/services.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/store.md +12 -0
- package/lib/templates/content/docs/contributing/frontend-coding.md +30 -0
- package/lib/templates/content/docs/contributing/git-subtree-sharing.md +73 -0
- package/lib/templates/content/docs/contributing/graphql-subscriptions.md +69 -0
- package/lib/templates/content/docs/contributing/how-to-contribute.md +30 -0
- package/lib/templates/content/docs/contributing/how_to_check_pure_esm.md +29 -0
- package/lib/templates/content/docs/contributing/index.md +60 -0
- package/lib/templates/content/docs/contributing/installation-issues.md +23 -0
- package/lib/templates/content/docs/contributing/keyboard-shortcut.md +131 -0
- package/lib/templates/content/docs/contributing/language/locale-support.md +12 -0
- package/lib/templates/content/docs/contributing/lerna-build-tools.md +516 -0
- package/lib/templates/content/docs/contributing/lerna-yarn-workspaces.md +95 -0
- package/lib/templates/content/docs/contributing/lint-and-formatter.md +20 -0
- package/lib/templates/content/docs/contributing/mobile-setup.md +16 -0
- package/lib/templates/content/docs/contributing/project-setup.md +233 -0
- package/lib/templates/content/docs/contributing/react/index.md +14 -0
- package/lib/templates/content/docs/contributing/react/lazy-component.md +70 -0
- package/lib/templates/content/docs/contributing/run-various-options.md +124 -0
- package/lib/templates/content/docs/contributing/schema-first-graphql-types.md +37 -0
- package/lib/templates/content/docs/contributing/source-code-organization.md +57 -0
- package/lib/templates/content/docs/contributing/staging-docker.md +88 -0
- package/lib/templates/content/docs/contributing/third-party/apollo-client-v3-tutorials.md +28 -0
- package/lib/templates/content/docs/contributing/third-party/index.md +18 -0
- package/lib/templates/content/docs/contributing/typescript-contribution.md +16 -0
- package/lib/templates/content/docs/devops/app-deploy-new-version.md +30 -0
- package/lib/templates/content/docs/devops/index.md +14 -0
- package/lib/templates/content/docs/devops/mobile-jenkins-build.md +40 -0
- package/lib/templates/content/docs/devops/versioning-the-project.md +128 -0
- package/lib/templates/content/docs/error-handler/application-error-handler.md +40 -0
- package/lib/templates/content/docs/error-handler/error-handling.md +26 -0
- package/lib/templates/content/docs/error-handler/index.md +16 -0
- package/lib/templates/content/docs/error-handler/logging-errors.md +14 -0
- package/lib/templates/content/docs/feature-api/copy-operation.md +427 -0
- package/lib/templates/content/docs/feature-api/feature-browser/assets.md +46 -0
- package/lib/templates/content/docs/feature-api/feature-browser/auth-permissions.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-browser/feature.md +131 -0
- package/lib/templates/content/docs/feature-api/feature-browser/index.md +22 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routes-menu.md +110 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routing-convention.md +124 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routing.md +338 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/auth-permissions.md +20 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/feature.md +130 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/index.md +18 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/navigation.md +187 -0
- package/lib/templates/content/docs/feature-api/feature-server/Scheduling.md +44 -0
- package/lib/templates/content/docs/feature-api/feature-server/dataloader.md +320 -0
- package/lib/templates/content/docs/feature-api/feature-server/dependency-injection.md +81 -0
- package/lib/templates/content/docs/feature-api/feature-server/feature.md +65 -0
- package/lib/templates/content/docs/feature-api/feature-server/generic-dataloader.md +135 -0
- package/lib/templates/content/docs/feature-api/feature-server/index.md +40 -0
- package/lib/templates/content/docs/feature-api/feature-server/migration.md +127 -0
- package/lib/templates/content/docs/feature-api/feature-server/mongo-model.md +72 -0
- package/lib/templates/content/docs/feature-api/feature-server/permissions.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-server/policies.md +57 -0
- package/lib/templates/content/docs/feature-api/feature-server/preferences.md +57 -0
- package/lib/templates/content/docs/feature-api/feature-server/repositories.md +114 -0
- package/lib/templates/content/docs/feature-api/feature-server/resolvers.md +126 -0
- package/lib/templates/content/docs/feature-api/feature-server/rules.md +132 -0
- package/lib/templates/content/docs/feature-api/feature-server/schema.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-server/services.md +102 -0
- package/lib/templates/content/docs/feature-api/feature-server/setup-resource-crud.md +359 -0
- package/lib/templates/content/docs/feature-api/index.md +18 -0
- package/lib/templates/content/docs/graphql/apolloClient-mutation.md +94 -0
- package/lib/templates/content/docs/graphql/index.md +14 -0
- package/lib/templates/content/docs/graphql/scalars.md +15 -0
- package/lib/templates/content/docs/help/index.md +14 -0
- package/lib/templates/content/docs/help/intro.md +16 -0
- package/lib/templates/content/docs/intl/ant-design-menu-translation.md +74 -0
- package/lib/templates/content/docs/intl/intl-namespace.md +129 -0
- package/lib/templates/content/docs/intl/vite-plugin-intl.md +87 -0
- package/lib/templates/content/docs/intl/webpack-plugin-intl.md +12 -0
- package/lib/templates/content/docs/intro.md +18 -0
- package/lib/templates/content/docs/knowledge/basic-fullstack.md +238 -0
- package/lib/templates/content/docs/mailing/index.md +14 -0
- package/lib/templates/content/docs/mailing/mailing-template.md +148 -0
- package/lib/templates/content/docs/mobile/App-navigation-generator.md +410 -0
- package/lib/templates/content/docs/mobile/MobileTestCases.md +264 -0
- package/lib/templates/content/docs/mobile/eas-profile-build.md +107 -0
- package/lib/templates/content/docs/mobile/expo-push-notification-setup.md +216 -0
- package/lib/templates/content/docs/mobile/index.md +14 -0
- package/lib/templates/content/docs/mobile/routes.md +83 -0
- package/lib/templates/content/docs/organization/adding-account-context.md +116 -0
- package/lib/templates/content/docs/organization/adding-org-mobile-navigation.md +22 -0
- package/lib/templates/content/docs/organization/adding-org-web-navigation.md +12 -0
- package/lib/templates/content/docs/organization/index.md +20 -0
- package/lib/templates/content/docs/organization/initialization.md +20 -0
- package/lib/templates/content/docs/organization/organization-resource-vs-resource.md +112 -0
- package/lib/templates/content/docs/remix/configuration/component-structure-best-practices.md +152 -0
- package/lib/templates/content/docs/remix/configuration/configurations.md +218 -0
- package/lib/templates/content/docs/remix/configuration/css-import-and-stylesheets.md +142 -0
- package/lib/templates/content/docs/remix/configuration/dont-subcomponent-network.md +166 -0
- package/lib/templates/content/docs/remix/configuration/generated-data-loaders.md +122 -0
- package/lib/templates/content/docs/remix/configuration/generated-resource-loaders.md +257 -0
- package/lib/templates/content/docs/remix/configuration/query-params-generator.md +216 -0
- package/lib/templates/content/docs/remix/configuration/routes-extra-icons.md +103 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-advanced.md +86 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-auth.md +113 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-best-practices.md +55 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-fields.md +79 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-graphql.md +79 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-index.md +112 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-loaders.md +165 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-middleware.md +196 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-overview.md +53 -0
- package/lib/templates/content/docs/remix/data-loaders.md +43 -0
- package/lib/templates/content/docs/remix/devtools/remix-devtools.md +58 -0
- package/lib/templates/content/docs/remix/examples/changes-using-servercode.md +79 -0
- package/lib/templates/content/docs/remix/extra-icons.md +62 -0
- package/lib/templates/content/docs/remix/extra-links.md +65 -0
- package/lib/templates/content/docs/remix/generated-data-loaders.md +114 -0
- package/lib/templates/content/docs/remix/queryParamsGenerator.md +89 -0
- package/lib/templates/content/docs/remix/resources.md +16 -0
- package/lib/templates/content/docs/remix/styles.md +132 -0
- package/lib/templates/content/docs/remix/wiki.md +12 -0
- package/lib/templates/content/docs/security/auth-wrapper/auth-wrapper.md +24 -0
- package/lib/templates/content/docs/security/index.md +18 -0
- package/lib/templates/content/docs/security/secure-button-mobilenative.md +88 -0
- package/lib/templates/content/docs/security/secure-button-web.md +89 -0
- package/lib/templates/content/docs/server-side/account-customization.md +82 -0
- package/lib/templates/content/docs/server-side/apollo/caching.md +164 -0
- package/lib/templates/content/docs/server-side/backend-architecture/FINAL-DECISION.md +209 -0
- package/lib/templates/content/docs/server-side/backend-architecture/TRUE-FINAL-ARCHITECTURE.md +603 -0
- package/lib/templates/content/docs/server-side/backend-architecture/index1.md +0 -0
- package/lib/templates/content/docs/server-side/backend-coding.md +839 -0
- package/lib/templates/content/docs/server-side/e2b/manageing-template.md +197 -0
- package/lib/templates/content/docs/server-side/index.md +14 -0
- package/lib/templates/content/docs/server-side/inngest-functions-module.md +309 -0
- package/lib/templates/content/docs/server-side/listen-stripe-events.md +43 -0
- package/lib/templates/content/docs/server-side/slug-service.md +323 -0
- package/lib/templates/content/docs/tests/index.md +18 -0
- package/lib/templates/content/docs/tests/jest-test-debug-vscode.md +40 -0
- package/lib/templates/content/docs/tests/known-errors.md +116 -0
- package/lib/templates/content/docs/tests/service-test-template.md +118 -0
- package/lib/templates/content/docs/tests/test-setup.md +93 -0
- package/lib/templates/content/docs/xstate.md +23 -0
- package/lib/types.d.ts +37 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/utils/docsNavigation.d.ts +9 -0
- package/lib/utils/docsNavigation.d.ts.map +1 -0
- package/lib/utils/docsNavigation.js +37 -0
- package/lib/utils/docsNavigation.js.map +1 -0
- package/lib/utils/helpCenterUtils.d.ts +26 -0
- package/lib/utils/helpCenterUtils.d.ts.map +1 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/markdownLoader.d.ts +36 -0
- package/lib/utils/markdownLoader.d.ts.map +1 -0
- package/lib/utils/markdownLoader.js +2242 -0
- package/lib/utils/markdownLoader.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
# Keycloak Dashboard Setup Guide
|
|
2
|
+
|
|
3
|
+
This comprehensive guide covers how to configure different types of clients in the Keycloak Admin Console dashboard. We'll cover three main authentication flows:
|
|
4
|
+
|
|
5
|
+
1. **Client Credentials Flow** - For machine-to-machine authentication
|
|
6
|
+
2. **Implicit Flow** - For single-page applications (SPAs)
|
|
7
|
+
3. **Standard Flow (Authorization Code) with Credentials** - For traditional web applications with PKCE support
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Table of Contents
|
|
12
|
+
|
|
13
|
+
- [Prerequisites](#prerequisites)
|
|
14
|
+
- [1. Client Credentials Flow Setup](#1-client-credentials-flow-setup)
|
|
15
|
+
- [2. Implicit Flow Setup](#2-implicit-flow-setup)
|
|
16
|
+
- [3. Standard Flow with Credentials Setup](#3-standard-flow-with-credentials-setup)
|
|
17
|
+
- [Troubleshooting](#troubleshooting)
|
|
18
|
+
- [Best Practices](#best-practices)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Prerequisites
|
|
23
|
+
|
|
24
|
+
Before starting, ensure you have:
|
|
25
|
+
|
|
26
|
+
- Access to Keycloak Admin Console
|
|
27
|
+
- Admin privileges for the realm you're working with
|
|
28
|
+
- Basic understanding of OAuth 2.0 flows
|
|
29
|
+
- Knowledge of your application's redirect URIs and web origins
|
|
30
|
+
|
|
31
|
+
**Accessing Keycloak Admin Console:**
|
|
32
|
+
|
|
33
|
+
1. Navigate to your Keycloak instance URL (e.g., `https://keycloak.yourdomain.com`)
|
|
34
|
+
2. Click **Administration Console**
|
|
35
|
+
3. Log in with admin credentials
|
|
36
|
+
4. Select your realm from the dropdown (top-left corner)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 1. Client Credentials Flow Setup
|
|
41
|
+
|
|
42
|
+
The Client Credentials flow is used for **machine-to-machine (M2M) authentication** where there's no user involved. This is ideal for:
|
|
43
|
+
|
|
44
|
+
- Service-to-service communication
|
|
45
|
+
- Backend API authentication
|
|
46
|
+
- Automated processes
|
|
47
|
+
|
|
48
|
+
### Step 1: Create a New Client
|
|
49
|
+
|
|
50
|
+
1. In the Keycloak Admin Console, navigate to:
|
|
51
|
+
- **Clients** → Click **Create client** (or **Add client**)
|
|
52
|
+
|
|
53
|
+
2. **Client Settings:**
|
|
54
|
+
- **Client type:** Select **OpenID Connect**
|
|
55
|
+
- **Client ID:** Enter a unique identifier (e.g., `my-service-client`)
|
|
56
|
+
- Click **Next**
|
|
57
|
+
|
|
58
|
+
### Step 2: Configure Capability Config
|
|
59
|
+
|
|
60
|
+
1. **Capability config** screen:
|
|
61
|
+
- ✅ **Client authentication:** **ON** (Required for client credentials)
|
|
62
|
+
- ✅ **Service accounts roles:** **ON** (Enables service account)
|
|
63
|
+
- ❌ **Authorization:** OFF (unless you need fine-grained authorization)
|
|
64
|
+
- ❌ **Standard flow:** OFF (not needed for client credentials)
|
|
65
|
+
- ❌ **Direct access grants:** OFF (optional, enables password grant)
|
|
66
|
+
- ❌ **Implicit flow:** OFF
|
|
67
|
+
- Click **Next**
|
|
68
|
+
|
|
69
|
+
### Step 3: Configure Login Settings
|
|
70
|
+
|
|
71
|
+
1. **Login settings:**
|
|
72
|
+
- **Root URL:** Leave empty or enter your service base URL
|
|
73
|
+
- **Home URL:** Leave empty
|
|
74
|
+
- **Valid redirect URIs:** Leave empty (not used in client credentials flow)
|
|
75
|
+
- **Web origins:** Leave empty or add `*` for development
|
|
76
|
+
- Click **Save**
|
|
77
|
+
|
|
78
|
+
### Step 4: Enable Service Account Roles
|
|
79
|
+
|
|
80
|
+
1. After saving, you'll be on the **Client details** page
|
|
81
|
+
2. Navigate to the **Service account roles** tab
|
|
82
|
+
3. Click **Assign role**
|
|
83
|
+
4. You'll see two options:
|
|
84
|
+
- **Filter by clients** - Assign roles from other clients
|
|
85
|
+
- **Filter by realm** - Assign realm-level roles
|
|
86
|
+
|
|
87
|
+
#### Assign Realm Management Roles (Common Use Case)
|
|
88
|
+
|
|
89
|
+
1. Click **Filter by realm**
|
|
90
|
+
2. In the search box, type `realm-management` or browse available roles
|
|
91
|
+
3. Select the roles you need:
|
|
92
|
+
- **realm-admin** - Full realm administration
|
|
93
|
+
- **manage-users** - User management
|
|
94
|
+
- **manage-clients** - Client management
|
|
95
|
+
- **view-users** - Read-only user access
|
|
96
|
+
- **manage-realm** - Realm configuration management
|
|
97
|
+
4. Click **Assign**
|
|
98
|
+
|
|
99
|
+
#### Assign Client Roles
|
|
100
|
+
|
|
101
|
+
1. Click **Filter by clients**
|
|
102
|
+
2. Select the client you want to assign roles from
|
|
103
|
+
3. Select the specific roles
|
|
104
|
+
4. Click **Assign**
|
|
105
|
+
|
|
106
|
+
### Step 5: Get Client Credentials
|
|
107
|
+
|
|
108
|
+
1. Navigate to the **Credentials** tab
|
|
109
|
+
2. You'll see:
|
|
110
|
+
- **Client secret:** Copy this value (you'll only see it once!)
|
|
111
|
+
- **Client ID:** Your client identifier
|
|
112
|
+
3. **Important:** Save the client secret securely - you cannot retrieve it again
|
|
113
|
+
|
|
114
|
+
### Step 6: Test Client Credentials Flow
|
|
115
|
+
|
|
116
|
+
You can test the flow using curl:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
curl -X POST "https://your-keycloak-domain.com/realms/your-realm/protocol/openid-connect/token" \
|
|
120
|
+
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
121
|
+
-d "grant_type=client_credentials" \
|
|
122
|
+
-d "client_id=my-service-client" \
|
|
123
|
+
-d "client_secret=your-client-secret"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Expected Response:**
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
131
|
+
"expires_in": 300,
|
|
132
|
+
"token_type": "Bearer",
|
|
133
|
+
"scope": "profile email"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Step 7: Verify Service Account User
|
|
138
|
+
|
|
139
|
+
1. Navigate to **Users** → Search for your client ID (e.g., `service-account-my-service-client`)
|
|
140
|
+
2. Click on the service account user
|
|
141
|
+
3. Go to **Role mapping** tab
|
|
142
|
+
4. Verify that the assigned roles appear under **Assigned roles**
|
|
143
|
+
|
|
144
|
+
### Configuration Summary for Client Credentials Flow
|
|
145
|
+
|
|
146
|
+
| Setting | Value |
|
|
147
|
+
| ---------------------- | ---------------------- |
|
|
148
|
+
| Client authentication | ✅ ON |
|
|
149
|
+
| Service accounts roles | ✅ ON |
|
|
150
|
+
| Standard flow | ❌ OFF |
|
|
151
|
+
| Implicit flow | ❌ OFF |
|
|
152
|
+
| Direct access grants | ❌ OFF (optional) |
|
|
153
|
+
| Public client | ❌ OFF |
|
|
154
|
+
| Authorization | ❌ OFF (unless needed) |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 2. Implicit Flow Setup
|
|
159
|
+
|
|
160
|
+
The Implicit flow is designed for **single-page applications (SPAs)** and mobile apps where the client secret cannot be securely stored. This flow returns tokens directly to the browser.
|
|
161
|
+
|
|
162
|
+
**⚠️ Security Note:** Implicit flow is considered less secure than Authorization Code flow with PKCE. Consider using Standard Flow with PKCE instead.
|
|
163
|
+
|
|
164
|
+
### Step 1: Create a New Client
|
|
165
|
+
|
|
166
|
+
1. Navigate to **Clients** → Click **Create client**
|
|
167
|
+
2. **Client Settings:**
|
|
168
|
+
- **Client type:** Select **OpenID Connect**
|
|
169
|
+
- **Client ID:** Enter a unique identifier (e.g., `my-spa-client`)
|
|
170
|
+
- Click **Next**
|
|
171
|
+
|
|
172
|
+
### Step 2: Configure Capability Config
|
|
173
|
+
|
|
174
|
+
1. **Capability config** screen:
|
|
175
|
+
- ❌ **Client authentication:** **OFF** (Public client)
|
|
176
|
+
- ✅ **Implicit flow:** **ON**
|
|
177
|
+
- ❌ **Standard flow:** OFF (or ON if you want both)
|
|
178
|
+
- ❌ **Direct access grants:** OFF
|
|
179
|
+
- ❌ **Service accounts roles:** OFF
|
|
180
|
+
- Click **Next**
|
|
181
|
+
|
|
182
|
+
### Step 3: Configure Login Settings
|
|
183
|
+
|
|
184
|
+
1. **Login settings:**
|
|
185
|
+
- **Root URL:** Enter your application base URL (e.g., `https://myapp.com`)
|
|
186
|
+
- **Home URL:** Enter your application home page (e.g., `https://myapp.com/home`)
|
|
187
|
+
- **Valid redirect URIs:**
|
|
188
|
+
- Add your callback URLs (e.g., `https://myapp.com/callback`, `https://myapp.com/auth/callback`)
|
|
189
|
+
- For development: `http://localhost:3000/callback`
|
|
190
|
+
- Use wildcards carefully: `https://myapp.com/*`
|
|
191
|
+
- **Web origins:**
|
|
192
|
+
- Add allowed origins (e.g., `https://myapp.com`)
|
|
193
|
+
- For development: `http://localhost:3000`
|
|
194
|
+
- Use `*` only for development (not recommended for production)
|
|
195
|
+
- **Valid post logout redirect URIs:**
|
|
196
|
+
- Add logout redirect URLs (e.g., `https://myapp.com/logout`)
|
|
197
|
+
- Click **Save**
|
|
198
|
+
|
|
199
|
+
### Step 4: Configure Advanced Settings
|
|
200
|
+
|
|
201
|
+
1. After saving, go to the **Advanced** tab
|
|
202
|
+
2. **Access Token Lifespan:** Set appropriate value (default: 5 minutes)
|
|
203
|
+
3. **Implicit flow settings:**
|
|
204
|
+
- Ensure **Implicit flow** is enabled in the main settings
|
|
205
|
+
4. **Fine Grain OpenID Connect Configuration:**
|
|
206
|
+
- **Access token:** ✅ Enabled
|
|
207
|
+
- **ID token:** ✅ Enabled (if you need user identity)
|
|
208
|
+
|
|
209
|
+
### Step 5: Configure Protocol Mappers (Optional)
|
|
210
|
+
|
|
211
|
+
1. Navigate to the **Client scopes** tab
|
|
212
|
+
2. Click on **Dedicated scope** or **Default client scopes**
|
|
213
|
+
3. You can add custom protocol mappers to include additional claims in tokens
|
|
214
|
+
|
|
215
|
+
### Step 6: Test Implicit Flow
|
|
216
|
+
|
|
217
|
+
You can test using a browser redirect:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
https://your-keycloak-domain.com/realms/your-realm/protocol/openid-connect/auth?
|
|
221
|
+
client_id=my-spa-client
|
|
222
|
+
&redirect_uri=https://myapp.com/callback
|
|
223
|
+
&response_type=id_token token
|
|
224
|
+
&scope=openid profile email
|
|
225
|
+
&nonce=random-nonce-value
|
|
226
|
+
&state=random-state-value
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## 3. Standard Flow with Credentials Setup
|
|
230
|
+
|
|
231
|
+
The Standard Flow (Authorization Code) with credentials is the **recommended approach** for web applications. When combined with PKCE (Proof Key for Code Exchange), it provides the best security for both public and confidential clients.
|
|
232
|
+
|
|
233
|
+
### Step 1: Create a New Client
|
|
234
|
+
|
|
235
|
+
1. Navigate to **Clients** → Click **Create client**
|
|
236
|
+
2. **Client Settings:**
|
|
237
|
+
- **Client type:** Select **OpenID Connect**
|
|
238
|
+
- **Client ID:** Enter a unique identifier (e.g., `my-web-app-client`)
|
|
239
|
+
- Click **Next**
|
|
240
|
+
|
|
241
|
+
### Step 2: Configure Capability Config
|
|
242
|
+
|
|
243
|
+
1. **Capability config** screen:
|
|
244
|
+
- ✅ **Client authentication:** **ON** (for confidential client with credentials)
|
|
245
|
+
- ✅ **Standard flow:** **ON** (Authorization Code flow)
|
|
246
|
+
- ✅ **Direct access grants:** **ON** (optional, enables username/password login)
|
|
247
|
+
- ❌ **Implicit flow:** OFF (not recommended)
|
|
248
|
+
- ❌ **Service accounts roles:** OFF (unless you need M2M)
|
|
249
|
+
- Click **Next**
|
|
250
|
+
|
|
251
|
+
### Step 3: Configure Login Settings
|
|
252
|
+
|
|
253
|
+
1. **Login settings:**
|
|
254
|
+
- **Root URL:** Enter your application base URL (e.g., `https://myapp.com`)
|
|
255
|
+
- **Home URL:** Enter your application home page (e.g., `https://myapp.com/home`)
|
|
256
|
+
- **Valid redirect URIs:**
|
|
257
|
+
- Add your callback URLs:
|
|
258
|
+
- `https://myapp.com/auth/callback`
|
|
259
|
+
- `https://myapp.com/callback`
|
|
260
|
+
- For development: `http://localhost:3000/auth/callback`
|
|
261
|
+
- **Important:** Must match exactly (including trailing slashes)
|
|
262
|
+
- **Web origins:**
|
|
263
|
+
- Add allowed origins:
|
|
264
|
+
- `https://myapp.com`
|
|
265
|
+
- For development: `http://localhost:3000`
|
|
266
|
+
- **Valid post logout redirect URIs:**
|
|
267
|
+
- Add logout redirect URLs:
|
|
268
|
+
- `https://myapp.com/logout`
|
|
269
|
+
- `https://myapp.com/`
|
|
270
|
+
- Click **Save**
|
|
271
|
+
|
|
272
|
+
### Step 4: Get Client Credentials
|
|
273
|
+
|
|
274
|
+
1. Navigate to the **Credentials** tab
|
|
275
|
+
2. You'll see:
|
|
276
|
+
- **Client secret:** Copy this value immediately
|
|
277
|
+
- **Client ID:** Your client identifier
|
|
278
|
+
- **Client authenticator:** Should be `client-secret` (default)
|
|
279
|
+
3. **Regenerate secret:** If needed, click **Regenerate secret** (old secret becomes invalid)
|
|
280
|
+
|
|
281
|
+
### Step 5: Configure Advanced Settings
|
|
282
|
+
|
|
283
|
+
1. Go to the **Advanced** tab
|
|
284
|
+
2. **Access Token Lifespan:** Set appropriate value (default: 5 minutes)
|
|
285
|
+
3. **PKCE Code Challenge Method:**
|
|
286
|
+
- Select **S256** (recommended) or **plain**
|
|
287
|
+
- **S256** uses SHA-256 hash (more secure)
|
|
288
|
+
4. **Proof Key for Code Exchange Code Challenge Method:**
|
|
289
|
+
- Set to **S256** for PKCE support
|
|
290
|
+
5. **Fine Grain OpenID Connect Configuration:**
|
|
291
|
+
- **Access token:** ✅ Enabled
|
|
292
|
+
- **ID token:** ✅ Enabled
|
|
293
|
+
- **Refresh token:** ✅ Enabled (for long-lived sessions)
|
|
294
|
+
|
|
295
|
+
### Step 6: Configure Client Scopes (Optional)
|
|
296
|
+
|
|
297
|
+
1. Navigate to the **Client scopes** tab
|
|
298
|
+
2. **Default client scopes** are automatically assigned:
|
|
299
|
+
- `openid` - Required for OpenID Connect
|
|
300
|
+
- `profile` - User profile information
|
|
301
|
+
- `email` - User email
|
|
302
|
+
- `roles` - User roles
|
|
303
|
+
3. **Optional scopes:**
|
|
304
|
+
- Click **Add client scope** to add custom scopes
|
|
305
|
+
- Configure protocol mappers for custom claims
|
|
306
|
+
|
|
307
|
+
### Step 7: Enable Direct Access Grants (Optional)
|
|
308
|
+
|
|
309
|
+
If you enabled **Direct access grants** in Step 2, you can also authenticate using username/password:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
curl -X POST "https://your-keycloak-domain.com/realms/your-realm/protocol/openid-connect/token" \
|
|
313
|
+
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
314
|
+
-d "grant_type=password" \
|
|
315
|
+
-d "client_id=my-web-app-client" \
|
|
316
|
+
-d "client_secret=your-client-secret" \
|
|
317
|
+
-d "username=user@example.com" \
|
|
318
|
+
-d "password=user-password" \
|
|
319
|
+
-d "scope=openid profile email"
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**⚠️ Security Warning:** Direct access grants should only be used for trusted applications. Consider using Standard Flow with PKCE instead.
|
|
323
|
+
|
|
324
|
+
### Configuration Summary for Standard Flow with Credentials
|
|
325
|
+
|
|
326
|
+
| Setting | Value |
|
|
327
|
+
| -------------------------- | --------------------- |
|
|
328
|
+
| Client authentication | ✅ ON |
|
|
329
|
+
| Public client | ❌ NO |
|
|
330
|
+
| Standard flow | ✅ ON |
|
|
331
|
+
| Direct access grants | ✅ ON (optional) |
|
|
332
|
+
| Implicit flow | ❌ OFF |
|
|
333
|
+
| PKCE Code Challenge Method | ✅ S256 (recommended) |
|
|
334
|
+
| Valid redirect URIs | ✅ Required |
|
|
335
|
+
| Web origins | ✅ Required |
|
|
336
|
+
| Client secret | ✅ Required |
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Troubleshooting
|
|
341
|
+
|
|
342
|
+
### Common Issues and Solutions
|
|
343
|
+
|
|
344
|
+
#### Issue 1: "Invalid redirect URI"
|
|
345
|
+
|
|
346
|
+
**Symptoms:**
|
|
347
|
+
|
|
348
|
+
- Error: `Invalid parameter: redirect_uri`
|
|
349
|
+
- Authorization fails with redirect URI mismatch
|
|
350
|
+
|
|
351
|
+
**Solutions:**
|
|
352
|
+
|
|
353
|
+
1. Check that the redirect URI in your request **exactly matches** one in **Valid redirect URIs**
|
|
354
|
+
2. Ensure no trailing slashes mismatch (e.g., `/callback` vs `/callback/`)
|
|
355
|
+
3. Check protocol (http vs https)
|
|
356
|
+
4. Verify port numbers match
|
|
357
|
+
5. For development, ensure `http://localhost:3000` is added (not just `http://localhost`)
|
|
358
|
+
|
|
359
|
+
#### Issue 2: "Client authentication failed"
|
|
360
|
+
|
|
361
|
+
**Symptoms:**
|
|
362
|
+
|
|
363
|
+
- Error: `Invalid client credentials`
|
|
364
|
+
- Token exchange fails
|
|
365
|
+
|
|
366
|
+
**Solutions:**
|
|
367
|
+
|
|
368
|
+
1. Verify **Client authentication** is **ON** for confidential clients
|
|
369
|
+
2. Check that **Client secret** is correct (copy-paste, no extra spaces)
|
|
370
|
+
3. Ensure you're using the correct client ID
|
|
371
|
+
4. Verify the client secret hasn't been regenerated
|
|
372
|
+
5. For client credentials flow, ensure **Service accounts roles** is enabled
|
|
373
|
+
|
|
374
|
+
#### Issue 3: "Service account not found"
|
|
375
|
+
|
|
376
|
+
**Symptoms:**
|
|
377
|
+
|
|
378
|
+
- Error when trying to use client credentials flow
|
|
379
|
+
- Service account user doesn't exist
|
|
380
|
+
|
|
381
|
+
**Solutions:**
|
|
382
|
+
|
|
383
|
+
1. Ensure **Service accounts roles** is enabled in client settings
|
|
384
|
+
2. Save the client configuration
|
|
385
|
+
3. Navigate to **Users** and search for `service-account-{client-id}`
|
|
386
|
+
4. If user doesn't exist, toggle **Service accounts roles** off and on again
|
|
387
|
+
5. Assign roles to the service account user
|
|
388
|
+
|
|
389
|
+
#### Issue 4: "CORS errors in browser"
|
|
390
|
+
|
|
391
|
+
**Symptoms:**
|
|
392
|
+
|
|
393
|
+
- Browser console shows CORS errors
|
|
394
|
+
- Requests blocked by browser
|
|
395
|
+
|
|
396
|
+
**Solutions:**
|
|
397
|
+
|
|
398
|
+
1. Add your application origin to **Web origins** in client settings
|
|
399
|
+
2. Ensure protocol matches (http vs https)
|
|
400
|
+
3. Include port number if not standard (e.g., `http://localhost:3000`)
|
|
401
|
+
4. For development, you can temporarily use `*` (not recommended for production)
|
|
402
|
+
5. Check that **Root URL** is set correctly
|
|
403
|
+
|
|
404
|
+
#### Issue 5: "PKCE code challenge mismatch"
|
|
405
|
+
|
|
406
|
+
**Symptoms:**
|
|
407
|
+
|
|
408
|
+
- Error: `Invalid code verifier`
|
|
409
|
+
- Token exchange fails after authorization
|
|
410
|
+
|
|
411
|
+
**Solutions:**
|
|
412
|
+
|
|
413
|
+
1. Ensure **code_verifier** matches the one used to generate **code_challenge**
|
|
414
|
+
2. Verify **code_challenge_method** is set correctly (S256 or plain)
|
|
415
|
+
3. Check that code verifier hasn't been modified between requests
|
|
416
|
+
4. Ensure PKCE settings are enabled in client **Advanced** tab
|
|
417
|
+
|
|
418
|
+
#### Issue 6: "Access token expired too quickly"
|
|
419
|
+
|
|
420
|
+
**Symptoms:**
|
|
421
|
+
|
|
422
|
+
- Tokens expire before expected
|
|
423
|
+
- Frequent re-authentication required
|
|
424
|
+
|
|
425
|
+
**Solutions:**
|
|
426
|
+
|
|
427
|
+
1. Go to client **Advanced** tab
|
|
428
|
+
2. Increase **Access Token Lifespan** (default: 5 minutes)
|
|
429
|
+
3. Consider implementing refresh token flow
|
|
430
|
+
4. Ensure **Refresh token** is enabled in client scopes
|
|
431
|
+
|
|
432
|
+
#### Issue 7: "Roles not appearing in token"
|
|
433
|
+
|
|
434
|
+
**Symptoms:**
|
|
435
|
+
|
|
436
|
+
- User has roles assigned but they don't appear in access token
|
|
437
|
+
- Token claims missing role information
|
|
438
|
+
|
|
439
|
+
**Solutions:**
|
|
440
|
+
|
|
441
|
+
1. Navigate to **Client scopes** → **roles** scope
|
|
442
|
+
2. Check **Mappers** tab
|
|
443
|
+
3. Ensure **realm roles** and **client roles** mappers are configured
|
|
444
|
+
4. Verify user has roles assigned in **Users** → **Role mapping**
|
|
445
|
+
5. Check that **roles** scope is included in token request
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Best Practices
|
|
450
|
+
|
|
451
|
+
### Security Best Practices
|
|
452
|
+
|
|
453
|
+
1. **Use Standard Flow with PKCE** instead of Implicit flow when possible
|
|
454
|
+
2. **Never expose client secrets** in client-side code
|
|
455
|
+
3. **Use HTTPS** for all redirect URIs in production
|
|
456
|
+
4. **Limit redirect URIs** - don't use wildcards in production
|
|
457
|
+
5. **Rotate client secrets** regularly (every 90 days)
|
|
458
|
+
6. **Use appropriate token lifespans** - balance security and user experience
|
|
459
|
+
7. **Enable refresh tokens** for long-lived sessions
|
|
460
|
+
8. **Implement proper token storage** - use httpOnly cookies or secure storage
|
|
461
|
+
|
|
462
|
+
### Client Configuration Best Practices
|
|
463
|
+
|
|
464
|
+
1. **Naming Convention:**
|
|
465
|
+
- Use descriptive client IDs (e.g., `myapp-web-client`, `myapp-mobile-client`)
|
|
466
|
+
- Include environment suffix (e.g., `myapp-web-dev`, `myapp-web-prod`)
|
|
467
|
+
|
|
468
|
+
2. **Redirect URIs:**
|
|
469
|
+
- Be specific - avoid wildcards in production
|
|
470
|
+
- Include all environments (dev, staging, prod)
|
|
471
|
+
- Document each redirect URI's purpose
|
|
472
|
+
|
|
473
|
+
3. **Scopes:**
|
|
474
|
+
- Request only necessary scopes
|
|
475
|
+
- Create custom scopes for fine-grained permissions
|
|
476
|
+
- Document scope usage
|
|
477
|
+
|
|
478
|
+
4. **Service Account Roles:**
|
|
479
|
+
- Follow principle of least privilege
|
|
480
|
+
- Assign only necessary roles
|
|
481
|
+
- Document role assignments
|
|
482
|
+
- Review role assignments regularly
|
|
483
|
+
|
|
484
|
+
5. **Token Configuration:**
|
|
485
|
+
- Set appropriate access token lifespan
|
|
486
|
+
- Enable refresh tokens for better UX
|
|
487
|
+
- Configure token claims via protocol mappers
|
|
488
|
+
|
|
489
|
+
### Environment-Specific Configuration
|
|
490
|
+
|
|
491
|
+
**Development:**
|
|
492
|
+
|
|
493
|
+
- Use `http://localhost` redirect URIs
|
|
494
|
+
- Shorter token lifespans for testing
|
|
495
|
+
- More permissive CORS settings
|
|
496
|
+
|
|
497
|
+
**Staging:**
|
|
498
|
+
|
|
499
|
+
- Use staging-specific domains
|
|
500
|
+
- Mirror production settings
|
|
501
|
+
- Test all flows thoroughly
|
|
502
|
+
|
|
503
|
+
**Production:**
|
|
504
|
+
|
|
505
|
+
- Strict redirect URI validation
|
|
506
|
+
- No wildcards in redirect URIs
|
|
507
|
+
- Longer token lifespans with refresh tokens
|
|
508
|
+
- Regular security audits
|
|
509
|
+
|
|
510
|
+
### Monitoring and Maintenance
|
|
511
|
+
|
|
512
|
+
1. **Regular Audits:**
|
|
513
|
+
- Review client configurations quarterly
|
|
514
|
+
- Check for unused clients
|
|
515
|
+
- Verify redirect URIs are still valid
|
|
516
|
+
- Review service account role assignments
|
|
517
|
+
|
|
518
|
+
2. **Documentation:**
|
|
519
|
+
- Document each client's purpose
|
|
520
|
+
- Maintain a client registry
|
|
521
|
+
- Document redirect URIs and their purposes
|
|
522
|
+
- Keep track of client secret rotation dates
|
|
523
|
+
|
|
524
|
+
3. **Testing:**
|
|
525
|
+
- Test authentication flows after configuration changes
|
|
526
|
+
- Verify token claims contain expected information
|
|
527
|
+
- Test error scenarios
|
|
528
|
+
- Validate CORS configuration
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Additional Resources
|
|
533
|
+
|
|
534
|
+
### Keycloak Documentation
|
|
535
|
+
|
|
536
|
+
- [Keycloak Server Administration Guide](https://www.keycloak.org/docs/latest/server_admin/)
|
|
537
|
+
- [Keycloak Securing Apps Guide](https://www.keycloak.org/docs/latest/securing_apps/)
|
|
538
|
+
- [OAuth 2.0 Flows](https://oauth.net/2/)
|
|
539
|
+
|
|
540
|
+
### Related Documentation in This Project
|
|
541
|
+
|
|
542
|
+
- See `docs/TROUBLESHOOTING_AUTH0_CLIENT_SECRET.md` for Auth0-specific troubleshooting
|
|
543
|
+
- Check `packages-modules/user-auth0/server-core/src/auth/keycloak/` for implementation examples
|