You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中注册应用程序

  1. 登录Azure门户,进入Microsoft Entra ID → 应用注册 → 新注册
  2. 填写名称,选择账户类型为仅限此组织目录中的账户
  3. 在重定向URI中添加:https://<你的SVN域名>/svn/oidc_callback(必须为HTTPS)
  4. 注册完成后,记录客户端ID、租户ID
  5. 进入证书和密码 → 新客户端密码,生成并记录密钥值

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:19:56