ZITADEL - Identity infrastructure, simplified for you.
Go to file
Livio Spring 3d071fc505
feat: trusted (instance) domains (#8369)
# Which Problems Are Solved

ZITADEL currently selects the instance context based on a HTTP header
(see https://github.com/zitadel/zitadel/issues/8279#issue-2399959845 and
checks it against the list of instance domains. Let's call it instance
or API domain.
For any context based URL (e.g. OAuth, OIDC, SAML endpoints, links in
emails, ...) the requested domain (instance domain) will be used. Let's
call it the public domain.
In cases of proxied setups, all exposed domains (public domains) require
the domain to be managed as instance domain.
This can either be done using the "ExternalDomain" in the runtime config
or via system API, which requires a validation through CustomerPortal on
zitadel.cloud.

# How the Problems Are Solved

- Two new headers / header list are added:
- `InstanceHostHeaders`: an ordered list (first sent wins), which will
be used to match the instance.
(For backward compatibility: the `HTTP1HostHeader`, `HTTP2HostHeader`
and `forwarded`, `x-forwarded-for`, `x-forwarded-host` are checked
afterwards as well)
- `PublicHostHeaders`: an ordered list (first sent wins), which will be
used as public host / domain. This will be checked against a list of
trusted domains on the instance.
- The middleware intercepts all requests to the API and passes a
`DomainCtx` object with the hosts and protocol into the context
(previously only a computed `origin` was passed)
- HTTP / GRPC server do not longer try to match the headers to instances
themself, but use the passed `http.DomainContext` in their interceptors.
- The `RequestedHost` and `RequestedDomain` from authz.Instance are
removed in favor of the `http.DomainContext`
- When authenticating to or signing out from Console UI, the current
`http.DomainContext(ctx).Origin` (already checked by instance
interceptor for validity) is used to compute and dynamically add a
`redirect_uri` and `post_logout_redirect_uri`.
- Gateway passes all configured host headers (previously only did
`x-zitadel-*`)
- Admin API allows to manage trusted domain

# Additional Changes

None

# Additional Context

- part of #8279 
- open topics: 
  - "single-instance" mode
  - Console UI
2024-07-31 18:00:38 +03:00
.codecov chore(codecov): make codecov configurable in repo (#40) 2020-04-08 07:37:24 +02:00
.devcontainer docs: add developing with dev containers (#8095) 2024-06-18 08:29:02 +00:00
.github chore(lint): print error locations (#8246) 2024-07-17 07:20:45 +00:00
build chore(deps): bump node from 18-buster to 20-buster in /build (#6258) 2023-10-12 16:51:50 +00:00
cmd feat: trusted (instance) domains (#8369) 2024-07-31 18:00:38 +03:00
console fix: sanitize output for email (#8373) 2024-07-31 14:21:10 +02:00
deploy/knative docs: fix knative docs (#7752) 2024-04-18 13:45:15 +00:00
docs feat(v3alpha): write actions (#8225) 2024-07-31 14:42:12 +02:00
e2e fix: remove default TOS and privacy links (#8122) 2024-07-25 08:39:10 +02:00
internal feat: trusted (instance) domains (#8369) 2024-07-31 18:00:38 +03:00
load-test test: add load test for session creation (#8088) 2024-07-09 15:16:50 +00:00
openapi ci: improve performance (#5953) 2023-07-17 10:08:20 +02:00
pkg/grpc feat: api v2beta to api v2 (#8283) 2024-07-26 22:39:55 +02:00
proto feat: trusted (instance) domains (#8369) 2024-07-31 18:00:38 +03:00
statik feat: api v2beta to api v2 (#8283) 2024-07-26 22:39:55 +02:00
.dockerignore ci: improve performance (#5953) 2023-07-17 10:08:20 +02:00
.gitattributes chore(devcontainer): improve devcontainer to work on windows and linux (#8194) 2024-06-25 14:40:34 +00:00
.gitignore chore(docs): use gh action to build docs (#8097) 2024-06-13 08:07:39 +00:00
.golangci.yaml chore(deps): update all go deps (#7773) 2024-04-15 09:17:36 +00:00
.releaserc.js chore: avoid latest on maintenance releases (#7702) 2024-04-10 11:56:05 +00:00
buf.gen.yaml ci: improve performance (#5953) 2023-07-17 10:08:20 +02:00
buf.work.yaml chore(console): buf stub build (#5215) 2023-02-17 14:09:11 +00:00
changelog.config.js feat: Merge master (#1260) 2021-02-08 16:48:41 +01:00
CODE_OF_CONDUCT.md chore: rename docs links (#3668) 2022-05-20 14:32:06 +00:00
CONTRIBUTING.md docs: add developing with dev containers (#8095) 2024-06-18 08:29:02 +00:00
go.mod chore: update dependencies (#8242) 2024-07-04 08:28:56 +02:00
go.sum chore: update dependencies (#8242) 2024-07-04 08:28:56 +02:00
LICENSE chore: Update LICENSE (#1087) 2020-12-14 09:40:09 +01:00
main.go chore: test server for direct resource access 2023-04-24 20:40:31 +03:00
Makefile chore: update dependencies (#8242) 2024-07-04 08:28:56 +02:00
MEETING_SCHEDULE.md docs(office-hours): add new resource api (#8077) 2024-06-06 10:16:36 +00:00
README.md docs: add office hours (#7999) 2024-05-29 07:34:37 +00:00
release-channels.yaml chore(stable): update to v2.52.2 (#8349) 2024-07-29 04:53:31 +00:00
SECURITY.md docs: rename instance settings to default settings (#7484) 2024-03-06 10:36:04 +00:00

Zitadel Logo Zitadel Logo

GitHub Workflow Status (with event) Dynamic YAML Badge GitHub contributors

Community Meeting
ZITADEL holds bi-weekly community calls. To join the community calls or to watch previous meeting notes and recordings, please visit the meeting schedule.

Are you searching for a user management tool that is quickly set up like Auth0 and open source like Keycloak?

Do you have a project that requires multi-tenant user management with self-service for your customers?

Look no further — ZITADEL is the identity infrastructure, simplified for you.

We provide you with a wide range of out-of-the-box features to accelerate your project, including:

Multi-tenancy with team management
Secure login
Self-service
OpenID Connect
OAuth2.x
SAML2
LDAP
Passkeys / FIDO2
OTP
and an unlimited audit trail is there for you, ready to use.

With ZITADEL, you are assured of a robust and customizable turnkey solution for all your authentication and authorization needs.


🏡 Website 💬 Chat 📋 Docs 🧑‍💻 Blog 📞 Contact

Get started

👉 Quick Start Guide

Deploy ZITADEL (Self-Hosted)

Deploying ZITADEL locally takes less than 3 minutes. Go ahead and give it a try!

See all guides here

If you are interested to get professional support for your self-hosted ZITADEL please reach out to us!

Setup ZITADEL Cloud (SaaS)

If you want to experience a hands-free ZITADEL, you should use ZITADEL Cloud.

ZITADEL Cloud comes with a free tier, providing you with all the same features as the open-source version. Learn more about the pay-as-you-go pricing.

Example applications

Clone one of our example applications or deploy them directly to Vercel.

SDKs

Use our SDKs for your favorite language and framework.

Why choose ZITADEL

We built ZITADEL with a complex multi-tenancy architecture in mind and provide the best solution to handle B2B customers and partners. Yet it offers everything you need for a customer identity (CIAM) use case.

Features

Authentication

Multi-Tenancy

Integration

Self-Service

Deployment

Track upcoming features on our roadmap.

How To Contribute

Find details about how you can contribute in our Contribution Guide

Contributors

Made with contrib.rocks.

Showcase

Quick Start Guide

Secure a React Application using OpenID Connect Authorization Code with PKCE

Quick Start Guide

Login with Passkeys

Use our login widget to allow easy and secure access to your applications and enjoy all the benefits of Passkeys (FIDO 2 / WebAuthN):

Passkeys

Admin Console

Use Console or our APIs to setup organizations, projects and applications.

Console Showcase

Security

You can find our security policy here.

Technical Advisories are published regarding major issues with the ZITADEL platform that could potentially impact security or stability in production environments.

License

here are our exact licensing terms.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See our license for detailed information governing permissions and limitations on use.