Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.
An identity-aware proxy (IAP) sits in front of Bifrost and authenticates the user before the request ever reaches it. The proxy validates identity, then injects a signed token header on every request. Bifrost verifies that token against the proxy’s own keys and authenticates the user from its claims - no interactive login redirect happens at Bifrost itself.This guide covers AWS Application Load Balancer with its built-in authenticate-oidc action. The ALB authenticates users against your identity provider (or Amazon Cognito) and forwards a signed x-amzn-oidc-data header - an ES256 JWT signed by AWS’s regional key - to Bifrost. Bifrost validates it against the regional public-key endpoint and pins it to the ARN of your load balancer.
The auth proxy fronts an existing identity provider already configured in Bifrost. Set up your IdP first (Okta, Entra, Generic OIDC, etc.), then enable the Identity-Aware Proxy on that same provider.
A user requests a Bifrost URL served through an ALB listener rule that has an authenticate-oidc action.
The ALB authenticates the user against your configured identity provider and only forwards the request once authentication succeeds.
The ALB forwards the request to Bifrost with the x-amzn-oidc-data header - a short-lived ES256 JWT signed by AWS’s regional key, carrying the user’s claims.
Bifrost reads the JWT’s kid, fetches the matching public key from https://public-keys.auth.elb.<region>.amazonaws.com/<kid>, validates the signature, confirms the token’s signer matches your ALB ARN, and resolves the user from the token’s identity claim (email by default).
Because Bifrost validates the proxy’s token (not the IdP’s), both the dashboard and the inference APIs are protected by the same upstream authentication layer.
When the proxy header is absent, Bifrost falls back to the IdP login - so if Bifrost is reachable directly (bypassing the ALB), a client can skip authentication via ALB but will be asked to login through the configured IDP.
Validates identity and authenticates an already-provisioned user (looked up by the configured identity claim, email by default). No role, team, or business unit is derived from the token. The user’s existing role (e.g. from SCIM) governs dashboard access.
You provision users and roles via SCIM or interactive OIDC login, and only want the proxy to handle authentication.
Full
Validates the token and runs attribute → role / team / business-unit mapping from its claims, exactly like an interactive login.
You want role and team assignments derived from the proxy token itself.
Login-only never creates users and rejects an identity that isn’t already provisioned. A user without a role can’t sign in to the dashboard but remains a valid authenticated identity for inference endpoints.
Full mode requires the IdP claims used for mapping (e.g. groups) to be present in the x-amzn-oidc-data token. The ALB includes the claims returned by your IdP’s userinfo/ID token - confirm your group or role claim is among them before using full mode, or role and team mapping will not match and login will be denied.
Add an authenticate-oidc action to your listener rule
In the EC2 console, open your Application Load Balancer’s HTTPS listener and edit the rule that routes to Bifrost. Add an Authenticate action of type OIDC ahead of the Forward action, and enter your identity provider’s issuer, authorization, token, and user-info endpoints plus the client ID and secret.Follow the AWS guide for the full setup: Authenticate users using an Application Load Balancer. Only users who complete authentication will ever reach Bifrost.
2
Copy the load balancer ARN and region
You need two values from AWS:
Value
Where to find it
Load balancer ARN
On the load balancer’s Description tab, copy the ARN (e.g. arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/50dc6c495c0c9188). Bifrost pins the token’s signer to this ARN.
Region
The AWS region of the load balancer (e.g. us-east-1). Bifrost derives it from the ARN automatically, so this is only needed as an override.
Skip this step if you’re using login-only mode.For full mode, the IdP attributes you map on (groups, roles, department, etc.) must be present in the x-amzn-oidc-data token. The ALB populates that token from the claims your IdP returns, so enable the relevant OIDC scopes/claims on the ALB’s OIDC provider and confirm the group or role claim is included.
Any claim the ALB includes in the x-amzn-oidc-data token becomes available for attribute mapping in Bifrost.
Step 3: Enable the Identity-Aware Proxy in Bifrost
1
Open your provider's configuration
In the Bifrost dashboard, go to Governance → User Provisioning and open the identity provider you want to front with the ALB. Continue to the Provider Configuration step, where the Identity-Aware Proxy (IAP) section appears.
2
Enable the proxy and select AWS ALB
Toggle Identity-Aware Proxy (IAP) on, then set Proxy to AWS ALB. The Expected signer (ALB ARN) field appears below, along with the Mode selector.
Enable the Identity-Aware Proxy section, choose AWS ALB, and fill in the load balancer ARN.
3
Choose a mode
Select Login only (authenticate against existing roles) or Full (map roles and teams from the token). See Modes above.
4
Fill in the AWS ALB fields
Field
Value
Expected signer (ALB ARN)
The ARN of your load balancer, pinning the token’s signer to this specific ALB. Bifrost derives the region and the public-key endpoint from it.
The Advanced section lets you override the region, supply an explicit public-key base URL (for partitions like GovCloud), override the request header, or change the identity claim - all optional for a standard ALB.
5
Save
Save the provider configuration. Click Verify & Next and complete the wizard.Identity-Aware Proxy changes on an already-enabled provider - turning IAP on or off, switching the proxy type, or editing the ARN, region, or mode - are hot-reloaded and take effect immediately (and are propagated to peer nodes in a cluster).
The Identity-Aware Proxy is stored as an authProxy block on the SSO provider’s configuration. Fields marked string (secret) below accept a plain-text value, an env.VAR_NAME reference, or a vault.path/to/secret reference; enabled, provider, mode, and allowedAudiences are plain values.The authProxy block lives inside your SSO provider’s config under the top-level scim_config, alongside that provider’s own fields:
Set to aws-alb. (cloudflare-access is the default; generic is the other option.)
mode
string
No
login_only (default) or full.
expectedSigner
string (secret)
Yes
The ALB ARN to pin the token’s signer to. The regional key signs tokens for every ALB in the region, so this binds acceptance to your load balancer specifically.
region
string (secret)
No
Region for the public-key endpoint. Derived from the signer ARN when blank.
publicKeyBaseUrl
string (secret)
No
Override base URL for the public-key endpoint (keys are fetched from <base>/<kid>). Needed for partitions like GovCloud; must be https.
headerName
string (secret)
No
Override the request header. Defaults to x-amzn-oidc-data.
userIdClaim
string (secret)
No
Token claim used as the user identity. Defaults to email.
AWS ALB does not use issuerUrl, jwksUrl, or audience - those apply to the JWKS-based providers (Cloudflare Access and generic). The ALB token is validated by ES256 signature against the regional public key and pinned to expectedSigner.
Cause: The token signature or signer check failed.
Fix: Confirm Expected signer (ALB ARN) exactly matches your load balancer’s ARN (including account ID and region), and that the region resolved from the ARN is where the ALB actually runs. If you set a custom public-key base URL, verify it’s reachable and https.
Users get 403 “not provisioned” in login-only mode
Cause: Login-only mode never creates users; the identity isn’t in Bifrost yet.
Fix: Provision the user first via SCIM or a one-time interactive login, or switch the provider to Full mode so users are provisioned from the token.
Cause: The mapping claims (e.g. groups) aren’t present in the x-amzn-oidc-data token.
Fix: Enable the relevant claims/scopes on the ALB’s OIDC provider so they’re included in the token (see Step 2).
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"Bifrost","colors":{"primary":"#0C3B43","light":"#07C983"},"logo":{"light":"https://mintcdn.com/bifrost/qFMmk8bNSnvgFYDI/media/bifrost-logo.png?fit=max\u0026auto=format\u0026n=qFMmk8bNSnvgFYDI\u0026q=85\u0026s=6af701a560aee4103444fa017b226cf0","dark":"https://mintcdn.com/bifrost/qFMmk8bNSnvgFYDI/media/bifrost-logo-dark.png?fit=max\u0026auto=format\u0026n=qFMmk8bNSnvgFYDI\u0026q=85\u0026s=84d264aad5f421c526dd17893e7c5739"},"favicon":"https://mintcdn.com/bifrost/qFMmk8bNSnvgFYDI/favicon.ico?fit=max\u0026auto=format\u0026n=qFMmk8bNSnvgFYDI\u0026q=85\u0026s=a57bad8c37d798efcb53dca5d96d8b45","navbar":{"links":[{"href":"https://www.getmaxim.ai/enterprise?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Navbar#free-license","label":"Request License"}],"primary":{"type":"button","label":"Book a Demo","href":"https://www.getmaxim.ai/book-a-demo?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Navbar"}},"footer":{"socials":{"x":"https://x.com/getbifrost","linkedin":"https://linkedin.com/company/maxim-ai","github":"https://github.com/maximhq/bifrost"},"links":[{"header":"Company","items":[{"label":"Book a Demo","href":"https://www.getmaxim.ai/book-a-demo?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Partner Program","href":"https://www.getmaxim.ai/partners-program?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Careers","href":"https://www.getmaxim.ai/careers?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Contact Us","href":"mailto:[email protected]"},{"label":"Security","href":"https://docs.getbifrost.ai/security"},{"label":"Trust Center","href":"https://trust.getmaxim.ai/"},{"label":"Terms of Service","href":"https://www.getmaxim.ai/terms-of-service?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Privacy Policy","href":"https://www.getmaxim.ai/privacy-policy?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"}]},{"header":"Products","items":[{"label":"LLM Gateway","href":"https://www.getmaxim.ai/llm-gateway?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"MCP Gateway","href":"https://www.getmaxim.ai/mcp-gateway?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Governance","href":"https://www.getmaxim.ai/ai-governance?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Guardrails","href":"https://www.getmaxim.ai/ai-guardrails?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Observability","href":"https://www.getmaxim.ai/ai-observability?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Bifrost Edge","href":"https://www.getmaxim.ai/edge?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"}]},{"header":"Resources","items":[{"label":"Bifrost Enterprise","href":"https://www.getmaxim.ai/enterprise?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Performance Benchmarks","href":"https://www.getmaxim.ai/bifrost/resources/benchmarks?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"LLM Gateway Buyer's Guide","href":"https://www.getmaxim.ai/bifrost/resources/buyers-guide?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Claude Code Integration","href":"https://www.getmaxim.ai/bifrost/resources/claude-code?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Migrating from LiteLLM","href":"https://www.getmaxim.ai/bifrost/resources/migrating-from-litellm?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"},{"label":"Blogs","href":"https://www.getmaxim.ai/bifrost/blog?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"}]},{"header":"For LLMs","items":[{"label":"llms-full.txt","href":"https://docs.getbifrost.ai/llms-full.txt"},{"label":"llms.txt","href":"https://docs.getbifrost.ai/llms.txt"},{"label":"llm-info","href":"https://www.getmaxim.ai/llm-info?utm_source=bifrost_docs\u0026utm_medium=Bifrost_Footer"}]}]},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Discord","icon":"discord","href":"https://discord.gg/exN5KAydbU"},{"anchor":"GitHub","icon":"github","href":"https://github.com/maximhq/bifrost"},{"anchor":"Try Enterprise","icon":"building","href":"https://www.getmaxim.ai/bifrost/enterprise"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bifrost","hasAudioNarration":false,"actualSubdomain":"bifrost","customDomains":["docs.getbifrost.ai"],"gitSource":{"type":"github","owner":"maximhq","repo":"bifrost","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae88915e4ce0f5bc7cf494a","collectionId":"de212a4e-1dfd-408e-b12e-afe66892f450","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae88915e4ce0f5bc7cf494a"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae936cbff95a4c2ae8ee107","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API","count":690},{"language":"default","tag":"Changelogs","count":318},{"language":"default","tag":"Integrations","count":251},{"language":"default","tag":"Platform","count":237},{"language":"default","tag":"Open Source","count":164},{"language":"default","tag":"OSS","count":151},{"language":"default","tag":"Governance","count":132},{"language":"default","tag":"Enterprise","count":102},{"language":"default","tag":"Helm","count":76},{"language":"default","tag":"Inference","count":71}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".nav-logo{height:1.5rem}div:has(>nav[aria-label=Main]){gap:1.5rem}nav[aria-label=Main]>ul{gap:1rem}nav[aria-label=Main] a[href*=book-a-demo]{padding:.4375rem .625rem}nav[aria-label=Main] a[href*=book-a-demo] svg{display:none}div:has(>nav[aria-label=Main])>*,nav[aria-label=Main]>ul>*{margin-inline:0}nav[aria-label=Main] .navbar-link a[href*=\"#free-license\"]{display:inline-flex;align-items:center;border:1px solid rgb(var(--primary-dark));border-radius:.75rem;box-sizing:border-box;padding:calc(.4375rem - 1px) .625rem;color:rgb(var(--primary-dark));background:0 0;font-size:.875rem;font-weight:500;line-height:1.25rem}nav[aria-label=Main] .navbar-link a[href*=\"#free-license\"]:hover{background-color:rgb(var(--primary-dark)/.1)}.dark nav[aria-label=Main] .navbar-link a[href*=\"#free-license\"]{border-color:rgb(var(--primary-light));color:rgb(var(--primary-light))}.dark nav[aria-label=Main] .navbar-link a[href*=\"#free-license\"]:hover{background-color:rgb(var(--primary-light)/.12)}#sidebar-group>li>button>div{line-height:normal}.footer-compliance{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;max-width:100%}.footer-compliance img{width:2.5rem;height:2.5rem;flex:none;object-fit:contain}@media (max-width:767px){footer.advanced-footer>div>div:first-child>div:first-child{flex-direction:column;align-items:flex-start;justify-content:flex-start;row-gap:1rem;width:100%;height:auto}footer.advanced-footer>div>div:first-child>div:first-child>div:last-child{justify-content:flex-start;min-width:0;max-width:100%}footer.advanced-footer a[class*=truncate],footer.advanced-footer>div>div:first-child>div:last-child,footer.advanced-footer>div>div:first-child>div:last-child>div{white-space:normal!important}}@media (min-width:768px){footer.advanced-footer>div>div:first-child{justify-content:flex-start;column-gap:3rem}footer.advanced-footer>div>div:first-child>div:first-child{min-width:0;justify-content:flex-start;align-items:flex-start;row-gap:1.25rem}footer.advanced-footer>div>div:first-child>div:first-child>div:last-child{margin-top:auto}footer.advanced-footer>div>div:first-child>div:last-child{flex:0 1 auto;justify-content:start;grid-template-columns:repeat(4,max-content)!important;column-gap:4rem!important}footer.advanced-footer>div>div:first-child>div:last-child>div{align-items:flex-start;width:auto;flex:none}footer.advanced-footer a[class*=truncate]{max-width:none!important;overflow:visible!important;text-overflow:unset!important;white-space:nowrap!important}}"}],"page":{"pagePath":"enterprise/auth-proxy/aws-alb","slug":"/enterprise/auth-proxy/aws-alb","pageMetadata":{"title":"AWS ALB (Application Load Balancer)","description":"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.","href":"/enterprise/auth-proxy/aws-alb"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`An `,_jsx(_components.strong,{children:`identity-aware proxy (IAP)`}),` sits in front of Bifrost and authenticates the user `,_jsx(_components.em,{children:`before`}),` the request ever reaches it. The proxy validates identity, then injects a signed token header on every request. Bifrost verifies that token against the proxy’s own keys and authenticates the user from its claims - no interactive login redirect happens at Bifrost itself.`]}),`\n`,_jsxs(_components.p,{children:[`This guide covers `,_jsx(_components.a,{href:`https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html`,children:`AWS Application Load Balancer`}),` with its built-in `,_jsx(_components.code,{children:`authenticate-oidc`}),` action. The ALB authenticates users against your identity provider (or Amazon Cognito) and forwards a signed `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),` header - an `,_jsx(_components.strong,{children:`ES256`}),` JWT signed by AWS’s regional key - to Bifrost. Bifrost validates it against the regional public-key endpoint and pins it to the ARN of your load balancer.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`The auth proxy `,_jsx(_components.strong,{children:`fronts an existing identity provider`}),` already configured in Bifrost. Set up your IdP first (`,_jsx(_components.a,{href:`/enterprise/setting-up-okta/oidc`,children:`Okta`}),`, `,_jsx(_components.a,{href:`/enterprise/setting-up-entra/oidc`,children:`Entra`}),`, `,_jsx(_components.a,{href:`/enterprise/setting-up-generic-oidc/oidc`,children:`Generic OIDC`}),`, etc.), then enable the Identity-Aware Proxy on that same provider.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`A user requests a Bifrost URL served through an ALB listener rule that has an `,_jsx(_components.code,{children:`authenticate-oidc`}),` action.`]}),`\n`,_jsx(_components.li,{children:`The ALB authenticates the user against your configured identity provider and only forwards the request once authentication succeeds.`}),`\n`,_jsxs(_components.li,{children:[`The ALB forwards the request to Bifrost with the `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),` header - a short-lived ES256 JWT signed by AWS’s regional key, carrying the user’s claims.`]}),`\n`,_jsxs(_components.li,{children:[`Bifrost reads the JWT’s `,_jsx(_components.code,{children:`kid`}),`, fetches the matching public key from `,_jsx(_components.code,{children:`https://public-keys.auth.elb.\u003cregion>.amazonaws.com/\u003ckid>`}),`, validates the signature, confirms the token’s signer matches your `,_jsx(_components.strong,{children:`ALB ARN`}),`, and resolves the user from the token’s identity claim (`,_jsx(_components.code,{children:`email`}),` by default).`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Because Bifrost validates the proxy’s token (not the IdP’s), both the dashboard and the inference APIs are protected by the same upstream authentication layer.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`When the proxy header is absent, Bifrost falls back to the IdP login - so if Bifrost is reachable directly (bypassing the ALB), a client can skip authentication via ALB but will be asked to login through the configured IDP.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`modes`,children:`Modes`}),`\n`,_jsx(_components.p,{children:`The auth proxy runs in one of two modes:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Mode`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`When to use`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Login only`}),` `,_jsx(_components.em,{children:`(default)`})]}),_jsxs(_components.td,{children:[`Validates identity and authenticates an `,_jsx(_components.strong,{children:`already-provisioned`}),` user (looked up by the configured identity claim, `,_jsx(_components.code,{children:`email`}),` by default). No role, team, or business unit is derived from the token. The user’s existing role (e.g. from SCIM) governs dashboard access.`]}),_jsx(_components.td,{children:`You provision users and roles via SCIM or interactive OIDC login, and only want the proxy to handle authentication.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Full`})}),_jsxs(_components.td,{children:[`Validates the token `,_jsx(_components.strong,{children:`and`}),` runs attribute → role / team / business-unit mapping from its claims, exactly like an interactive login.`]}),_jsx(_components.td,{children:`You want role and team assignments derived from the proxy token itself.`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Login-only`}),` never creates users and rejects an identity that isn’t already provisioned. A user without a role can’t sign in to the dashboard but remains a valid authenticated identity for inference endpoints.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Full mode`}),` requires the IdP claims used for mapping (e.g. `,_jsx(_components.code,{children:`groups`}),`) to be present in the `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),` token. The ALB includes the claims returned by your IdP’s userinfo/ID token - confirm your group or role claim is among them before using full mode, or role and team mapping will not match and login will be denied.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An `,_jsx(_components.strong,{children:`Application Load Balancer`}),` fronting your Bifrost deployment, with an `,_jsx(_components.code,{children:`authenticate-oidc`}),` action on the listener rule`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`ARN`}),` of that load balancer and its AWS `,_jsx(_components.strong,{children:`region`})]}),`\n`,_jsxs(_components.li,{children:[`An identity provider already configured in Bifrost under `,_jsx(_components.strong,{children:`User Provisioning`})]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-configure-alb-oidc-authentication`,children:`Step 1: Configure ALB OIDC authentication`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Add an authenticate-oidc action to your listener rule`,children:[_jsxs(_components.p,{children:[`In the EC2 console, open your Application Load Balancer’s HTTPS listener and edit the rule that routes to Bifrost. Add an `,_jsx(_components.strong,{children:`Authenticate`}),` action of type `,_jsx(_components.strong,{children:`OIDC`}),` ahead of the `,_jsx(_components.strong,{children:`Forward`}),` action, and enter your identity provider’s issuer, authorization, token, and user-info endpoints plus the client ID and secret.`]}),_jsxs(_components.p,{children:[`Follow the AWS guide for the full setup: `,_jsx(_components.a,{href:`https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html`,children:`Authenticate users using an Application Load Balancer`}),`. Only users who complete authentication will ever reach Bifrost.`]})]}),_jsxs(Step,{title:`Copy the load balancer ARN and region`,children:[_jsx(_components.p,{children:`You need two values from AWS:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`Where to find it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Load balancer ARN`})}),_jsxs(_components.td,{children:[`On the load balancer’s `,_jsx(_components.strong,{children:`Description`}),` tab, copy the `,_jsx(_components.strong,{children:`ARN`}),` (e.g. `,_jsx(_components.code,{children:`arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/50dc6c495c0c9188`}),`). Bifrost pins the token’s signer to this ARN.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Region`})}),_jsxs(_components.td,{children:[`The AWS region of the load balancer (e.g. `,_jsx(_components.code,{children:`us-east-1`}),`). Bifrost derives it from the ARN automatically, so this is only needed as an override.`]})]})]})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-pass-through-idp-claims-full-mode-only`,children:`Step 2: Pass through IdP claims (full mode only)`}),`\n`,_jsxs(_components.p,{children:[`Skip this step if you’re using `,_jsx(_components.strong,{children:`login-only`}),` mode.`]}),`\n`,_jsxs(_components.p,{children:[`For `,_jsx(_components.strong,{children:`full`}),` mode, the IdP attributes you map on (groups, roles, department, etc.) must be present in the `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),` token. The ALB populates that token from the claims your IdP returns, so enable the relevant OIDC scopes/claims on the ALB’s OIDC provider and confirm the group or role claim is included.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Any claim the ALB includes in the `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),` token becomes available for attribute mapping in Bifrost.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-enable-the-identity-aware-proxy-in-bifrost`,children:`Step 3: Enable the Identity-Aware Proxy in Bifrost`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open your provider's configuration`,children:_jsxs(_components.p,{children:[`In the Bifrost dashboard, go to `,_jsx(_components.strong,{children:`Governance`}),` → `,_jsx(_components.strong,{children:`User Provisioning`}),` and open the identity provider you want to front with the ALB. Continue to the `,_jsx(_components.strong,{children:`Provider Configuration`}),` step, where the `,_jsx(_components.strong,{children:`Identity-Aware Proxy (IAP)`}),` section appears.`]})}),_jsxs(Step,{title:`Enable the proxy and select AWS ALB`,children:[_jsxs(_components.p,{children:[`Toggle `,_jsx(_components.strong,{children:`Identity-Aware Proxy (IAP)`}),` on, then set `,_jsx(_components.strong,{children:`Proxy`}),` to `,_jsx(_components.strong,{children:`AWS ALB`}),`. The `,_jsx(_components.strong,{children:`Expected signer (ALB ARN)`}),` field appears below, along with the `,_jsx(_components.strong,{children:`Mode`}),` selector.`]}),_jsx(Frame,{caption:`Enable the Identity-Aware Proxy section, choose AWS ALB, and fill in the load balancer ARN.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=c339775da318b6077f920999905d6cad`,alt:`Bifrost Identity-Aware Proxy section with AWS ALB selected, showing Mode and Expected signer (ALB ARN) fields`,\"data-og-width\":`2890`,width:`2890`,\"data-og-height\":`1584`,height:`1584`,\"data-path\":`media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?w=280\u0026fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=7a5bd3f766a33fc62b0c4cb2104b563f 280w, https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?w=560\u0026fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=c437d6d561d3be9bab01e72cc6e6290f 560w, https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?w=840\u0026fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=8beec397a2d8304b30ee287bc1bbc62b 840w, https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?w=1100\u0026fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=c1b24a354a157f45d2872d92c1f15940 1100w, https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?w=1650\u0026fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=958e1e081186c8e6ef9e707ea995b66d 1650w, https://mintcdn.com/bifrost/rK0KpLkV9UtA94yC/media/user-provisioning/auth-proxy/bifrost-aws-alb-iap.png?w=2500\u0026fit=max\u0026auto=format\u0026n=rK0KpLkV9UtA94yC\u0026q=85\u0026s=7cb7020b56e6f7ad46424588aba648b2 2500w`})})]}),_jsx(Step,{title:`Choose a mode`,children:_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Login only`}),` (authenticate against existing roles) or `,_jsx(_components.strong,{children:`Full`}),` (map roles and teams from the token). See `,_jsx(_components.a,{href:`#modes`,children:`Modes`}),` above.`]})}),_jsxs(Step,{title:`Fill in the AWS ALB fields`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Value`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Expected signer (ALB ARN)`})}),_jsx(_components.td,{children:`The ARN of your load balancer, pinning the token’s signer to this specific ALB. Bifrost derives the region and the public-key endpoint from it.`})]})})]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Advanced`}),` section lets you override the region, supply an explicit public-key base URL (for partitions like GovCloud), override the request header, or change the identity claim - all optional for a standard ALB.`]})]}),_jsxs(Step,{title:`Save`,children:[_jsxs(_components.p,{children:[`Save the provider configuration. Click `,_jsx(_components.strong,{children:`Verify \u0026 Next`}),` and complete the wizard.`]}),_jsx(_components.p,{children:`Identity-Aware Proxy changes on an already-enabled provider - turning IAP on or off, switching the proxy type, or editing the ARN, region, or mode - are hot-reloaded and take effect immediately (and are propagated to peer nodes in a cluster).`})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`configuration-reference`,children:`Configuration reference`}),`\n`,_jsxs(_components.p,{children:[`The Identity-Aware Proxy is stored as an `,_jsx(_components.code,{children:`authProxy`}),` block on the SSO provider’s configuration. Fields marked `,_jsx(_components.strong,{children:`string (secret)`}),` below accept a plain-text value, an `,_jsx(_components.code,{children:`env.VAR_NAME`}),` reference, or a `,_jsx(_components.code,{children:`vault.path/to/secret`}),` reference; `,_jsx(_components.code,{children:`enabled`}),`, `,_jsx(_components.code,{children:`provider`}),`, `,_jsx(_components.code,{children:`mode`}),`, and `,_jsx(_components.code,{children:`allowedAudiences`}),` are plain values.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`authProxy`}),` block lives inside your SSO provider’s `,_jsx(_components.code,{children:`config`}),` under the top-level `,_jsx(_components.code,{children:`scim_config`}),`, alongside that provider’s own fields:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"scim_config\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"enabled\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"okta\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"config\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:` ...`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"authProxy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"enabled\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aws-alb\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"full\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expectedSigner\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/50dc6c495c0c9188\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`enabled`})}),_jsx(_components.td,{children:`boolean`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Turns the identity-aware proxy on.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`provider`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Set to `,_jsx(_components.code,{children:`aws-alb`}),`. (`,_jsx(_components.code,{children:`cloudflare-access`}),` is the default; `,_jsx(_components.code,{children:`generic`}),` is the other option.)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mode`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`login_only`}),` (default) or `,_jsx(_components.code,{children:`full`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`expectedSigner`})}),_jsx(_components.td,{children:`string (secret)`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`The ALB ARN to pin the token’s signer to. The regional key signs tokens for every ALB in the region, so this binds acceptance to your load balancer specifically.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`region`})}),_jsx(_components.td,{children:`string (secret)`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Region for the public-key endpoint. Derived from the signer ARN when blank.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`publicKeyBaseUrl`})}),_jsx(_components.td,{children:`string (secret)`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Override base URL for the public-key endpoint (keys are fetched from `,_jsx(_components.code,{children:`\u003cbase>/\u003ckid>`}),`). Needed for partitions like GovCloud; must be `,_jsx(_components.code,{children:`https`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`headerName`})}),_jsx(_components.td,{children:`string (secret)`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Override the request header. Defaults to `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`userIdClaim`})}),_jsx(_components.td,{children:`string (secret)`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Token claim used as the user identity. Defaults to `,_jsx(_components.code,{children:`email`}),`.`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`AWS ALB does not use `,_jsx(_components.code,{children:`issuerUrl`}),`, `,_jsx(_components.code,{children:`jwksUrl`}),`, or `,_jsx(_components.code,{children:`audience`}),` - those apply to the JWKS-based providers (Cloudflare Access and generic). The ALB token is validated by ES256 signature against the regional public key and pinned to `,_jsx(_components.code,{children:`expectedSigner`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsx(Heading,{level:`3`,id:`every-request-returns-401-unauthorized`,children:`Every request returns 401 Unauthorized`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The token signature or signer check failed.\n`,_jsx(_components.strong,{children:`Fix:`}),` Confirm `,_jsx(_components.strong,{children:`Expected signer (ALB ARN)`}),` exactly matches your load balancer’s ARN (including account ID and region), and that the region resolved from the ARN is where the ALB actually runs. If you set a custom `,_jsx(_components.strong,{children:`public-key base URL`}),`, verify it’s reachable and `,_jsx(_components.code,{children:`https`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`users-get-403-“not-provisioned”-in-login-only-mode`,children:`Users get 403 “not provisioned” in login-only mode`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` Login-only mode never creates users; the identity isn’t in Bifrost yet.\n`,_jsx(_components.strong,{children:`Fix:`}),` Provision the user first via SCIM or a one-time interactive login, or switch the provider to `,_jsx(_components.strong,{children:`Full`}),` mode so users are provisioned from the token.`]}),`\n`,_jsx(Heading,{level:`3`,id:`role/team-mapping-doesn’t-apply-in-full-mode`,children:`Role/team mapping doesn’t apply in full mode`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The mapping claims (e.g. `,_jsx(_components.code,{children:`groups`}),`) aren’t present in the `,_jsx(_components.code,{children:`x-amzn-oidc-data`}),` token.\n`,_jsx(_components.strong,{children:`Fix:`}),` Enable the relevant claims/scopes on the ALB’s OIDC provider so they’re included in the token (see `,_jsx(_components.a,{href:`#step-2%3A-pass-through-idp-claims-full-mode-only`,children:`Step 2`}),`).`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/enterprise/auth-proxy/cloudflare-ztna`,children:`Cloudflare ZTNA`})}),` - front Bifrost with Cloudflare Access instead`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/enterprise/auth-proxy/generic-proxy`,children:`Generic OIDC proxy`})}),` - front Bifrost with any OIDC-based identity-aware proxy`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/enterprise/rbac`,children:`RBAC`})}),` - define the roles the proxy authenticates against`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/enterprise/user-provisioning`,children:`User provisioning`})}),` - SCIM and OIDC provider setup`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"AWS ALB (Application Load Balancer)","description":"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.","href":"/enterprise/auth-proxy/aws-alb"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Modes","slug":"modes","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Step 1: Configure ALB OIDC authentication","slug":"step-1-configure-alb-oidc-authentication","depth":2,"children":[]},{"title":"Step 2: Pass through IdP claims (full mode only)","slug":"step-2-pass-through-idp-claims-full-mode-only","depth":2,"children":[]},{"title":"Step 3: Enable the Identity-Aware Proxy in Bifrost","slug":"step-3-enable-the-identity-aware-proxy-in-bifrost","depth":2,"children":[]},{"title":"Configuration reference","slug":"configuration-reference","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[{"title":"Every request returns 401 Unauthorized","slug":"every-request-returns-401-unauthorized","depth":3,"children":[]},{"title":"Users get 403 “not provisioned” in login-only mode","slug":"users-get-403-“not-provisioned”-in-login-only-mode","depth":3,"children":[]},{"title":"Role/team mapping doesn’t apply in full mode","slug":"role/team-mapping-doesn’t-apply-in-full-mode","depth":3,"children":[]}]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/bifrost/62ad9b1aea461302/googleTag.js","/_mintlify/custom/bifrost/c4c9272fd1c525e5/jsonLd.js","/_mintlify/custom/bifrost/5a8b9314a2dac891/supportWidget.js","/_mintlify/custom/bifrost/088e287583b748b0/baseUrlSwitcher.js","/_mintlify/custom/bifrost/aa532cead633d329/tally-embed.js","/_mintlify/custom/bifrost/fe58824b4f1a0ad5/footerCompliance.js"],"subdomain":"bifrost","siteName":"Bifrost","title":"AWS ALB (Application Load Balancer) - Bifrost","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-05T07:07:38.090Z","originalFileLocation":"enterprise/auth-proxy/aws-alb.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bifrost\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"AWS ALB (Application Load Balancer) - Bifrost\">\u003cmeta data-mint-head property=\"og:description\" content=\"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bifrost\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bifrost.mintlify.app/_mintlify/api/og/v2?division=Auth+Proxy\u0026amp;title=AWS+ALB+%28Application+Load+Balancer%29\u0026amp;description=Front+Bifrost+Enterprise+with+an+AWS+Application+Load+Balancer+as+an+identity-aware+proxy+that+authenticates+every+request+before+it+reaches+Bifrost.\u0026amp;theme=4d1d84bec9a8c3ee0c7cd8ee\u0026amp;signature=12e72de3dea83867141d4f14e7f8e6a71b055833c2b3fae2be3632751cdb653e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"AWS ALB (Application Load Balancer) - Bifrost\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bifrost.mintlify.app/_mintlify/api/og/v2?division=Auth+Proxy\u0026amp;title=AWS+ALB+%28Application+Load+Balancer%29\u0026amp;description=Front+Bifrost+Enterprise+with+an+AWS+Application+Load+Balancer+as+an+identity-aware+proxy+that+authenticates+every+request+before+it+reaches+Bifrost.\u0026amp;theme=4d1d84bec9a8c3ee0c7cd8ee\u0026amp;signature=12e72de3dea83867141d4f14e7f8e6a71b055833c2b3fae2be3632751cdb653e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/bifrost/kXIL-Qs6IzN4ZLK4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bifrost\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0C3B43\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/enterprise/auth-proxy/aws-alb.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.getbifrost.ai/#organization\",\"name\":\"Bifrost\",\"url\":\"https://docs.getbifrost.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bifrost/qFMmk8bNSnvgFYDI/media/bifrost-logo.png?fit=max\u0026auto=format\u0026n=qFMmk8bNSnvgFYDI\u0026q=85\u0026s=6af701a560aee4103444fa017b226cf0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.getbifrost.ai#website\",\"name\":\"Bifrost\",\"url\":\"https://docs.getbifrost.ai\",\"publisher\":{\"@id\":\"https://docs.getbifrost.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb#webpage\",\"url\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb\",\"name\":\"AWS ALB (Application Load Balancer)\",\"description\":\"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.\",\"dateModified\":\"2026-08-05T07:07:38.090Z\",\"isPartOf\":{\"@id\":\"https://docs.getbifrost.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Identity Providers (SSO)\",\"item\":\"https://docs.getbifrost.ai/enterprise/setting-up-okta/oidc\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Auth Proxy\",\"item\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/cloudflare-ztna\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"AWS ALB (Application Load Balancer)\",\"item\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb#article\",\"headline\":\"AWS ALB (Application Load Balancer)\",\"name\":\"AWS ALB (Application Load Balancer)\",\"description\":\"Front Bifrost Enterprise with an AWS Application Load Balancer as an identity-aware proxy that authenticates every request before it reaches Bifrost.\",\"url\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb\",\"mainEntityOfPage\":{\"@id\":\"https://docs.getbifrost.ai/enterprise/auth-proxy/aws-alb#webpage\"},\"dateModified\":\"2026-08-05T07:07:38.090Z\",\"publisher\":{\"@id\":\"https://docs.getbifrost.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.getbifrost.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bifrost\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Bifrost","nav":{"global":{"anchors":[{"anchor":"Discord","icon":"discord","href":"https://discord.gg/exN5KAydbU"},{"anchor":"GitHub","icon":"github","href":"https://github.com/maximhq/bifrost"},{"anchor":"Try Enterprise","icon":"building","href":"https://www.getmaxim.ai/bifrost/enterprise"}]},"tabs":[{"tab":"OSS","icon":"book-open-cover","pages":[{"title":"OSS","href":"/overview"}]},{"tab":"Enterprise","icon":"building","pages":[{"title":"Enterprise","href":"/enterprise/overview"}]},{"tab":"Edge","icon":"globe","pages":[{"title":"Edge","href":"/edge/overview"}]},{"tab":"Integrations","icon":"plug","groups":[{"group":"Runbooks","icon":"book-open","pages":[{"title":"Set up Claude Code with Amazon Bedrock","icon":"star-of-life","href":"/runbooks/claude-code-bedrock"},{"title":"Set up Codex CLI with Amazon Bedrock","icon":"openai","href":"/runbooks/codex-bedrock"}]},{"group":"CLI Agents \u0026 Editors","icon":"command","pages":[{"title":"Overview","icon":"Book","href":"/cli-agents/overview"},{"title":"Cursor","icon":"arrow-pointer","href":"/cli-agents/cursor"},{"title":"LibreChat","icon":"message","href":"/cli-agents/librechat"},{"title":"Claude Code","icon":"star-of-life","href":"/cli-agents/claude-code"},{"title":"Claude Desktop","icon":"desktop","href":"/cli-agents/claude-desktop"},{"title":"Claude for Office","icon":"file-word","href":"/cli-agents/claude-for-office"},{"title":"GitHub Copilot","icon":"github","href":"/cli-agents/github-copilot"},{"title":"Codex CLI","icon":"openai","href":"/cli-agents/codex-cli"},{"title":"Gemini CLI","icon":"diamond","href":"/cli-agents/gemini-cli"},{"title":"Qwen Code","icon":"q","href":"/cli-agents/qwen-code"},{"title":"OpenCode","icon":"codepen","href":"/cli-agents/opencode"},{"title":"Zed Editor","icon":"z","href":"/cli-agents/zed-editor"},{"title":"Roo Code","icon":"code","href":"/cli-agents/roo-code"},{"title":"Open WebUI","icon":"globe","href":"/cli-agents/open-webui"}]},{"group":"SDKs \u0026 Frameworks","icon":"code","pages":[{"group":"OpenAI SDK","icon":"openai","pages":[{"title":"Overview","icon":"book","href":"/integrations/openai-sdk/overview"},{"title":"Files and Batch API","tag":"Beta","icon":"folder-open","href":"/integrations/openai-sdk/files-and-batch"}]},{"group":"Anthropic SDK","icon":"asterisk","pages":[{"title":"Overview","icon":"book","href":"/integrations/anthropic-sdk/overview"},{"title":"Files and Batch API","tag":"Beta","icon":"folder-open","href":"/integrations/anthropic-sdk/files-and-batch"}]},{"group":"Bedrock SDK","icon":"aws","pages":[{"title":"Overview","icon":"book","href":"/integrations/bedrock-sdk/overview"},{"title":"Files and Batch API","tag":"Beta","icon":"folder-open","href":"/integrations/bedrock-sdk/files-and-batch"}]},{"group":"GenAI SDK","icon":"diamond","pages":[{"title":"Overview","icon":"book","href":"/integrations/genai-sdk/overview"},{"title":"Files and Batch API","icon":"folder-open","href":"/integrations/genai-sdk/files-and-batch"}]},{"group":"Cohere SDK","icon":"c","pages":[{"title":"Overview","icon":"book","href":"/integrations/cohere-sdk/overview"}]},{"title":"LiteLLM SDK","icon":"train","href":"/integrations/litellm-sdk"},{"title":"Langchain SDK","icon":"crow","href":"/integrations/langchain-sdk"},{"title":"Pydantic AI SDK","icon":"triangle","href":"/integrations/pydanticai-sdk"},{"title":"TypeSafe SDK","icon":"scale-balanced","href":"/integrations/typesafe-sdk"},{"title":"Passthrough","icon":"route","href":"/integrations/passthrough"}]},{"group":"Identity Providers (SSO)","icon":"id-card","pages":[{"group":"Okta","icon":"/media/okta-icon.svg","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-okta/oidc"},{"title":"Setup SCIM","href":"/enterprise/setting-up-okta/scim"}]},{"group":"Microsoft Entra","icon":"microsoft","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-entra/oidc"},{"title":"Setup SCIM","href":"/enterprise/setting-up-entra/scim"}]},{"group":"Zitadel","icon":"/media/zitadel-icon.svg","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-zitadel/oidc"}]},{"group":"Keycloak","icon":"/media/keycloak-icon.svg","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-keycloak/oidc"}]},{"group":"Google Workspace","icon":"google","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-google-workspace/oidc"},{"title":"Setup SCIM","href":"/enterprise/setting-up-google-workspace/scim"}]},{"group":"Auth0","icon":"/media/auth0-icon.svg","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-auth0/oidc"}]},{"group":"Generic OIDC","icon":"fingerprint","pages":[{"title":"SSO using OIDC","href":"/enterprise/setting-up-generic-oidc/oidc"},{"title":"Setup SCIM","href":"/enterprise/setting-up-generic-oidc/scim"}]},{"group":"Auth Proxy","icon":"shield-halved","pages":[{"title":"Cloudflare ZTNA (Access)","description":"Front Bifrost Enterprise with Cloudflare Access (Zero Trust) as an identity-aware proxy that authenticates every request before it reaches Bifrost.","href":"/enterprise/auth-proxy/cloudflare-ztna"},{"title":"AWS ALB (Application Load Balancer)","href":"/enterprise/auth-proxy/aws-alb"},{"title":"Generic OIDC Proxy","description":"Front Bifrost Enterprise with any OIDC-based identity-aware proxy that injects a signed JWT header on every request.","href":"/enterprise/auth-proxy/generic-proxy"}]}]},{"group":"Content Safety (Guardrails)","icon":"road-barrier","pages":[{"title":"Secrets Detection","icon":"key","href":"/enterprise/guardrails/secrets-detection"},{"title":"Prompt Guardrails","icon":"shield-check","href":"/enterprise/guardrails/prompt-guardrails"},{"title":"Custom Regex","icon":"code","href":"/enterprise/guardrails/custom-regex"},{"title":"Microsoft Presidio","icon":"microsoft","href":"/integrations/guardrails/presidio"},{"title":"Azure AI Language PII","icon":"microsoft","href":"/integrations/guardrails/azure-language-pii"},{"title":"AWS Bedrock Guardrails","icon":"aws","href":"/integrations/guardrails/aws-bedrock"},{"title":"Azure Content Safety","icon":"microsoft","href":"/integrations/guardrails/azure-content-safety"},{"title":"Google Model Armor","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/google-model-armor-nav.svg","href":"/integrations/guardrails/google-model-armor"},{"title":"CrowdStrike AIDR","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/crowdstrike-nav.svg","href":"/integrations/guardrails/crowdstrike-aidr"},{"title":"Gray Swan Cygnal","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/grayswan-logo-nav.svg","href":"/integrations/guardrails/grayswan"},{"title":"Patronus AI","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/patronus-logo-nav.svg","href":"/integrations/guardrails/patronus-ai"},{"title":"Check Point's AI Agent Security","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/lakera-logo-nav-v5.svg","href":"/integrations/guardrails/checkpoint"},{"title":"Repello Argus","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/repello-argus-logo-nav.svg","href":"/integrations/guardrails/repello-argus"},{"title":"Singulr AI","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/singulr-logo-nav.svg","href":"/integrations/guardrails/singulr-ai"},{"title":"A10 Guardrails","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bifrost/media/a10-logo-nav.svg","href":"/integrations/guardrails/a10"}]},{"group":"Observability","icon":"binoculars","pages":[{"title":"Built-in Observability","icon":"cube","href":"/features/observability/default"},{"title":"Maxim AI","icon":"infinity","href":"/features/observability/maxim"},{"title":"Datadog","icon":"dog","href":"/features/observability/datadog"},{"title":"OpenTelemetry (OTel)","icon":"bolt","href":"/features/observability/otel"},{"title":"Prometheus","icon":"chart-line","href":"/features/observability/prometheus"},{"title":"Kafka","icon":"database","href":"/features/observability/kafka"},{"title":"BigQuery","icon":"table","href":"/features/observability/bigquery"},{"title":"Pub/Sub","icon":"database","href":"/features/observability/pubsub"},{"title":"Splunk","icon":"database","href":"/features/observability/splunk"}]},{"group":"Vector Databases","icon":"database","pages":[{"title":"Weaviate","icon":"database","href":"/integrations/vector-databases/weaviate"},{"title":"Redis / Valkey","icon":"database","href":"/integrations/vector-databases/redis"},{"title":"Qdrant","icon":"database","href":"/integrations/vector-databases/qdrant"},{"title":"Pinecone","icon":"database","href":"/integrations/vector-databases/pinecone"}]}]},{"tab":"Deployment Guides","icon":"server","pages":[{"title":"Deployment Guides","href":"/deployment-guides/overview"}]},{"tab":"API","icon":"code","pages":[{"title":"API","href":"/api/procuring-api-keys"}]},{"tab":"Contributing","icon":"code-pull-request","pages":[{"title":"Contributing","href":"/contributing/setting-up-repo"}]},{"tab":"Benchmarks","icon":"chart-line","pages":[{"title":"Benchmarks","href":"/benchmarking/getting-started"}]},{"tab":"Changelogs","icon":"bolt","menu":[{"item":"Open Source","icon":"rocket","pages":[{"title":"Open Source","href":"/changelogs/v2.4.0"}]},{"item":"Enterprise","icon":"building","pages":[{"title":"Enterprise","href":"/changelogs/ent-v2.4.0"}]},{"item":"Edge","icon":"grip","pages":[{"title":"Edge","href":"/changelogs/edge-v1.0.0"}]},{"item":"Bifrost CLI","icon":"laptop-code","pages":[{"title":"Bifrost CLI","href":"/changelogs/cli-v1.0.0"}]},{"item":"Helm","icon":"box","pages":[{"title":"Helm","href":"/changelogs/helm-v2.1.47"}]}],"pages":[{"title":"Changelogs","href":"/changelogs/v2.4.0"}]}]},"basePath":"","title":"AWS ALB (Application Load Balancer) - Bifrost","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DW6UFrUy.js","DynamicMarkdown-B62XqCSI.js","zoom-image-lightbox-eHyQ0tlO.js","lightbox-handle-r17bVUz3.js"]}