第 16 章 客户端、Groupware & CLI 管理:#pIdentity

身份源:Active Directory、LDAP、Entra ID、Keycloak 和 SCIM

在“管理 > 身份源”中,您可以将租户或单个域连接到 Active Directory 或 LDAP(通过 bind 登录,同步用户、嵌套组和联系人),或连接到 Microsoft Entra ID、Keycloak 及其他 OpenID Connect 提供方(通过 SSO 登录,通过 SCIM 2.0 预配)。本地账户可同时完整使用(混合模式)。每个账户只有一个来源;匹配依据 ExternalId(AD objectGUID、Entra objectId、LDAP entryUUID),绝不仅凭邮件地址。由来源管理的字段在管理后台和“我的账户”中为只读。

运维提示与架构说明

至少保留一个不关联任何来源的本地服务器管理员,作为紧急访问账户。该账户永远不会被 AD 接管,永远不会通过 SSO 邮件匹配登录,即使 AD 或 Entra 不可达也能使用。请将 nextxch 的锁定阈值(默认 5 次失败)设置为低于 AD 账户锁定阈值:这样攻击者永远无法锁定 AD 账户,因为 nextxch 会在绑定之前就停止。

Entra ID:用于登录和 SCIM 的应用注册

登录:自行注册应用(Web 平台),重定向 URI 取自 管理 > 身份源。预配:非库企业应用,预配模式为 "自动",租户 URL 和机密令牌来自 nextxch。

参考 / 配置
1. Entra admin center > App registrations > New registration
   Name:            nextxch Webmail
   Account types:   Accounts in this organizational directory only (single tenant)
   Redirect URI:    Web  https://mail.example.com/api/auth/sso/callback
2. Certificates & secrets > New client secret  -> enter it in nextxch as client secret
3. Token configuration > Add optional claim: ID token "email" (otherwise preferred_username = UPN is used)
4. App roles (optional): e.g. create "Nextxch.TenantAdmins", assign users,
   in nextxch: claim "roles", value "Nextxch.TenantAdmins" -> role TenantAdmin
5. nextxch Admin > Identity sources > Add Entra ID / OIDC
   Authority:  https://login.microsoftonline.com/<directory id>/v2.0
   Client id:  <application id>
6. SCIM: Enterprise applications > New application > Create your own (non-gallery)
   Provisioning > Automatic
   Tenant URL:    https://mail.example.com/scim/v2
   Secret token:  nxscim_...   (Admin > Identity sources > Create SCIM token)
   Mappings: userName <- userPrincipalName, emails[type eq "work"].value <- mail,
             externalId <- objectId (recommended) or mailNickname

设置、默认值与最佳实践

设置 / 位置 说明 默认值 生产环境最佳实践
Active Directory: Dienstkonto 无管理员权限的普通域用户,只读(默认的 "Authenticated Users" 读取权限即可)。密码不过期。加密存储,从不显示。 CN=svc-nextxch,OU=Service,... 无需域管理员。读取权限即可获取照片和 proxyAddresses。可选择将"登录到"限制为域控制器。
LDAPS 636 / StartTLS 389 与域控制器之间的加密连接。依次尝试多个 DC(故障转移),每个 DC 的超时可配置。 LDAPS, 10 s 在 nextxch 服务器上信任域控制器证书(或内部 CA)。"不检查证书" 只应在设置期间短暂使用。
Anmeldung (alle Protokolle) Webmail、管理后台、IMAP、SMTP、POP3、ActiveSync、EWS、MAPI 和 DAV 通过绑定(bind)校验 AD 密码。登录名:邮件地址、userPrincipalName、sAMAccountName 或 DOMAIN\user。 Cache 15 min (Hash) 短期登录缓存只存储 HMAC,从不存储密码,可在域控制器短暂中断期间保持登录可用。设为 0 即关闭。
Abgleich: Benutzer, Gruppen, Kontakte mail 和 proxyAddresses(SMTP: = 主地址,smtp: = 别名)、displayName、givenName、sn、telephoneNumber、mobile、title、department、company、physicalDeliveryOfficeName、manager、thumbnailPhoto;userAccountControl 和 accountExpires 会停用邮箱。启用邮件的组成为通讯组列表(通过 LDAP_MATCHING_RULE_IN_CHAIN 嵌套),联系人显示在通讯簿中。 Delta 15 min, voll 02:00 首次运行前请使用“预览”:显示哪些账户将被创建、接管或禁用,而不做任何更改。可按“邮件用户”组进行筛选。
Gelöschte Objekte 当对象从 AD 中消失(或 Entra 发送 SCIM DELETE)时,邮箱会立即被禁用。宽限期结束后由管理员决定:删除、保留为共享邮箱或保持禁用。 30 Tage 重命名不等于删除:旧的主地址会保留为别名。
Vorlagen 适用于 Microsoft AD、Samba AD、OpenLDAP、Univention Corporate Server 和 FreeIPA 的属性映射;每个字段都可以覆盖,或用 "-" 关闭。 Active Directory OpenLDAP 的组过滤器需要 memberOf overlay;nextxch 会自行解析其中的嵌套组。
OIDC (Entra ID, Keycloak) 服务器端使用带 PKCE 的授权码流程,discovery 和 JWKS 支持自动密钥轮换,RS256/ES256,校验 iss、aud、exp、nonce 以及 Entra 租户 tid。组或应用角色声明映射到 User、TenantAdmin 和 ServerAdmin。 Knopf auf der Anmeldeseite Keycloak:authority 为 https://kc.example.com/realms/<realm>,使用标准流程的机密客户端,重定向 URI 同上;角色通过声明 realm_access.roles 传递。
Lokale Passwörter pro Domain 可分别针对 Webmail/管理后台和协议关闭。Entra 密码永远不会到达 nextxch:邮件应用(Outlook、iPhone、Thunderbird)使用应用密码;Webmail 会通过向导引导完成设置。 An 还可以按协议强制 "仅限 OAuth / Kerberos"(参见第 16a 和 16b 章)。如果来源允许,AD 用户可以在 Webmail 中修改密码。
Kennwort ändern (AD / LDAP) 启用 "用户可以修改密码" 后,Webmail 会在 设置 > 安全 下显示一个表单(当前密码和新密码)。AD:通过 LDAPS 使用旧密码修改 unicodePwd,因此 AD 的复杂性要求、密码历史和最短使用期限均适用;其他目录:RFC 3062。管理员在账户对话框中重置密码(可选 "下次登录时须更改密码")。 Aus 对于管理员重置,只需在用户 OU 上向服务账户委派 "Reset password" 权限。密码从不记录到日志。