zuplo 6.67.32 → 6.68.0
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/README.md +9 -0
- package/docs/_index.md +44 -0
- package/docs/ai-gateway/apps.mdx +28 -0
- package/docs/ai-gateway/custom-providers.mdx +54 -0
- package/docs/ai-gateway/getting-started.mdx +224 -0
- package/docs/ai-gateway/guardrails.mdx +65 -0
- package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
- package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
- package/docs/ai-gateway/integrations/codex.mdx +78 -0
- package/docs/ai-gateway/integrations/goose.mdx +104 -0
- package/docs/ai-gateway/integrations/langchain.mdx +66 -0
- package/docs/ai-gateway/integrations/openai.mdx +99 -0
- package/docs/ai-gateway/introduction.mdx +85 -0
- package/docs/ai-gateway/managing-apps.mdx +46 -0
- package/docs/ai-gateway/managing-providers.mdx +66 -0
- package/docs/ai-gateway/managing-teams.mdx +63 -0
- package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
- package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
- package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
- package/docs/ai-gateway/providers.mdx +32 -0
- package/docs/ai-gateway/teams.mdx +38 -0
- package/docs/ai-gateway/universal-api.mdx +43 -0
- package/docs/ai-gateway/usage-limits.mdx +89 -0
- package/docs/api-management/introduction.md +127 -0
- package/docs/articles/accounts/audit-logs.mdx +227 -0
- package/docs/articles/accounts/billing.mdx +25 -0
- package/docs/articles/accounts/default-api-key.mdx +30 -0
- package/docs/articles/accounts/delete-account.mdx +36 -0
- package/docs/articles/accounts/enterprise-sso.mdx +116 -0
- package/docs/articles/accounts/managing-account-members.mdx +45 -0
- package/docs/articles/accounts/managing-project-members.mdx +37 -0
- package/docs/articles/accounts/members-and-roles.mdx +21 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
- package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
- package/docs/articles/add-api-to-backstage.mdx +216 -0
- package/docs/articles/advanced-path-matching.mdx +139 -0
- package/docs/articles/api-key-administration.mdx +47 -0
- package/docs/articles/api-key-api.mdx +220 -0
- package/docs/articles/api-key-authentication.mdx +195 -0
- package/docs/articles/api-key-buckets.mdx +61 -0
- package/docs/articles/api-key-end-users.mdx +52 -0
- package/docs/articles/api-key-leak-detection.mdx +75 -0
- package/docs/articles/api-key-management.mdx +100 -0
- package/docs/articles/api-key-react-component.mdx +90 -0
- package/docs/articles/api-key-service-limits.mdx +14 -0
- package/docs/articles/archiving-requests-to-storage.mdx +119 -0
- package/docs/articles/branch-based-deployments.mdx +184 -0
- package/docs/articles/bypass-policy-for-testing.mdx +117 -0
- package/docs/articles/check-ip-address.mdx +17 -0
- package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
- package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
- package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
- package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
- package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
- package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
- package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
- package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
- package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
- package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
- package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
- package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
- package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
- package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
- package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
- package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
- package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
- package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
- package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
- package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
- package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
- package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
- package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
- package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
- package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
- package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
- package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
- package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
- package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
- package/docs/articles/composite-policy-reference.mdx +284 -0
- package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
- package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
- package/docs/articles/convert-urls-to-openapi.mdx +62 -0
- package/docs/articles/cors.mdx +447 -0
- package/docs/articles/custom-audit-log-policy.mdx +95 -0
- package/docs/articles/custom-ci-cd-azure.mdx +81 -0
- package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
- package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
- package/docs/articles/custom-ci-cd-github.mdx +99 -0
- package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
- package/docs/articles/custom-ci-cd.mdx +82 -0
- package/docs/articles/custom-code-patterns.md +418 -0
- package/docs/articles/custom-domains.mdx +258 -0
- package/docs/articles/custom-logging-example.mdx +139 -0
- package/docs/articles/ddos-protection.mdx +138 -0
- package/docs/articles/development-options.mdx +49 -0
- package/docs/articles/environment-variables.mdx +134 -0
- package/docs/articles/environments.mdx +143 -0
- package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
- package/docs/articles/github-deployment-testing.mdx +101 -0
- package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
- package/docs/articles/graphql-security.mdx +180 -0
- package/docs/articles/handling-form-data.mdx +61 -0
- package/docs/articles/health-checks.mdx +109 -0
- package/docs/articles/hosting-options.mdx +70 -0
- package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
- package/docs/articles/limits.mdx +98 -0
- package/docs/articles/local-development-debugging.mdx +44 -0
- package/docs/articles/local-development-env-variables.mdx +23 -0
- package/docs/articles/local-development-installing-packages.mdx +23 -0
- package/docs/articles/local-development-routes-designer.mdx +27 -0
- package/docs/articles/local-development-services.mdx +40 -0
- package/docs/articles/local-development-troubleshooting.mdx +56 -0
- package/docs/articles/local-development.mdx +81 -0
- package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
- package/docs/articles/log-plugin-datadog.mdx +84 -0
- package/docs/articles/log-plugin-dynatrace.mdx +75 -0
- package/docs/articles/log-plugin-gcp.mdx +75 -0
- package/docs/articles/log-plugin-loki.mdx +136 -0
- package/docs/articles/log-plugin-new-relic.mdx +84 -0
- package/docs/articles/log-plugin-splunk.mdx +104 -0
- package/docs/articles/log-plugin-sumo.mdx +73 -0
- package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
- package/docs/articles/log-request-response-data.mdx +398 -0
- package/docs/articles/logging.mdx +115 -0
- package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
- package/docs/articles/mcp-quickstart.mdx +135 -0
- package/docs/articles/metrics-plugins.mdx +371 -0
- package/docs/articles/migrate-from-apigee.md +408 -0
- package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
- package/docs/articles/migrate-from-azure-apim.md +292 -0
- package/docs/articles/migrate-from-kong.md +300 -0
- package/docs/articles/migration-overview.md +81 -0
- package/docs/articles/monetization/api-access.mdx +69 -0
- package/docs/articles/monetization/billing-models.md +520 -0
- package/docs/articles/monetization/developer-portal.md +167 -0
- package/docs/articles/monetization/features.mdx +98 -0
- package/docs/articles/monetization/index.mdx +113 -0
- package/docs/articles/monetization/meters.mdx +135 -0
- package/docs/articles/monetization/monetization-policy.md +314 -0
- package/docs/articles/monetization/plan-examples.mdx +366 -0
- package/docs/articles/monetization/plans.mdx +266 -0
- package/docs/articles/monetization/pricing-models.mdx +225 -0
- package/docs/articles/monetization/private-plans.md +154 -0
- package/docs/articles/monetization/quickstart.md +355 -0
- package/docs/articles/monetization/rate-cards.mdx +171 -0
- package/docs/articles/monetization/stripe-integration.md +195 -0
- package/docs/articles/monetization/subscription-lifecycle.md +298 -0
- package/docs/articles/monetization/tax-collection.md +166 -0
- package/docs/articles/monetization/troubleshooting.md +272 -0
- package/docs/articles/monetization-custom.mdx +71 -0
- package/docs/articles/monetization-integrations.mdx +104 -0
- package/docs/articles/monitoring-your-gateway.mdx +53 -0
- package/docs/articles/monorepo-deployment.mdx +350 -0
- package/docs/articles/multiple-auth-policies.mdx +81 -0
- package/docs/articles/non-standard-ports.mdx +30 -0
- package/docs/articles/oauth-authentication.mdx +54 -0
- package/docs/articles/openapi-server-urls.mdx +60 -0
- package/docs/articles/openapi.mdx +130 -0
- package/docs/articles/opentelemetry.mdx +250 -0
- package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
- package/docs/articles/performance-testing.mdx +304 -0
- package/docs/articles/plugin-akamai-api-security.mdx +76 -0
- package/docs/articles/plugin-azure-blob.mdx +73 -0
- package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
- package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
- package/docs/articles/policies.mdx +33 -0
- package/docs/articles/rename-or-move-project.mdx +39 -0
- package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
- package/docs/articles/routing.mdx +193 -0
- package/docs/articles/s3-signed-url-uploads.mdx +521 -0
- package/docs/articles/secure-tunnel.mdx +84 -0
- package/docs/articles/securing-backend-mtls.mdx +268 -0
- package/docs/articles/securing-your-backend.mdx +148 -0
- package/docs/articles/security.mdx +105 -0
- package/docs/articles/sharing-code-across-projects.mdx +412 -0
- package/docs/articles/source-control-setup-azure.mdx +13 -0
- package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
- package/docs/articles/source-control-setup-github.mdx +172 -0
- package/docs/articles/source-control-setup-gitlab.mdx +12 -0
- package/docs/articles/source-control.mdx +80 -0
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
- package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
- package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
- package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
- package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
- package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
- package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
- package/docs/articles/support.mdx +144 -0
- package/docs/articles/terraform.mdx +114 -0
- package/docs/articles/testing-graphql.mdx +34 -0
- package/docs/articles/testing.mdx +522 -0
- package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
- package/docs/articles/troubleshooting.md +302 -0
- package/docs/articles/tsconfig.mdx +105 -0
- package/docs/articles/tunnel-setup.mdx +195 -0
- package/docs/articles/tunnel-troubleshooting.mdx +50 -0
- package/docs/articles/update-zup-in-github-action.mdx +110 -0
- package/docs/articles/use-openapi-extension-data.mdx +79 -0
- package/docs/articles/users/multifactor-authentication.mdx +64 -0
- package/docs/articles/users/profile.mdx +13 -0
- package/docs/articles/versioning-on-zuplo.mdx +89 -0
- package/docs/articles/waf-ddos-akamai.md +133 -0
- package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
- package/docs/articles/waf-ddos-fastly.mdx +251 -0
- package/docs/articles/waf-ddos.mdx +140 -0
- package/docs/articles/zuplo-waf.mdx +156 -0
- package/docs/ask.mdx +3 -0
- package/docs/cli/authentication.mdx +56 -0
- package/docs/cli/connectivity.mdx +38 -0
- package/docs/cli/create-zuplo-api.mdx +80 -0
- package/docs/cli/delete.mdx +79 -0
- package/docs/cli/deploy.mdx +156 -0
- package/docs/cli/deploy.partial.mdx +46 -0
- package/docs/cli/dev.mdx +115 -0
- package/docs/cli/docs.mdx +66 -0
- package/docs/cli/editor.mdx +50 -0
- package/docs/cli/global-options.mdx +19 -0
- package/docs/cli/init.mdx +74 -0
- package/docs/cli/link.mdx +74 -0
- package/docs/cli/list.mdx +55 -0
- package/docs/cli/mtls-certificate-create.mdx +94 -0
- package/docs/cli/mtls-certificate-delete.mdx +55 -0
- package/docs/cli/mtls-certificate-describe.mdx +55 -0
- package/docs/cli/mtls-certificate-disable.mdx +55 -0
- package/docs/cli/mtls-certificate-list.mdx +47 -0
- package/docs/cli/mtls-certificate-update.mdx +72 -0
- package/docs/cli/openapi-convert.mdx +111 -0
- package/docs/cli/openapi-merge.mdx +138 -0
- package/docs/cli/openapi-merge.partial.mdx +29 -0
- package/docs/cli/openapi-overlay.mdx +123 -0
- package/docs/cli/overview.mdx +78 -0
- package/docs/cli/project-create.mdx +43 -0
- package/docs/cli/source-migrate.mdx +18 -0
- package/docs/cli/source-upgrade.mdx +41 -0
- package/docs/cli/test.mdx +70 -0
- package/docs/cli/test.partial.mdx +7 -0
- package/docs/cli/tunnel-create.mdx +53 -0
- package/docs/cli/tunnel-create.partial.mdx +9 -0
- package/docs/cli/tunnel-delete.mdx +35 -0
- package/docs/cli/tunnel-delete.partial.mdx +9 -0
- package/docs/cli/tunnel-describe.mdx +45 -0
- package/docs/cli/tunnel-describe.partial.mdx +5 -0
- package/docs/cli/tunnel-list.mdx +35 -0
- package/docs/cli/tunnel-list.partial.mdx +9 -0
- package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
- package/docs/cli/tunnel-rotate-token.mdx +39 -0
- package/docs/cli/tunnel-services-describe.mdx +45 -0
- package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
- package/docs/cli/tunnel-services-update.mdx +48 -0
- package/docs/cli/variable-create.mdx +91 -0
- package/docs/cli/variable-create.partial.mdx +5 -0
- package/docs/cli/variable-update.mdx +75 -0
- package/docs/cli/variable-update.partial.mdx +5 -0
- package/docs/concepts/api-keys.md +146 -0
- package/docs/concepts/authentication.mdx +109 -0
- package/docs/concepts/how-zuplo-works.mdx +120 -0
- package/docs/concepts/project-structure.mdx +174 -0
- package/docs/concepts/rate-limiting.md +246 -0
- package/docs/concepts/request-lifecycle.mdx +56 -0
- package/docs/concepts/source-control-and-deployment.mdx +229 -0
- package/docs/conferences/conference-prize-terms.mdx +80 -0
- package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
- package/docs/dedicated/akamai/architecture.mdx +280 -0
- package/docs/dedicated/akamai/caching.mdx +212 -0
- package/docs/dedicated/akamai/cdn.mdx +156 -0
- package/docs/dedicated/architecture.mdx +208 -0
- package/docs/dedicated/custom-domains.mdx +31 -0
- package/docs/dedicated/federated-gateways.mdx +80 -0
- package/docs/dedicated/networking.mdx +69 -0
- package/docs/dedicated/overview.mdx +80 -0
- package/docs/dedicated/source-control.mdx +63 -0
- package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
- package/docs/dev-portal/introduction.mdx +65 -0
- package/docs/dev-portal/local-development.mdx +72 -0
- package/docs/dev-portal/migration.mdx +526 -0
- package/docs/dev-portal/node-modules.mdx +45 -0
- package/docs/dev-portal/updating.mdx +28 -0
- package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
- package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
- package/docs/dev-portal/zudoku/components/button.mdx +132 -0
- package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
- package/docs/dev-portal/zudoku/components/card.mdx +104 -0
- package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
- package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
- package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
- package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
- package/docs/dev-portal/zudoku/components/head.mdx +199 -0
- package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
- package/docs/dev-portal/zudoku/components/input.mdx +96 -0
- package/docs/dev-portal/zudoku/components/label.mdx +86 -0
- package/docs/dev-portal/zudoku/components/link.mdx +242 -0
- package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
- package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
- package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
- package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
- package/docs/dev-portal/zudoku/components/select.mdx +176 -0
- package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
- package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
- package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
- package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
- package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
- package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
- package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
- package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
- package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
- package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
- package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
- package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
- package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
- package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
- package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
- package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
- package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
- package/docs/dev-portal/zudoku/configuration/search.md +169 -0
- package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
- package/docs/dev-portal/zudoku/configuration/site.md +124 -0
- package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
- package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
- package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
- package/docs/dev-portal/zudoku/extending/events.md +124 -0
- package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
- package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
- package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
- package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
- package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
- package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
- package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
- package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
- package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
- package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
- package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
- package/docs/dev-portal/zudoku/plugins.md +5 -0
- package/docs/dev-portal/zudoku/writing.mdx +72 -0
- package/docs/errors/bad-request.mdx +39 -0
- package/docs/errors/build-error.mdx +45 -0
- package/docs/errors/fatal-project-error.mdx +39 -0
- package/docs/errors/gateway-timeout.mdx +33 -0
- package/docs/errors/get-head-body-error.mdx +41 -0
- package/docs/errors/main-mod-error.mdx +40 -0
- package/docs/errors/no-project-set.mdx +41 -0
- package/docs/errors/not-found.mdx +43 -0
- package/docs/errors/rate-limit-exceeded.mdx +31 -0
- package/docs/errors/schema-validation-failed.mdx +51 -0
- package/docs/errors/system-configuration-error.mdx +44 -0
- package/docs/errors/unauthorized.mdx +50 -0
- package/docs/errors/unknown-error.mdx +42 -0
- package/docs/errors.mdx +14 -0
- package/docs/guides/canary-routing-for-employees.mdx +385 -0
- package/docs/guides/geolocation-backend-routing.mdx +404 -0
- package/docs/guides/modify-openapi-paths.mdx +371 -0
- package/docs/guides/openapi-overlays.mdx +492 -0
- package/docs/guides/overview.mdx +12 -0
- package/docs/guides/user-based-backend-routing.mdx +437 -0
- package/docs/handlers/aws-lambda.mdx +201 -0
- package/docs/handlers/custom-handler.mdx +112 -0
- package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
- package/docs/handlers/mcp-server.mdx +730 -0
- package/docs/handlers/openapi.mdx +78 -0
- package/docs/handlers/redirect.mdx +115 -0
- package/docs/handlers/system-handlers.mdx +41 -0
- package/docs/handlers/url-forward.mdx +204 -0
- package/docs/handlers/url-rewrite.mdx +224 -0
- package/docs/handlers/websocket-handler.mdx +154 -0
- package/docs/home.mdx +6 -0
- package/docs/managed-edge/overview.md +78 -0
- package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
- package/docs/mcp-server/custom-tools.mdx +487 -0
- package/docs/mcp-server/graphql.mdx +241 -0
- package/docs/mcp-server/introduction.mdx +122 -0
- package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
- package/docs/mcp-server/prompts.mdx +283 -0
- package/docs/mcp-server/resources.mdx +288 -0
- package/docs/mcp-server/testing.mdx +53 -0
- package/docs/mcp-server/tools.mdx +306 -0
- package/docs/policies/_index.md +92 -0
- package/docs/policies/ab-test-inbound/intro.md +8 -0
- package/docs/policies/ab-test-inbound/policy.ts +14 -0
- package/docs/policies/ab-test-inbound/schema.json +27 -0
- package/docs/policies/ab-test-outbound/intro.md +8 -0
- package/docs/policies/ab-test-outbound/policy.ts +26 -0
- package/docs/policies/ab-test-outbound/schema.json +27 -0
- package/docs/policies/acl-policy-inbound/intro.md +5 -0
- package/docs/policies/acl-policy-inbound/policy.ts +32 -0
- package/docs/policies/acl-policy-inbound/schema.json +52 -0
- package/docs/policies/akamai-ai-firewall/schema.json +98 -0
- package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
- package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
- package/docs/policies/api-key-inbound/doc.md +77 -0
- package/docs/policies/api-key-inbound/intro.md +30 -0
- package/docs/policies/api-key-inbound/schema.json +84 -0
- package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
- package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
- package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
- package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
- package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
- package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
- package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
- package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
- package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
- package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
- package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
- package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
- package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
- package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
- package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
- package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
- package/docs/policies/audit-log-inbound/doc.md +78 -0
- package/docs/policies/audit-log-inbound/intro.md +10 -0
- package/docs/policies/audit-log-inbound/schema.json +81 -0
- package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
- package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/authzen-inbound/doc.md +24 -0
- package/docs/policies/authzen-inbound/intro.md +31 -0
- package/docs/policies/authzen-inbound/schema.json +126 -0
- package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
- package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
- package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
- package/docs/policies/basic-auth-inbound/intro.md +9 -0
- package/docs/policies/basic-auth-inbound/schema.json +99 -0
- package/docs/policies/bot-detection-inbound/intro.md +4 -0
- package/docs/policies/bot-detection-inbound/schema.json +56 -0
- package/docs/policies/brownout-inbound/doc.md +55 -0
- package/docs/policies/brownout-inbound/intro.md +12 -0
- package/docs/policies/brownout-inbound/schema.json +115 -0
- package/docs/policies/caching-inbound/doc.md +209 -0
- package/docs/policies/caching-inbound/intro.md +23 -0
- package/docs/policies/caching-inbound/schema.json +98 -0
- package/docs/policies/change-method-inbound/schema.json +56 -0
- package/docs/policies/clear-headers-inbound/schema.json +59 -0
- package/docs/policies/clear-headers-outbound/schema.json +59 -0
- package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
- package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
- package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
- package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
- package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
- package/docs/policies/composite-inbound/doc.md +69 -0
- package/docs/policies/composite-inbound/intro.md +15 -0
- package/docs/policies/composite-inbound/schema.json +59 -0
- package/docs/policies/composite-outbound/intro.md +6 -0
- package/docs/policies/composite-outbound/schema.json +59 -0
- package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
- package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
- package/docs/policies/custom-code-inbound/doc.md +267 -0
- package/docs/policies/custom-code-inbound/intro.md +2 -0
- package/docs/policies/custom-code-inbound/schema.json +48 -0
- package/docs/policies/custom-code-outbound/doc.md +235 -0
- package/docs/policies/custom-code-outbound/intro.md +2 -0
- package/docs/policies/custom-code-outbound/schema.json +43 -0
- package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
- package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
- package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
- package/docs/policies/geo-filter-inbound/doc.md +33 -0
- package/docs/policies/geo-filter-inbound/schema.json +108 -0
- package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
- package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
- package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
- package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
- package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
- package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
- package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
- package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
- package/docs/policies/hmac-auth-inbound/doc.md +30 -0
- package/docs/policies/hmac-auth-inbound/intro.md +10 -0
- package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
- package/docs/policies/hmac-auth-inbound/schema.json +53 -0
- package/docs/policies/http-deprecation-outbound/doc.md +73 -0
- package/docs/policies/http-deprecation-outbound/schema.json +83 -0
- package/docs/policies/ip-restriction-inbound/intro.md +8 -0
- package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
- package/docs/policies/ip-restriction-inbound/schema.json +58 -0
- package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
- package/docs/policies/ldap-auth-inbound/schema.json +56 -0
- package/docs/policies/mock-api-inbound/schema.json +72 -0
- package/docs/policies/moesif-inbound/doc.md +44 -0
- package/docs/policies/moesif-inbound/intro.md +6 -0
- package/docs/policies/moesif-inbound/schema.json +68 -0
- package/docs/policies/monetization-inbound/doc.md +87 -0
- package/docs/policies/monetization-inbound/intro.md +6 -0
- package/docs/policies/monetization-inbound/schema.json +102 -0
- package/docs/policies/mtls-auth-inbound/intro.md +6 -0
- package/docs/policies/mtls-auth-inbound/schema.json +68 -0
- package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
- package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
- package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
- package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
- package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
- package/docs/policies/openfga-authz-inbound/doc.md +207 -0
- package/docs/policies/openfga-authz-inbound/intro.md +17 -0
- package/docs/policies/openfga-authz-inbound/schema.json +191 -0
- package/docs/policies/openmeter-inbound/doc.md +163 -0
- package/docs/policies/openmeter-inbound/intro.md +18 -0
- package/docs/policies/openmeter-inbound/schema.json +183 -0
- package/docs/policies/prompt-injection-outbound/doc.md +106 -0
- package/docs/policies/prompt-injection-outbound/intro.md +4 -0
- package/docs/policies/prompt-injection-outbound/schema.json +74 -0
- package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
- package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
- package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
- package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
- package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
- package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
- package/docs/policies/quota-inbound/doc.md +235 -0
- package/docs/policies/quota-inbound/intro.md +7 -0
- package/docs/policies/quota-inbound/schema.json +133 -0
- package/docs/policies/rate-limit-inbound/doc.md +78 -0
- package/docs/policies/rate-limit-inbound/intro.md +30 -0
- package/docs/policies/rate-limit-inbound/schema.json +134 -0
- package/docs/policies/rbac-policy-inbound/intro.md +3 -0
- package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
- package/docs/policies/rbac-policy-inbound/schema.json +52 -0
- package/docs/policies/readme-metrics-inbound/doc.md +1 -0
- package/docs/policies/readme-metrics-inbound/intro.md +3 -0
- package/docs/policies/readme-metrics-inbound/schema.json +84 -0
- package/docs/policies/remove-headers-inbound/schema.json +59 -0
- package/docs/policies/remove-headers-outbound/schema.json +59 -0
- package/docs/policies/remove-query-params-inbound/schema.json +59 -0
- package/docs/policies/replace-string-outbound/schema.json +69 -0
- package/docs/policies/request-size-limit-inbound/schema.json +60 -0
- package/docs/policies/request-validation-inbound/doc.md +72 -0
- package/docs/policies/request-validation-inbound/intro.md +24 -0
- package/docs/policies/request-validation-inbound/schema.json +98 -0
- package/docs/policies/require-origin-inbound/intro.md +12 -0
- package/docs/policies/require-origin-inbound/schema.json +65 -0
- package/docs/policies/secret-masking-outbound/doc.md +41 -0
- package/docs/policies/secret-masking-outbound/intro.md +13 -0
- package/docs/policies/secret-masking-outbound/schema.json +65 -0
- package/docs/policies/semantic-cache-inbound/doc.md +63 -0
- package/docs/policies/semantic-cache-inbound/intro.md +4 -0
- package/docs/policies/semantic-cache-inbound/schema.json +179 -0
- package/docs/policies/set-body-inbound/intro.md +7 -0
- package/docs/policies/set-body-inbound/schema.json +56 -0
- package/docs/policies/set-headers-inbound/doc.md +41 -0
- package/docs/policies/set-headers-inbound/intro.md +2 -0
- package/docs/policies/set-headers-inbound/schema.json +83 -0
- package/docs/policies/set-headers-outbound/schema.json +83 -0
- package/docs/policies/set-query-params-inbound/schema.json +83 -0
- package/docs/policies/set-status-outbound/schema.json +62 -0
- package/docs/policies/sleep-inbound/schema.json +56 -0
- package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
- package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
- package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
- package/docs/policies/transform-body-inbound/intro.md +8 -0
- package/docs/policies/transform-body-inbound/policy.ts +16 -0
- package/docs/policies/transform-body-inbound/schema.json +27 -0
- package/docs/policies/transform-body-outbound/intro.md +8 -0
- package/docs/policies/transform-body-outbound/policy.ts +19 -0
- package/docs/policies/transform-body-outbound/schema.json +27 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
- package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
- package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
- package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
- package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
- package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
- package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
- package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
- package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
- package/docs/policies/xml-to-json-outbound/doc.md +71 -0
- package/docs/policies/xml-to-json-outbound/intro.md +4 -0
- package/docs/policies/xml-to-json-outbound/schema.json +117 -0
- package/docs/programmable-api/audit-log.mdx +74 -0
- package/docs/programmable-api/background-dispatcher.mdx +124 -0
- package/docs/programmable-api/background-loader.mdx +104 -0
- package/docs/programmable-api/cache.mdx +186 -0
- package/docs/programmable-api/compatibility-dates.mdx +201 -0
- package/docs/programmable-api/console-logging.mdx +48 -0
- package/docs/programmable-api/context-data.mdx +127 -0
- package/docs/programmable-api/custom-cors-policy.mdx +64 -0
- package/docs/programmable-api/environment.mdx +328 -0
- package/docs/programmable-api/hooks.mdx +569 -0
- package/docs/programmable-api/http-problems.mdx +385 -0
- package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
- package/docs/programmable-api/logger.mdx +223 -0
- package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
- package/docs/programmable-api/node-modules.mdx +67 -0
- package/docs/programmable-api/not-found-handler.mdx +47 -0
- package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
- package/docs/programmable-api/overview.mdx +213 -0
- package/docs/programmable-api/problem-response-formatter.mdx +183 -0
- package/docs/programmable-api/request-user.mdx +289 -0
- package/docs/programmable-api/reusing-code.mdx +26 -0
- package/docs/programmable-api/route-raw.mdx +55 -0
- package/docs/programmable-api/runtime-behaviors.mdx +25 -0
- package/docs/programmable-api/runtime-errors.mdx +246 -0
- package/docs/programmable-api/runtime-extensions.mdx +340 -0
- package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
- package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
- package/docs/programmable-api/web-crypto-apis.mdx +219 -0
- package/docs/programmable-api/web-standard-apis.mdx +109 -0
- package/docs/programmable-api/zone-cache.mdx +131 -0
- package/docs/programmable-api/zp-body-removed.mdx +32 -0
- package/docs/programmable-api/zuplo-context.mdx +414 -0
- package/docs/programmable-api/zuplo-id-token.mdx +90 -0
- package/docs/programmable-api/zuplo-json.mdx +91 -0
- package/docs/programmable-api/zuplo-request.mdx +200 -0
- package/docs/sample-apis.mdx +78 -0
- package/docs/self-hosted/overview.md +60 -0
- package/package.json +6 -5
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Using the API Key API
|
|
3
|
+
sidebar_label: Using the API
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo runs a globally distributed API Key management service that scales to
|
|
7
|
+
handle billions of daily key validation requests while maintaining low latency
|
|
8
|
+
from any region around the world.
|
|
9
|
+
|
|
10
|
+
Management of API Keys and consumers
|
|
11
|
+
[can be performed in the Zuplo Portal](./api-key-management.mdx) and for
|
|
12
|
+
end-users in the Zuplo Developer Portal. However, all management operations
|
|
13
|
+
regarding API Keys can also be performed using the
|
|
14
|
+
[Zuplo Developer API](https://zuplo.com/docs/api/api-keys-keys).
|
|
15
|
+
|
|
16
|
+
:::info
|
|
17
|
+
|
|
18
|
+
In order to obtain an API Key for the Developer API, go to your account settings
|
|
19
|
+
in the Zuplo Portal. [More information](./accounts/zuplo-api-keys)
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
## Models
|
|
24
|
+
|
|
25
|
+
The service contains three primary object: **Buckets**, **Consumers**, and **API
|
|
26
|
+
Keys**. For a conceptual overview of these objects see
|
|
27
|
+
[Key Concepts](./api-key-management#key-concepts). Below is an ER diagram
|
|
28
|
+
showing the relationships of the three primary objects and their most important
|
|
29
|
+
fields.
|
|
30
|
+
|
|
31
|
+
The Consumer is the most important object. Each consumer is in a bucket.
|
|
32
|
+
Consumers can contain one or more API Keys.
|
|
33
|
+
|
|
34
|
+
### Buckets
|
|
35
|
+
|
|
36
|
+
Buckets are the top level group for this service. A bucket could be used with a
|
|
37
|
+
single Zuplo environment or shared among multiple environments or projects. By
|
|
38
|
+
default a Zuplo API Gateway project will be created with several buckets that
|
|
39
|
+
map to production, preview, and development (working copy) environments.
|
|
40
|
+
|
|
41
|
+
Enterprise plan customers run complex configurations where buckets are shared
|
|
42
|
+
across gateway projects or even accounts. This can allow your end-users to
|
|
43
|
+
authenticate to all your APIs with a single API key with unified permissions.
|
|
44
|
+
|
|
45
|
+
### Consumers
|
|
46
|
+
|
|
47
|
+
Consumers are the core of the API Key service. The consumer is the "identity" of
|
|
48
|
+
any API Keys that are created. Consumers have a `name` which must be unique in
|
|
49
|
+
the bucket. This `name` is used as the default `user.sub` property in the API
|
|
50
|
+
Key Authentication policy.
|
|
51
|
+
|
|
52
|
+
### API Keys
|
|
53
|
+
|
|
54
|
+
A Consumer can have any number of API keys associated with it. Each API Key
|
|
55
|
+
shares the same identity (for example Consumer) when authenticating with this
|
|
56
|
+
service. Expired keys won't be permitted to authenticate after their expiration.
|
|
57
|
+
|
|
58
|
+
:::tip
|
|
59
|
+
|
|
60
|
+
In most cases, you won't manage API Keys directly. When using the API, the
|
|
61
|
+
typical configuration is to create a consumer with an API key and each consumer
|
|
62
|
+
has only a single API key except when performing operations like rolling keys.
|
|
63
|
+
|
|
64
|
+
:::
|
|
65
|
+
|
|
66
|
+
## Usage
|
|
67
|
+
|
|
68
|
+
This section explains common scenarios for managing API keys using the API. For
|
|
69
|
+
other uses, see the full [Developer API reference](https://dev.zuplo.com).
|
|
70
|
+
|
|
71
|
+
All examples assume two environment variables are set (in your terminal, not
|
|
72
|
+
inside Zuplo)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Your Zuplo Account Name
|
|
76
|
+
export ACCOUNT_NAME=my-account
|
|
77
|
+
# Your bucket API URL (Found in Settings > General)
|
|
78
|
+
export BUCKET_NAME=my-bucket
|
|
79
|
+
# Your Zuplo API Key (Found in Settings > Zuplo API Keys)
|
|
80
|
+
export ZAPI_KEY=zpka_YOUR_API_KEY
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Creating a Consumer with a Key
|
|
84
|
+
|
|
85
|
+
When creating a new Consumer, it's a good idea to include some useful metadata
|
|
86
|
+
like the `organizationId` or a particular `plan` that's associated with that
|
|
87
|
+
user.
|
|
88
|
+
|
|
89
|
+
Tags are used for querying the consumers later. It's often useful to store some
|
|
90
|
+
external identifier that links this consumer to your internal data as a tag.
|
|
91
|
+
|
|
92
|
+
```shell
|
|
93
|
+
curl \
|
|
94
|
+
https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers?with-api-key=true \
|
|
95
|
+
--request POST \
|
|
96
|
+
--header "Content-type: application/json" \
|
|
97
|
+
--header "Authorization: Bearer $API_KEY" \
|
|
98
|
+
--data @- << EOF
|
|
99
|
+
{
|
|
100
|
+
"name": "my-consumer",
|
|
101
|
+
"description": "My Consumer",
|
|
102
|
+
"metadata": {
|
|
103
|
+
"orgId": 1234,
|
|
104
|
+
"plan": "gold"
|
|
105
|
+
},
|
|
106
|
+
"tags": {
|
|
107
|
+
"externalId": "acct_12345"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
EOF
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The response will look like this:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"id": "csmr_sikZcE754kJu17X8yahPFO8J",
|
|
118
|
+
"name": "my-consumer",
|
|
119
|
+
"description": "My Consumer",
|
|
120
|
+
"createdOn": "2023-02-03T21:33:17.067Z",
|
|
121
|
+
"updatedOn": "2023-02-03T21:33:17.067Z",
|
|
122
|
+
"tags": {
|
|
123
|
+
"externalId": "acct_12345"
|
|
124
|
+
},
|
|
125
|
+
"metadata": {
|
|
126
|
+
"orgId": 1234,
|
|
127
|
+
"plan": "gold"
|
|
128
|
+
},
|
|
129
|
+
"apiKeys": [
|
|
130
|
+
{
|
|
131
|
+
"id": "key_AM7eAiR0BiaXTam951XmC9kK",
|
|
132
|
+
"createdOn": "2023-06-19T17:32:17.737Z",
|
|
133
|
+
"updatedOn": "2023-06-19T17:32:17.737Z",
|
|
134
|
+
"expiresOn": null,
|
|
135
|
+
"key": "zpka_d67b7e241bb948758f415b79aa8exxxx_2efbxxxx"
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
You can use this API Key to call your Zuplo API Gateway that's protected by the
|
|
142
|
+
[API Key Authentication](/docs/policies/api-key-inbound) policy.
|
|
143
|
+
|
|
144
|
+
### Query Consumers with API Keys By Tags
|
|
145
|
+
|
|
146
|
+
```shell
|
|
147
|
+
export ORG_ID=1234
|
|
148
|
+
curl \
|
|
149
|
+
https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers/?include-api-keys=true&key-format=visible&tag.orgId=$ORG_ID \
|
|
150
|
+
--header "Authorization: Bearer $API_KEY"
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
The response will look like this:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"data": [
|
|
158
|
+
{
|
|
159
|
+
"id": "csmr_sikZcE754kJu17X8yahPFO8J",
|
|
160
|
+
"name": "my-consumer",
|
|
161
|
+
"description": "My Consumer",
|
|
162
|
+
"createdOn": "2023-02-03T21:33:17.067Z",
|
|
163
|
+
"updatedOn": "2023-02-03T21:33:17.067Z",
|
|
164
|
+
"tags": {
|
|
165
|
+
"externalId": "acct_12345"
|
|
166
|
+
},
|
|
167
|
+
"metadata": {
|
|
168
|
+
"orgId": 1234,
|
|
169
|
+
"plan": "gold"
|
|
170
|
+
},
|
|
171
|
+
"apiKeys": [
|
|
172
|
+
{
|
|
173
|
+
"id": "key_AM7eAiR0BiaXTam951XmC9kK",
|
|
174
|
+
"createdOn": "2023-06-19T17:32:17.737Z",
|
|
175
|
+
"updatedOn": "2023-06-19T17:32:17.737Z",
|
|
176
|
+
"expiresOn": null,
|
|
177
|
+
"key": "zpka_d67b7e241bb948758f415b79aa8exxxx_2efbxxxx"
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"offset": 0,
|
|
183
|
+
"limit": 1000
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Roll a Consumer's Keys
|
|
188
|
+
|
|
189
|
+
Sometimes you will want to create a new key and expire the current keys. Instead
|
|
190
|
+
of calling the API for each key and manually creating a new key, you can simply
|
|
191
|
+
call the roll key endpoint.
|
|
192
|
+
|
|
193
|
+
:::tip{title="Tags for Request Authorization"}
|
|
194
|
+
|
|
195
|
+
One useful feature of the API Key service is that most requests can have `tags`
|
|
196
|
+
added to the query parameter even if they aren't get requests. This is useful
|
|
197
|
+
when you want to call the API and ensure some basic condition is met without
|
|
198
|
+
having to first do a GET to retrieve data on the object. For example, in the
|
|
199
|
+
roll key request below the `orgId` tag is set on the request - this ensures that
|
|
200
|
+
the consumer being updated is tagged with that org.
|
|
201
|
+
|
|
202
|
+
:::
|
|
203
|
+
|
|
204
|
+
The following call with set all existing keys to have the expiration date set in
|
|
205
|
+
the request body and will create a new key without an expiration.
|
|
206
|
+
|
|
207
|
+
```shell
|
|
208
|
+
export ORG_ID=1234
|
|
209
|
+
export CONSUMER_NAME=my-consumer
|
|
210
|
+
curl \
|
|
211
|
+
https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers/$CONSUMER_NAME/roll-key?tag.orgId=$ORG_ID \
|
|
212
|
+
--request POST \
|
|
213
|
+
--header "Authorization: Bearer $API_KEY"
|
|
214
|
+
--data '{"expiresOn":"2023-04-18"}'
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Reference
|
|
218
|
+
|
|
219
|
+
The full API Reference for the API Service is hosted using a Zuplo developer
|
|
220
|
+
portal at [https://dev.zuplo.com/docs/](https://dev.zuplo.com/docs/).
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Key Authentication & Authorization
|
|
3
|
+
sidebar_label: Authentication
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
With the [API Key Authentication Policy](../policies/api-key-inbound.mdx)
|
|
7
|
+
configured on your API routes you can build additional policies that run after
|
|
8
|
+
the API Key Authentication policy to perform additional checks or authorization
|
|
9
|
+
on the consumer.
|
|
10
|
+
|
|
11
|
+
## Request User Object
|
|
12
|
+
|
|
13
|
+
After each successful authentication the policy will set the `request.user`
|
|
14
|
+
object. The name of the API Key consumer is set to the `request.user.sub`
|
|
15
|
+
property. Any `metadata` attached to the consumer is set to the
|
|
16
|
+
`request.user.data` property. The interface of `request.user` is shown below.
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
/**
|
|
20
|
+
* The User object set by the API Key Authentication policy
|
|
21
|
+
*/
|
|
22
|
+
interface User {
|
|
23
|
+
/**
|
|
24
|
+
* The name of the API Key consumer
|
|
25
|
+
*/
|
|
26
|
+
sub: string;
|
|
27
|
+
/**
|
|
28
|
+
* The metadata attached to the API Key consumer
|
|
29
|
+
*/
|
|
30
|
+
data: any;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
So if you created a consumer with the following configuration:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"name": "my-consumer",
|
|
39
|
+
"metadata": {
|
|
40
|
+
"companyId": 12345,
|
|
41
|
+
"plan": "gold"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The request object would be the following:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
context.log.debug(request.user);
|
|
50
|
+
// Outputs:
|
|
51
|
+
// {
|
|
52
|
+
// sub: "my-consumer",
|
|
53
|
+
// data: {
|
|
54
|
+
// companyId: 12345,
|
|
55
|
+
// plan: "gold"
|
|
56
|
+
// }
|
|
57
|
+
// }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
:::note
|
|
61
|
+
|
|
62
|
+
One question you might have is why is the `request.user` object not the same
|
|
63
|
+
shape as the API Key Consumer object. for example why doesn't it has
|
|
64
|
+
`request.user.name` and `request.user.metadata` properties.
|
|
65
|
+
|
|
66
|
+
The reason is because the `request.user` object is reused by many different
|
|
67
|
+
kinds of authentication policies and they all conform to the same interface with
|
|
68
|
+
`sub` and `data`.
|
|
69
|
+
|
|
70
|
+
:::
|
|
71
|
+
|
|
72
|
+
## Using Consumer Data in Code
|
|
73
|
+
|
|
74
|
+
It's possible to write additional policies that run after the API Key
|
|
75
|
+
Authentication policy that perform further gating or authorization of the
|
|
76
|
+
request based on the data set in the consumer.
|
|
77
|
+
|
|
78
|
+
For example, you could gate access to a feature by checking for the `plan` value
|
|
79
|
+
stored in metadata (exposed via `request.user.data.plan`).
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
async function (request: ZuploRequest, context: ZuploContext) {
|
|
83
|
+
if (request.user?.data.plan !== "gold") {
|
|
84
|
+
return new Response("You need to upgrade your plan", {
|
|
85
|
+
status: 403
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return new Response("you have the gold plan!");
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The `metadata` could also be used to route requests to dedicated customer
|
|
93
|
+
services.
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
async function (request: ZuploRequest, context: ZuploContext) {
|
|
97
|
+
const { customerId } = request.user.data;
|
|
98
|
+
return fetch(`https://${customerId}.customers.example.com/`
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The `request.user` object can be used in both
|
|
103
|
+
[handlers](../handlers/custom-handler.mdx) and
|
|
104
|
+
[policies](../policies/custom-code-inbound.mdx)
|
|
105
|
+
|
|
106
|
+
If you had a simple [function handler](../handlers/custom-handler.mdx) as
|
|
107
|
+
follows, it would return a `request.user` object to your route if the API Key is
|
|
108
|
+
successfully authenticated:
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
async function (request: ZuploRequest, context: ZuploContext) {
|
|
112
|
+
// auto-serialize the user object and return it as JSON
|
|
113
|
+
return request.user;
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Would send the following response.
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"sub": "my-consumer",
|
|
122
|
+
"data": {
|
|
123
|
+
"companyId": 12345,
|
|
124
|
+
"plan": "gold"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Testing API Key Authentication
|
|
130
|
+
|
|
131
|
+
When running tests there are several ways to handle API Key authentication. The
|
|
132
|
+
following strategies cover testing with API Key authentication both locally and
|
|
133
|
+
in deployed environments.
|
|
134
|
+
|
|
135
|
+
### Testing locally
|
|
136
|
+
|
|
137
|
+
When running API Key Authentication locally, if you
|
|
138
|
+
[link the project](../cli/link.mdx) to a project, the same API Key bucket is
|
|
139
|
+
shared by both your development (working copy) environment and local
|
|
140
|
+
development.
|
|
141
|
+
|
|
142
|
+
### Setting the API Key bucket name
|
|
143
|
+
|
|
144
|
+
Either locally or in CI/CD you can specify any API Key bucket on the
|
|
145
|
+
[API Key Authentication](../policies/api-key-inbound.mdx) policy by setting the
|
|
146
|
+
`bucketName` property. This allows using a consistent API Key bucket that is set
|
|
147
|
+
up with consumers as required for testing. You can use the
|
|
148
|
+
[Zuplo Developer API](https://dev.zuplo.com) to
|
|
149
|
+
[create and manage buckets](./api-key-management.mdx), consumers, keys, and
|
|
150
|
+
more.
|
|
151
|
+
|
|
152
|
+
### Selectively disabling
|
|
153
|
+
|
|
154
|
+
:::danger
|
|
155
|
+
|
|
156
|
+
Be extremely careful using this strategy. If configured incorrectly this could
|
|
157
|
+
leave your API open to unauthorized access.
|
|
158
|
+
|
|
159
|
+
:::
|
|
160
|
+
|
|
161
|
+
Another option is to disable authentication on endpoints for testing purposes.
|
|
162
|
+
One way of doing this is to configure the
|
|
163
|
+
[API Key Authentication](../policies/api-key-inbound.mdx) policy to allow
|
|
164
|
+
unauthenticated requests through. This can be done by setting
|
|
165
|
+
`allowUnauthenticatedRequests` to true.
|
|
166
|
+
|
|
167
|
+
In order to enforce authentication with this setting disabled, you can create a
|
|
168
|
+
policy that comes after that selectively enforces auth based on some condition.
|
|
169
|
+
|
|
170
|
+
For example, an environment variable flag could be used to disable auth with the
|
|
171
|
+
following policy.
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
import {
|
|
175
|
+
ZuploContext,
|
|
176
|
+
ZuploRequest,
|
|
177
|
+
environment,
|
|
178
|
+
HttpProblems,
|
|
179
|
+
} from "@zuplo/runtime";
|
|
180
|
+
|
|
181
|
+
export default async function enforceAuth(
|
|
182
|
+
request: ZuploRequest,
|
|
183
|
+
context: ZuploContext,
|
|
184
|
+
) {
|
|
185
|
+
if (environment.DISABLE_AUTH === "AUTH_DISABLED") {
|
|
186
|
+
return request;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (!request.user) {
|
|
190
|
+
return HttpProblems.unauthorized(request, context);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return request;
|
|
194
|
+
}
|
|
195
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Buckets and Environments
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
API keys are stored in "buckets," which organize and isolate authentication
|
|
6
|
+
credentials across different environments. Learn more in the
|
|
7
|
+
[API Key API documentation](https://dev.zuplo.com/docs).
|
|
8
|
+
|
|
9
|
+
## Default bucket configuration
|
|
10
|
+
|
|
11
|
+
Zuplo automatically creates three buckets for each project:
|
|
12
|
+
|
|
13
|
+
- **Working copy**: Stores API keys for the working-copy environment
|
|
14
|
+
- **Production**: Stores API keys for the production environment (your default
|
|
15
|
+
Git branch)
|
|
16
|
+
- **Shared**: Stores API keys shared across all other environments
|
|
17
|
+
|
|
18
|
+
For more information on how environments relate to Git branches, see
|
|
19
|
+
[Branch-Based Deployments](./branch-based-deployments.mdx).
|
|
20
|
+
|
|
21
|
+
## Custom bucket configuration
|
|
22
|
+
|
|
23
|
+
To use a custom bucket, specify the `bucketName` in your API Key policy options:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"export": "ApiKeyInboundPolicy",
|
|
28
|
+
"module": "$import(@zuplo/runtime)",
|
|
29
|
+
"options": {
|
|
30
|
+
"bucketName": "contoso-qa-env",
|
|
31
|
+
"allowUnauthenticatedRequests": false
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
When no `bucketName` appears in the configuration, the policy uses the default
|
|
37
|
+
bucket for the current environment.
|
|
38
|
+
|
|
39
|
+
## Creating custom buckets
|
|
40
|
+
|
|
41
|
+
Create custom buckets using the
|
|
42
|
+
[API Key management API](https://dev.zuplo.com/docs). See the
|
|
43
|
+
[create buckets endpoint](https://dev.zuplo.com/docs/routes#apikeybucketsservice_create)
|
|
44
|
+
for details.
|
|
45
|
+
|
|
46
|
+
The following example creates a bucket for a QA environment:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
curl --request POST \
|
|
50
|
+
--url https://dev.zuplo.com/v1/accounts/YOUR_ACCOUNT_NAME/key-buckets \
|
|
51
|
+
--header 'Authorization: Bearer YOUR_ZAPI_KEY' \
|
|
52
|
+
--header 'Content-Type: application/json' \
|
|
53
|
+
--data '{"name":"contoso-qa-bucket","description":"API Key bucket for QA Environment"}'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
:::note
|
|
57
|
+
|
|
58
|
+
Replace `YOUR_ACCOUNT_NAME` with your account name and `YOUR_ZAPI_KEY` with your
|
|
59
|
+
Zuplo API key.
|
|
60
|
+
|
|
61
|
+
:::
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Key End User Access
|
|
3
|
+
sidebar_label: End User Access
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
For any API Key to be useful it needs to be shared with the right end-user.
|
|
7
|
+
Zuplo provides several options depending on the level of customization required.
|
|
8
|
+
|
|
9
|
+
## Dev & Testing
|
|
10
|
+
|
|
11
|
+
For development and testing, the easiest way to obtain an API key is right in
|
|
12
|
+
the [Zuplo Management Portal](https://portal.zuplo.com). From inside the **API
|
|
13
|
+
Key Consumers** section in the **Settings** tab you can create and manage
|
|
14
|
+
consumers and their keys.
|
|
15
|
+
|
|
16
|
+
For quick access the newest, non-expired API key is shown in this section.
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
## Zuplo Developer Portal
|
|
21
|
+
|
|
22
|
+
If you are using Zuplo's integrated developer portal to share your API with your
|
|
23
|
+
end-users, you can easily enable API Key management to authenticated users of
|
|
24
|
+
the portal.
|
|
25
|
+
|
|
26
|
+
When API Key Managers log into the Developer Portal they can copy, manage, or
|
|
27
|
+
create new API Keys.
|
|
28
|
+
|
|
29
|
+

|
|
30
|
+
|
|
31
|
+
## React Component and API
|
|
32
|
+
|
|
33
|
+
If you would prefer to integrate API Key management inside of your own portal
|
|
34
|
+
and you are building with React, Zuplo offers an
|
|
35
|
+
[open source API Key Manager component](https://github.com/zuplo/api-key-manager)
|
|
36
|
+
that makes it easy to allow your users self serve access to their keys.
|
|
37
|
+
|
|
38
|
+
Additionally, you can use the
|
|
39
|
+
[Auth Translation API](https://github.com/zuplo/sample-auth-translation-api)
|
|
40
|
+
sample as a starting point for building your management API using Zuplo.
|
|
41
|
+
|
|
42
|
+
You can find a demo of this component at https://api-key-manager.com.
|
|
43
|
+
|
|
44
|
+
## Zuplo Developer API
|
|
45
|
+
|
|
46
|
+
Finally, if you want complete control over the entire experience, you can
|
|
47
|
+
utilize Zuplo's Developer API to manage the full lifecycle of API Consumers and
|
|
48
|
+
Keys.
|
|
49
|
+
|
|
50
|
+
For more information on using the API to manage consumers and keys, see
|
|
51
|
+
[Programmatic API Key Management](./api-key-api.mdx) and the
|
|
52
|
+
[Zuplo Developer API documentation](https://dev.zuplo.com).
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Key Leak Detection
|
|
3
|
+
sidebar_label: Leak Detection
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## API Key Format
|
|
7
|
+
|
|
8
|
+
Zuplo uses a specially formatted API Key structure that allows us to
|
|
9
|
+
[partner with GitHub's secret scanning](https://github.blog/changelog/2022-07-13-zuplo-is-now-a-github-secret-scanning-partner/)
|
|
10
|
+
to protect your users from accidentally leaked keys.
|
|
11
|
+
|
|
12
|
+
We think the safety of your API key consumers is paramount, so this feature is
|
|
13
|
+
available to all Zuplo customers, including free.
|
|
14
|
+
|
|
15
|
+
## API Key Leak Detection
|
|
16
|
+
|
|
17
|
+
API keys should never be stored in source control. Accidentally committing API
|
|
18
|
+
keys to source control is a common attack vector that leads to compromises of
|
|
19
|
+
organizations both large and small.
|
|
20
|
+
|
|
21
|
+
Zuplo participates in
|
|
22
|
+
[GitHub's Secret Scanning](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning)
|
|
23
|
+
program to detect if your or your customer's API Keys are checked into source
|
|
24
|
+
control on GitHub.
|
|
25
|
+
|
|
26
|
+
If an API Key for your Zuplo API Gateway is compromised by checking it into a
|
|
27
|
+
public or private GitHub repository, Zuplo will be notified and can take action
|
|
28
|
+
immediately.
|
|
29
|
+
|
|
30
|
+
## Leak Notifications
|
|
31
|
+
|
|
32
|
+
You will receive notifications of API Key leaks via email as well as in-app
|
|
33
|
+
notifications. You can customize the notifications settings by going to your
|
|
34
|
+
[Profile](https://portal.zuplo.com/user/profile) in the Zuplo Portal.
|
|
35
|
+
|
|
36
|
+
:::note
|
|
37
|
+
|
|
38
|
+
For security reasons we don't include the full API Key in the notifications we
|
|
39
|
+
send. If you need the full API Key please contact support.
|
|
40
|
+
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
## Recommended Actions
|
|
44
|
+
|
|
45
|
+
If you receive an alert that an API Key has been leaked, we recommend taking one
|
|
46
|
+
of the following actions immediately.
|
|
47
|
+
|
|
48
|
+
### Notify Your Customer
|
|
49
|
+
|
|
50
|
+
Notify your customer and ask them to login to your Zuplo powered developer
|
|
51
|
+
portal and instruct them to roll the API Key. This way the old key is revoked
|
|
52
|
+
and they get a new key.
|
|
53
|
+
|
|
54
|
+
### Roll the API Key
|
|
55
|
+
|
|
56
|
+
You can use the
|
|
57
|
+
[Zuplo API to roll the API Key](https://dev.zuplo.com/docs/routes#roll-consumer-keys)
|
|
58
|
+
for the consumer. This will create a new key and revoke the old key.
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
export ACCOUNT_NAME="your-account-name"
|
|
62
|
+
export BUCKET_NAME="your-bucket-name"
|
|
63
|
+
export CONSUMER_NAME="your-consumer-name"
|
|
64
|
+
export ZUPLO_API_KEY="your-zuplo-api-key"
|
|
65
|
+
|
|
66
|
+
curl --request POST \
|
|
67
|
+
--url https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers/$CONSUMER_NAME/roll-key \
|
|
68
|
+
--header 'Authorization: Bearer $ZUPLO_API_KEY' \
|
|
69
|
+
--header 'Content-Type: application/json' \
|
|
70
|
+
--data '
|
|
71
|
+
{
|
|
72
|
+
"expiresOn": "2024-01-01T00:00:00.000Z"
|
|
73
|
+
}
|
|
74
|
+
'
|
|
75
|
+
```
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Keys Overview
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo allows developers to rapidly add API key based authentication to an API in
|
|
7
|
+
minutes. There are several benefits to using Zuplo's API Key solution including
|
|
8
|
+
|
|
9
|
+
- adheres to
|
|
10
|
+
[best practices of API Key implementation](https://zuplo.com/blog/2022/12/01/api-key-authentication)
|
|
11
|
+
- includes [API Key Leak Detection & Notification](./api-key-leak-detection.mdx)
|
|
12
|
+
- offers [out of the box and customizable solutions](./api-key-end-users.mdx)
|
|
13
|
+
for sharing API Keys
|
|
14
|
+
|
|
15
|
+
:::tip
|
|
16
|
+
|
|
17
|
+
To start using Zuplo API Keys in only a few minutes
|
|
18
|
+
[see the quickstart](../articles/step-3-add-api-key-auth.mdx).
|
|
19
|
+
|
|
20
|
+
:::
|
|
21
|
+
|
|
22
|
+
## Fully Managed API Key Solution
|
|
23
|
+
|
|
24
|
+
Zuplo builds and manages a global API Key solution that can handle millions (or
|
|
25
|
+
billions) of API Keys and a virtually unlimited throughput to scale to the most
|
|
26
|
+
demanding services.
|
|
27
|
+
|
|
28
|
+
The service handles global replication of API Keys allowing your end users to be
|
|
29
|
+
authenticated to your API key with minimal latency. Keys are replicated around
|
|
30
|
+
the world in only a few seconds. Similarly, when keys are revoked or deleted,
|
|
31
|
+
the change replicates in seconds so that your API isn't open to unauthorized
|
|
32
|
+
access.
|
|
33
|
+
|
|
34
|
+
## API Key Authentication at the Edge
|
|
35
|
+
|
|
36
|
+
Using Zuplo's API Key Authentication policy, your API is secured from
|
|
37
|
+
unauthorized access. Authorization checks happen at the edge in 300+ data
|
|
38
|
+
centers around the world. This keeps load off your backend and keeps your API
|
|
39
|
+
fast for your end-users.
|
|
40
|
+
|
|
41
|
+
Zuplo manages all the complexity of replication, caching, and verifying your API
|
|
42
|
+
keys so you don't have to.
|
|
43
|
+
|
|
44
|
+
Adding API Key authentication using Zuplo takes only a few minutes.
|
|
45
|
+
[See the quickstart to get started](../articles/step-3-add-api-key-auth.mdx).
|
|
46
|
+
|
|
47
|
+
## Key Concepts
|
|
48
|
+
|
|
49
|
+
### Consumers
|
|
50
|
+
|
|
51
|
+
An API Key Consumer is the identity that can invoke your API - typically people,
|
|
52
|
+
customers, partners or services. A consumer can have multiple API Keys
|
|
53
|
+
associated with it - but each key authorizes the same consumer (for example
|
|
54
|
+
identity)
|
|
55
|
+
|
|
56
|
+
### Consumer Metadata
|
|
57
|
+
|
|
58
|
+
Each consumer can be assigned metadata. This information (a
|
|
59
|
+
[small JSON object](./api-key-service-limits.mdx)) is made available to the
|
|
60
|
+
runtime when a user access your API using that key.
|
|
61
|
+
|
|
62
|
+
For example, a Consumer might have metadata that specifies the company they're a
|
|
63
|
+
member of and the plan for the account.
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"companyId": 123,
|
|
68
|
+
"plan": "gold"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Consumer Tags
|
|
73
|
+
|
|
74
|
+
Consumers can also have tags associated with them. Tags are simple key value
|
|
75
|
+
pairs. Tags are used for management purposes only (for example querying
|
|
76
|
+
consumers through the Zuplo API). Tags don't get sent to the runtime as part of
|
|
77
|
+
authorization.
|
|
78
|
+
|
|
79
|
+
For example, a Consumer might be tagged in order to track the customer
|
|
80
|
+
associated with the consumer.
|
|
81
|
+
|
|
82
|
+
```txt
|
|
83
|
+
customer=1234
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
You can see more on how to use tags in the document on
|
|
87
|
+
[managing consumers and keys using the API](./api-key-api.mdx)
|
|
88
|
+
|
|
89
|
+
### API Keys
|
|
90
|
+
|
|
91
|
+
API Keys are the actual string value used to authenticate with an API. Unlike
|
|
92
|
+
some other forms of bearer tokens, API Keys don't contain any actual data within
|
|
93
|
+
the key itself.
|
|
94
|
+
|
|
95
|
+
Zuplo API Keys are prefixed with the string `zpka_` followed by
|
|
96
|
+
cryptographically random characters and a signature. While Zuplo's API Key
|
|
97
|
+
management service supports custom key formats (enterprise plan required), the
|
|
98
|
+
structured format our the key enables us to offer
|
|
99
|
+
[key leak detection services](./api-key-leak-detection.mdx) to keep your API
|
|
100
|
+
secure.
|