如何配置Apache2的mod_auth_openidc与Keycloak实现静态目录授权访问?
用Apache2 + mod_auth_openidc + Keycloak实现静态目录授权访问配置
最近我搭建了一套简易的授权访问系统,用Apache2搭配mod_auth_openidc模块,以Keycloak作为OpenID Connect身份认证服务器,来保护静态目录的访问权限。查了不少文档和文章后,整理出一套可用的配置方案,分享给大家:
1. HTTP强制跳转HTTPS配置
首先要保证所有请求都走HTTPS(OIDC认证需要加密传输),所以先配置80端口的重定向:
<VirtualHost *:80> DocumentRoot /var/www/html RewriteEngine On # 把所有HTTP请求强制重定向到HTTPS RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 也可以用Redirect指令替代上面的Rewrite规则(二选一即可) # Redirect permanent / https://%{HTTP_HOST}/ </VirtualHost>
2. HTTPS站点核心配置(含OIDC认证)
接下来是443端口的核心配置,这里要整合mod_auth_openidc和Keycloak的对接参数:
<VirtualHost *:443> DocumentRoot /var/www/html ServerName your-domain.com # 替换成你的实际域名 # HTTPS证书配置(提前申请好SSL证书) SSLEngine on SSLCertificateFile /path/to/your/cert.pem SSLCertificateKeyFile /path/to/your/private-key.pem # mod_auth_openidc与Keycloak的对接配置 OIDCProviderMetadataURL https://your-keycloak-domain/auth/realms/your-realm/.well-known/openid-configuration OIDCClientID your-client-id # Keycloak中创建的客户端ID OIDCClientSecret your-client-secret # Keycloak客户端的密钥 OIDCRedirectURI https://your-domain.com/callback # 回调地址,需和Keycloak客户端配置一致 OIDCScope "openid email profile" # 会话超时配置 OIDCSessionInactivityTimeout 3600 # 无活动1小时后超时 OIDCSessionMaxDuration 86400 # 会话最长有效期24小时 # 保护整个静态目录:所有访问都需经过Keycloak认证 <Location "/"> AuthType openid-connect Require valid-user </Location> # 可选配置:设置无需认证的公开目录 # <Location "/public"> # Require all granted # </Location> </VirtualHost>
关键参数说明
OIDCProviderMetadataURL:Keycloak自动生成的元数据地址,替换成你的Keycloak域名和对应的Realm名称即可,它会自动加载Keycloak的认证端点、密钥等信息OIDCClientID&OIDCClientSecret:在Keycloak后台创建客户端时生成的凭证,要确保客户端的Access Type设置为confidential(因为是Web应用场景)OIDCRedirectURI:必须和Keycloak客户端配置中的Valid Redirect URIs完全一致,这个路径是mod_auth_openidc处理认证回调的地址<Location "/">块:指定需要保护的路径,这里配置的是根目录,意味着所有访问静态内容的请求都需要先通过Keycloak登录认证,只有合法用户才能访问
3. 部署前的准备工作
- 安装必要组件:在Debian/Ubuntu系统下,用命令安装依赖:
sudo apt install apache2 libapache2-mod-auth-openidc sudo a2enmod ssl rewrite auth_openidc - Keycloak端配置:
- 创建一个Realm(或使用默认Realm)
- 在Realm中创建OpenID Connect类型的客户端,Access Type设为
confidential - 在客户端的Valid Redirect URIs中填入上面的回调地址(比如
https://your-domain.com/callback) - 确保客户端启用了Authorization Code Flow(默认一般是开启的)
- 测试配置:修改完Apache配置后,重启服务生效:
访问你的域名,应该会自动跳转到Keycloak的登录页面,登录成功后就能访问静态目录了sudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者Sumit Ghosh
相关产品推荐
相关产品推荐

