mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-30 11:02:16 +00:00
## Todos for release - [x] Configure Env in docs project on vercel - [x] Configure Root Path in the docs project on vercel - [ ] Remove old CSP https://github.com/zitadel/website/pull/1592 ## What we did This pull request migrates the project documentation from the old `docs/` directory to the new `apps/docs/` directory, introduces a new documentation system built with Next.js and Fumadocs, and updates all relevant references, configuration files, and documentation to reflect this change. It also adds new configuration and ignore files for the new documentation app, updates CI and linting to exclude the new docs from certain checks, and revises the contributing guidelines accordingly. **Documentation System Migration and New Docs App** * Migrated all documentation from `docs/` to `apps/docs/`, and updated all references in `README.md`, `CONTRIBUTING.md`, and other files to point to the new location. [[1]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L585-L640) [[2]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L660-R607) [[3]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L740-R687) [[4]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L2-R3) [[5]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L30-R30) * Added a new Next.js/Fumadocs-based documentation app under `apps/docs/`, including core app files, layouts, routing, search API, and a comprehensive `README.md` with development and contribution instructions. [[1]](diffhunk://#diff-5a1b07344a2c1b4d3f37b23ff1388b62cd9f57dea3c1cd23d8a0412b7602b132R1-R74) [[2]](diffhunk://#diff-462b9ad1eabbb7d1c29bb9c36e4931eb180fd7190900e6d2babf8f4d66ad1c28R1-R39) [[3]](diffhunk://#diff-e16ae25660ded787b10ac35dea96d5ecaacf895dae0afc8a9bd4382dc79a8c87R1-R7) [apps/docs/app/[[...slug]]/layout.tsxR1-R81](diffhunk://#diff-59e08acde4e805b7aeccef1dcf98f1d71dfc550777e6b9402085cee0e9fa4e0aR1-R81), [apps/docs/app/[[...slug]]/page.tsxR1-R79](diffhunk://#diff-e5df3f80d0fa01e12d63d81f29c57a9d14e846c78fd3beabb2ef768e38fd9580R1-R79), [[4]](diffhunk://#diff-389b34918e040cacaa87cd7201ffa462cc2b0b716736f537e3d3c660ac69353bR1-R7) [[5]](diffhunk://#diff-d3b03416d1c457b19f1c27b26f2db741412df841b875c26ccadc36e4522247f4R1-R29) [[6]](diffhunk://#diff-c8fb8339570a5305809be7c618e14705fd86390dc278e6ce8ba224a7bc8b0c3cR1-R25) **Configuration and Tooling Updates** * Updated `.github/workflows/codeql.yml`, `.golangci.yaml`, and `.github/dependabot.yml` to properly handle the new docs app: excluded `apps/docs` from certain checks, added npm dependency updates for the docs app, and excluded generated content. [[1]](diffhunk://#diff-12783128521e452af0cfac94b99b8d250413c516ec71fe6d97dbea666ff7ba27L8-R14) [[2]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R5-R6) [[3]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R126-R129) [[4]](diffhunk://#diff-dd4fbda47e51f1e35defb9275a9cd9c212ecde0b870cba89ddaaae65c5f3cd28R89-R106) * Updated `.devcontainer/devcontainer.json` to use the latest Go 1.25.3 version for consistency. **Licensing and Miscellaneous** * Added `apps/docs/` to the list of licensed directories in `LICENSING.md`. These changes ensure the documentation is now maintained in a modern, scalable system and all project tooling is updated to support the new structure. --------- Co-authored-by: Federico Coppede <[email protected]>
233 lines
7.2 KiB
Plaintext
233 lines
7.2 KiB
Plaintext
---
|
|
title: Configure Local OpenLDAP as an Identity Provider in ZITADEL
|
|
sidebar_label: Local OpenLDAP
|
|
---
|
|
|
|
import Intro from './_intro.mdx';
|
|
import CustomLoginPolicy from './_custom_login_policy.mdx';
|
|
import IDPsOverview from './_idps_overview.mdx';
|
|
import GeneralConfigDescription from './_general_config_description.mdx';
|
|
import Activate from './_activate.mdx';
|
|
import TestSetup from './_test_setup.mdx';
|
|
|
|
import HowLDAPIDPWorks from './_how_ldap_idp_works.mdx'
|
|
|
|
<Callout type="warn">
|
|
This guide shows you how you can configure an LDAP server locally.
|
|
ZITADEL needs access to the LDAP server, so this won't work in ZITADEL Cloud.
|
|
You have to spin up your own local ZITADEL.
|
|
The easiest way to do so is [by following the Docker Compose installation guide](/self-hosting/deploy/compose).
|
|
</Callout>
|
|
|
|
<Callout type="caution">
|
|
Beware that this example configuration neither supports LDAPS nor StartTLS.
|
|
We highly recommend to enable LDAPS or StartTLS in your production setup.
|
|
Otherwise, your users passwords are sent in clear text through the wire.
|
|
</Callout>
|
|
|
|
<Intro components={props.components} provider="a local OpenLDAP server"/>
|
|
|
|
## How it works
|
|
|
|
<HowLDAPIDPWorks components={props.components} />
|
|
|
|
## OpenLDAP Configuration
|
|
|
|
### Basic configuration
|
|
|
|
You can run OpenLdap via `docker-compose` using the following:
|
|
```
|
|
version: '2'
|
|
|
|
networks:
|
|
my-network:
|
|
driver: bridge
|
|
services:
|
|
openldap:
|
|
image: bitnami/openldap:latest
|
|
ports:
|
|
- '389:1389'
|
|
environment:
|
|
- LDAP_ADMIN_USERNAME=admin
|
|
- LDAP_ADMIN_PASSWORD=Password1!
|
|
- LDAP_USERS=test
|
|
- LDAP_PASSWORDS=Password1!
|
|
- LDAP_ROOT=dc=example,dc=com
|
|
- LDAP_ADMIN_DN=cn=admin,dc=example,dc=com
|
|
networks:
|
|
- my-network
|
|
volumes:
|
|
- 'openldap_data:/bitnami/openldap'
|
|
volumes:
|
|
openldap_data:
|
|
driver: local
|
|
````
|
|
|
|
Alternatively, you can run LDAP locally. To run LDAP locally to test it with ZITADEL please refer to [OpenLDAP](https://www.openldap.org/) with [slapd](https://www.openldap.org/software/man.cgi?query=slapd).
|
|
|
|
For a quickstart guide please refer to their [official documentation](https://www.openldap.org/doc/admin22/quickstart.html).
|
|
|
|
A basic configuration would be like this
|
|
```
|
|
#
|
|
# See slapd.conf(5) for details on configuration options.
|
|
# This file should NOT be world readable.
|
|
#
|
|
include /usr/local/etc/openldap/schema/core.schema
|
|
include /usr/local/etc/openldap/schema/cosine.schema
|
|
include /usr/local/etc/openldap/schema/inetorgperson.schema
|
|
include /usr/local/etc/openldap/schema/nis.schema
|
|
include /usr/local/etc/openldap/schema/misc.schema
|
|
|
|
# Define global ACLs to disable default read access.
|
|
|
|
# Do not enable referrals until AFTER you have a working directory
|
|
# service AND an understanding of referrals.
|
|
#referral ldap://root.openldap.org
|
|
|
|
pidfile /usr/local/var/run/slapd.pid
|
|
argsfile /usr/local/var/run/slapd.args
|
|
|
|
# Load dynamic backend modules:
|
|
modulepath /usr/local/Cellar/openldap/2.4.53/libexec/openldap
|
|
moduleload back_mdb.la
|
|
moduleload back_ldap.la
|
|
|
|
# Sample security restrictions
|
|
# Require integrity protection (prevent hijacking)
|
|
# Require 112-bit (3DES or better) encryption for updates
|
|
# Require 63-bit encryption for simple bind
|
|
# security ssf=1 update_ssf=112 simple_bind=64
|
|
|
|
# Sample access control policy:
|
|
# Root DSE: allow anyone to read it
|
|
# Subschema (sub)entry DSE: allow anyone to read it
|
|
# Other DSEs:
|
|
# Allow self write access
|
|
# Allow authenticated users read access
|
|
# Allow anonymous users to authenticate
|
|
# Directives needed to implement policy:
|
|
# access to dn.base="" by * read
|
|
# access to dn.base="cn=Subschema" by * read
|
|
# access to *
|
|
# by self write
|
|
# by users read
|
|
# by anonymous auth
|
|
#
|
|
# if no access controls are present, the default policy
|
|
# allows anyone and everyone to read anything but restricts
|
|
# updates to rootdn. (e.g., "access to * by * read")
|
|
#
|
|
# rootdn can always read and write EVERYTHING!
|
|
|
|
#######################################################################
|
|
# MDB database definitions
|
|
#######################################################################
|
|
|
|
database ldif
|
|
#maxsize 1073741824
|
|
suffix "dc=example,dc=com"
|
|
rootdn "cn=admin,dc=example,dc=com"
|
|
# Cleartext passwords, especially for the rootdn, should
|
|
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
|
|
# Use of strong authentication encouraged.
|
|
rootpw {SSHA}6FTOTIITpkP9IAf22VjHqu4JisyBmW5A
|
|
# The database directory MUST exist prior to running slapd AND
|
|
# should only be accessible by the slapd and slap tools.
|
|
# Mode 700 recommended.
|
|
directory /usr/local/var/openldap-data
|
|
# Indices to maintain
|
|
#index objectClass eq
|
|
```
|
|
|
|
Which is the default configuration with an admin user under the DN `cn=admin,dc=example,dc=com` and password `Password1!`, BaseDN `"dc=example,dc=com` and database set to `ldif`.
|
|
In addition, there are some schemas included which can be used to create the users.
|
|
|
|
### Example users
|
|
|
|
For a basic structure and an example user you can use this structure in a `.ldif` file:
|
|
```
|
|
dn: dc=example,dc=com
|
|
dc: example
|
|
description: Company
|
|
objectClass: dcObject
|
|
objectClass: organization
|
|
o: Example, Inc.
|
|
|
|
dn: ou=people, dc=example,dc=com
|
|
ou: people
|
|
description: All people in organisation
|
|
objectclass: organizationalunit
|
|
|
|
dn: cn=test,ou=people,dc=example,dc=com
|
|
objectclass: inetOrgPerson
|
|
cn: testuser
|
|
sn: test
|
|
uid: test
|
|
userpassword: {SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
|
|
mail: [email protected]
|
|
description: Person
|
|
ou: Human Resources
|
|
```
|
|
|
|
Which in essence creates a user with DN `cn=test,ou=people,dc=example,dc=com`, uid `test` and password `test`.
|
|
|
|
The user can be applied after OpenLDAP is running with
|
|
```bash
|
|
ldapadd -x -h localhost -D "cn=admin,dc=example,dc=com" -f example.ldif -w 'Password1!'
|
|
```
|
|
|
|
## ZITADEL Configuration
|
|
|
|
### Go to the IdP Providers Overview
|
|
|
|
<IDPsOverview components={props.components} templates="Active Directory / LDAP"/>
|
|
|
|
### Create a new LDAP Provider
|
|
|
|
Fill in the template fields with the exact values listed below. The fields are described in the [LDAP guide](./ldap#create-a-new-ldap-provider).
|
|
|
|
**Name**: OpenLDAP
|
|
|
|
**Servers**: "ldap://localhost:389"
|
|
|
|
**BaseDN**: "dc=example,dc=com"
|
|
|
|
**BindDn**: "cn=admin,dc=example,dc=com"
|
|
|
|
**BindPassword**: "Password1!"
|
|
|
|
**Userbase**: "dn"
|
|
|
|
**User filters**: "uid"
|
|
|
|
**User Object Classes**: "inetOrgPerson"
|
|
|
|
**LDAP Attributes**: id attributes = "uid"
|
|
|
|
**StartTLS**: For this example should be left untouched, if this setting is enabled after the initial connection ZITADEL tries to build a TLS connection.
|
|
|
|
**Timeout**: Can be left empty, if this setting is set all connection run with a set timeout, if it is 0s the default timeout of 60s is used.
|
|
|
|
<GeneralConfigDescription components={props.components} provider_account="LDAP user" />
|
|
|
|

|
|
|
|
### Activate IdP
|
|
|
|
<Activate components={props.components} />
|
|
|
|

|
|
|
|
### Ensure your Login Policy allows External IDPs
|
|
|
|
<CustomLoginPolicy components={props.components} />
|
|
|
|
## Test the setup
|
|
|
|
<TestSetup components={props.components} loginscreen="ZITADELs LDAP login"/>
|
|
|
|

|
|
|
|

|