SVN添加Azure Entra ID认证(OpenID/OAuth)及mod_auth_oauth安装问题求助
为Apache托管的SVN添加Azure Entra ID(OpenID Connect)认证
当前现状
现有SVN服务器通过Apache的LDAP认证正常运行,配置文件10-subversion.conf内容如下:
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule mime_module modules/mod_mime.so <Location /svn> DAV svn SVNParentPath /mnt/repositories LogLevel info AuthName "LDAP Authentication" AuthType basic #AuthzLDAPAuthoritative on AuthzSVNAccessFile /etc/httpd/conf/authz_svn_access.authz AuthBasicProvider ldap AuthLDAPBindAuthoritative on AuthLDAPURL "ldap://10.0.0.0:3899/DC=aa,DC=com?sAMAccountName" NONE AuthLDAPBindDN "CN=svn ldap,OU=Service Accounts,DC=ff,DC=com" AuthLDAPBindPassword "pws" Require ldap-group CN=svn users,OU=group,DC=DC,DC=com </Location>
需求是新增Azure Entra ID认证(采用与GitLab一致的OpenID Connect协议),尝试安装mod_auth_oauth时因依赖缺失(如liboauth2)失败,寻求可行方案。
推荐解决方案:使用mod_auth_openidc
mod_auth_openidc是Apache生态中对OpenID Connect支持更完善的模块,依赖易解决,适配Azure Entra ID更顺畅。
1. 安装mod_auth_openidc及依赖
根据操作系统选择对应命令:
- RHEL/CentOS/Rocky Linux:
yum install epel-release -y yum install mod_auth_openidc -y - Ubuntu/Debian:
apt-get update apt-get install libapache2-mod-auth-openidc -y
2. 在Azure Entra ID中注册应用程序
- 登录Azure门户,进入Microsoft Entra ID → 应用注册 → 新注册
- 填写名称,选择账户类型为仅限此组织目录中的账户
- 在重定向URI中添加:
https://<你的SVN域名>/svn/oidc_callback(必须为HTTPS) - 注册完成后,记录客户端ID、租户ID
- 进入证书和密码 → 新客户端密码,生成并记录密钥值
3. 修改Apache SVN配置文件
编辑10-subversion.conf,替换或补充原有认证配置:
# 新增加载mod_auth_openidc模块 LoadModule auth_openidc_module modules/mod_auth_openidc.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule mime_module modules/mod_mime.so <Location /svn> DAV svn SVNParentPath /mnt/repositories LogLevel info # Azure Entra ID OpenID Connect认证配置 AuthName "SVN Authentication (Azure Entra ID)" AuthType openid-connect # 替换为你的租户ID OIDCProviderMetadataURL https://login.microsoftonline.com/<你的租户ID>/v2.0/.well-known/openid-configuration # 替换为你的客户端ID OIDCClientID "<你的客户端ID>" # 替换为你的客户端密钥 OIDCClientSecret "<你的客户端密钥>" OIDCRedirectURI https://<你的SVN域名>/svn/oidc_callback OIDCScope "openid email profile" OIDCResponseType "code" OIDCProviderTokenEndpointAuth "client_secret_post" # 可选:限制访问的用户/组(例如允许特定Azure AD组) # Require claim groups:<目标组的对象ID> # 若无需额外限制,允许所有通过Entra ID认证的用户 Require all granted # 保留原有SVN权限控制文件 AuthzSVNAccessFile /etc/httpd/conf/authz_svn_access.authz </Location>
4. 验证配置并重启Apache
# 检查配置语法 apachectl configtest # 重启服务 systemctl restart httpd
可选:保留LDAP+Azure双认证
若需要同时支持LDAP和Azure Entra ID认证,可通过mod_authn_choice实现(需先安装该模块),配置示例:
<Location /svn> # ... 其他基础配置 ... AuthName "SVN Authentication (LDAP or Azure)" AuthType basic AuthBasicProvider openid-connect ldap AuthOpenIDCBasicAuth "on" # 保留LDAP配置项 AuthLDAPURL "ldap://10.0.0.0:3899/DC=aa,DC=com?sAMAccountName" NONE AuthLDAPBindDN "CN=svn ldap,OU=Service Accounts,DC=ff,DC=com" AuthLDAPBindPassword "pws" # 允许任一认证方式通过 Require ldap-group CN=svn users,OU=group,DC=DC,DC=com Require all granted </Location>
客户端适配说明
- TortoiseSVN 1.14+:支持自动跳转到浏览器完成Azure认证,无需手动输入令牌
- 命令行SVN:可通过
svn --username <Azure邮箱地址>触发浏览器认证,或使用svn auth保存令牌
内容的提问来源于stack exchange,提问作者Alpha Lima
相关产品推荐
相关产品推荐

