Authelia 接入 FreeIPA认证后端配置、过滤器默认值与源码级实现解析【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/autheliaAuthelia 官方内置了对 FreeIPAIdentity Management 身份管理系统基于 389 Directory Server 与 Kerberos的一等支持只需将authentication_backend.ldap.implementation设置为freeipa即可自动获得针对 FreeIPA 的属性映射与账户状态过滤器默认值。本文以官方集成文档 FreeIPA 集成指南 为主线结合仓库内配置模板、Schema 源码与 LDAP 集成文档完整讲解配置步骤、服务账号权限要求、属性/过滤器默认值及其底层实现帮助你在生产环境中快速、正确地完成 FreeIPA 与 Authelia 的对接。前提假设与场景适配官方指南明确说明FreeIPA 是 Authelia 官方支持的 LDAP 实现之一见 LDAP 集成指南 中的实现列表但任何 LDAP 集成都不可能覆盖所有部署方式文档展示的只是建议配置。开始前需要确认以下前提FreeIPA 目录服务已完整部署并且 Authelia 能够通过网络访问到它所有服务均属于example.com域示例中的域名、DN 与地址都需要替换为你自己的实际值仅当你在本地测试且愿意沿用该域时除外。重要提醒本指南使用 FreeIPA 实现的默认配置请务必阅读下文 内置默认值 一节并按需调整。快速配置最小可用的 FreeIPA 认证后端Authelia 侧配置在 Authelia 的configuration.yml中配置authentication_backend.ldap段即可。由于implementation: freeipa会自动注入该实现的全部属性映射与过滤器默认值因此最小配置只需要四个键authentication_backend: ldap: implementation: freeipa address: ldaps://ldap.example.com base_dn: DCexample,DCcom user: UIDauthelia,OUpeople,DCexample,DCcom password: insecure_secret各键含义如下implementation: freeipa声明使用 FreeIPA 实现。合法取值还包括custom、activedirectory、rfc2307bis、lldap、glauth校验逻辑见 configuration/schema/authentication.go 与常量定义 configuration/schema/const.goaddressLDAP 服务地址使用[scheme://]hostname[:port]形式允许ldap、ldaps、ldapi三种 scheme。示例使用ldaps即 LDAP over TLS默认端口 636生产环境推荐这种方式base_dn所有 LDAP 查询的基准 DN示例为DCexample,DCcom。你也可以进一步缩小范围例如只搜索某个 OU参考 LDAP 配置参考user与password用于绑定bind的服务账号DN 及其密码Authelia 会用它执行用户查找与密码修改操作。注意 FreeIPA 的默认用户容器是OUpeople因此服务账号 DN 形如UIDauthelia,OUpeople,DCexample,DCcom。其余可选配置timeout、tls、start_tls、pooling、users_filter、groups_filter、attributes等在implementation: freeipa下均有默认值详见 LDAP 配置参考 与下文 内置默认值。Application 侧创建服务账号在 FreeIPA 中创建服务用户注意以下几点密码必须足够复杂复杂密码并在 Authelia 配置中使用该用户的DNDistinguished Name作为user值该账号需要具备以下最小权限读取能够读取允许使用 Authelia 的用户与组的属性修改密码仅当你需要启用 Authelia 的密码重置/修改功能时需要授予该账号修改用户密码的权限。权限的具体授予方式如通过 FreeIPA 的权限/角色Permission/Role机制配置请参考 FreeIPA 官方文档。绑定方式的选型说明未认证绑定、终端用户绑定、服务账号绑定三者的安全性差异可参阅 LDAP 集成指南 - BindingAuthelia 主要支持的是服务账号绑定。内置默认值Attribute 与 Filter这是 FreeIPA 实现与custom实现最大的区别implementation: freeipa会在运行时自动填充一整套针对 FreeIPA 目录结构的属性映射与过滤器。下面两小节分别给出官方文档记录的默认值。属性映射默认值FreeIPA 实现的属性默认值如下表即username_attribute对应 Username 列以此类推UsernameDisplay NameMailGroup NameDistinguished NameMember OfuiddisplayNamemailcnN/AmemberOf说明Username用户名映射到 FreeIPA 的uid属性这与 RFC2307 推荐的uid作为唯一标识的实践一致参考 LDAP 配置参考 - Important notes其中强调用户必须由单一、唯一值的属性唯一标识Display Name显示名映射到displayName用于登录后在 Authelia Web UI 上展示Mail邮箱映射到mail设备注册与密码重置流程的邮件身份验证依赖该属性Group Name组名映射到cnDistinguished NameDN 属性标记为 N/A表示 FreeIPA 目录没有可搜索的 DN 属性Member Of成员组映射到memberOf该属性仅在memberof组搜索模式下使用。除文档表格外从源码默认结构见下文还可以确认FreeIPA 实现同时把family_name映射到sn、given_name映射到givenName用于填充用户的姓与名。过滤器默认值过滤器是 LDAP 配置中最关键的部分其作用是排除不应当被允许登录的账户。FreeIPA 实现默认排除以下三类账户被禁用或锁定的账户(!(nsAccountLockTRUE))密码已过期的账户基于 Kerberos 密码过期时间(krbPasswordExpiration{date-time:generalized})账户本身已过期的账户krbPrincipalExpiration为空视为不过期否则要求其大于当前时间(|(!(krbPrincipalExpiration*))(krbPrincipalExpiration{date-time:generalized}))用户过滤器Users Filter((|({username_attribute}{input})({mail_attribute}{input}))(objectClassperson)(!(nsAccountLockTRUE))(krbPasswordExpiration{date-time:generalized})(|(!(krbPrincipalExpiration*))(krbPrincipalExpiration{date-time:generalized})))逐段拆解这条过滤器(|({username_attribute}{input})({mail_attribute}{input}))允许用户用uid或mail作为登录标识{input}是用户在登录表单中输入的值(objectClassperson)限定 FreeIPA 的用户对象类后三段即上文列出的禁用/锁定、密码过期、账户过期排除条件。组过滤器Groups Filter((member{dn})(objectClassgroupOfNames)){dn}会被替换为经用户查找得到的用户的 DNobjectClassgroupOfNames限定 FreeIPA 的组对象类该过滤器用于在filter组搜索模式下确定用户所属的组。过滤器占位符说明上述过滤器中的占位符会在启动阶段或每次搜索时被替换替换机制详见 LDAP 集成指南 - Filter replacements占位符替换阶段替换内容{username_attribute}启动配置的用户名属性默认uid{mail_attribute}启动配置的邮箱属性默认mail{input}搜索用户在登录表单输入的值{dn}搜索用户查找得到的 DN{date-time:generalized}搜索当前 UTC 时间格式为 LDAP generalized time如20060102150405.0Z启动阶段即替换的占位符只处理一次搜索阶段的占位符才在每次查询时替换这是为了优化查询性能。源码级佐证默认配置的落地实现FreeIPA 的默认配置并非写死在代码分支里而是以结构化默认值对象的形式定义在internal/configuration/schema/authentication.go的DefaultLDAPAuthenticationBackendConfigurationImplementationFreeIPA中schema/authentication.govar DefaultLDAPAuthenticationBackendConfigurationImplementationFreeIPA AuthenticationBackendLDAP{ UsersFilter: ((|({username_attribute}{input})({mail_attribute}{input}))(objectClassperson)(!(nsAccountLockTRUE))(krbPasswordExpiration{date-time:generalized})(|(!(krbPrincipalExpiration*))(krbPrincipalExpiration{date-time:generalized}))), GroupsFilter: ((member{dn})(objectClassgroupOfNames)), GroupSearchMode: ldapGroupSearchModeFilter, Attributes: AuthenticationBackendLDAPAttributes{ Username: ldapAttrUserID, // uid DisplayName: ldapAttrDisplayName, // displayName FamilyName: ldapAttrSurname, // sn GivenName: ldapAttrGivenName, // givenName Mail: ldapAttrMail, // mail MemberOf: ldapAttrMemberOf, // memberOf GroupName: ldapAttrCommonName, // cn }, Timeout: time.Second * 5, TLS: TLS{ MinimumVersion: TLSVersion{tls.VersionTLS12}, }, }从这段代码可以确认几个关键实现事实文档中的用户/组过滤器字符串与源码默认值逐字一致即只要设置implementation: freeipa就无需再手动书写users_filter与groups_filter这也解释了 LDAP 配置参考 中该选项技术上必填、但 implementation 可隐式设置默认值从而免除该要求的表述组搜索模式group_search_mode默认为filter即直接通过组过滤器查询确定用户组memberof模式为实验性功能一般不建议使用两种模式的差异见 LDAP 集成指南 - Group Search Modes默认timeout为 5 秒默认 TLS 最低版本为 TLS1.2属性映射使用包内常量如ldapAttrUserID、ldapAttrCommonName保证属性名拼写一致性。此外internal/configuration/config.template.ymlconfig.template.yml也在注释中列出了implementation的合法取值其中freeipa - for FreeIPA与文档一致配置校验器则保证该字段只能取枚举值之一非法值会直接报错见 validator/authentication_test.go 中的错误信息用例。进阶调优建议在最小配置跑通之后可按需调整以下选项全部字段说明见 LDAP 配置参考TLS 与连接安全示例使用ldaps://若使用ldap://并配合start_tls: true初始连接为明文安全性略低于 LDAPS。生产环境建议保持 LDAPS并用tls.server_name/certificates_directory完成证书校验避免使用skip_verify连接池pooling高并发场景可启用poolingenable: true、count、retries、timeout减少反复建连开销刷新间隔refresh_interval参考 LDAP 配置参考 - Refresh Interval建议保持默认值或配置一个足够低的间隔以便及时同步用户的组归属与账户状态删除、禁用等变化组搜索范围如需把base_dn精确到某个 OU可用additional_users_dn/additional_groups_dn分别限制用户与组的搜索子树额外属性extra可自定义从目录加载额外属性支持string/integer/boolean类型与多值标记供 OpenID Connect 1.0 等模块使用。常见要点与排查提示用户必须由单一且唯一的属性标识FreeIPA 下即uid。若目录中存在重复的uidAuthelia 会直接拒绝该用户认证并在日志中报错密码重置流程要求服务账号具备修改用户密码的权限同时用户必须配置了mail属性否则无法完成密码重置/二要素设备注册所需的身份验证如果 FreeIPA 与 Authelia 之间存在多层代理或只读副本可参考permit_referrals选项决定是否跟随 referral若手动覆盖users_filter/groups_filter务必保留{username_attribute}、{input}、{dn}等占位符否则过滤条件将无法正确替换导致认证或组解析失败。See AlsoFreeIPA 集成指南本文档LDAP 集成指南实现列表、绑定方式、组搜索模式、过滤器占位符LDAP 配置参考全部配置项说明LDAP 认证后端默认配置源码FreeIPA 实现配置模板中的 implementation 选项注释【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考