如何为内部静态网站添加Entra ID身份验证?
实现静态站Entra ID身份验证的简单可维护方案
根据你的需求,推荐两种落地性强、易维护的方案,分别适配不同部署场景:
方案一:容器化部署OAuth2-Proxy(适配本地+云端迁移)
你提到OAuth2-Proxy功能满足需求,但希望更易更新的打包方式——容器化部署完美解决这个问题,更新仅需拉取新镜像重启,且适配未来云端容器服务(如AKS、ECS)。
步骤1:Entra ID应用准备
- 在Entra ID门户创建应用注册,记录
客户端ID和客户端密码 - 设置重定向URI为
http://你的域名/oauth2/callback(云端部署建议用HTTPS) - 进入「令牌配置」,启用
groupMembershipClaims(选SecurityGroup或All),确保能获取用户组信息 - 配置API权限:添加
Microsoft Graph > User.Read(委托权限)并授权
步骤2:容器化部署配置
用Docker Compose快速编排,将静态站与OAuth2-Proxy联动:
version: '3.8' services: oauth2-proxy: image: quay.io/oauth2-proxy/oauth2-proxy:latest ports: - "4180:4180" environment: OAUTH2_PROXY_PROVIDER: azure OAUTH2_PROXY_CLIENT_ID: "你的Entra客户端ID" OAUTH2_PROXY_CLIENT_SECRET: "你的Entra客户端密码" OAUTH2_PROXY_REDIRECT_URL: "http://你的域名/oauth2/callback" OAUTH2_PROXY_COOKIE_SECRET: "$(openssl rand -hex 16)" # 生成随机密钥 OAUTH2_PROXY_ALLOWED_GROUPS: "允许访问的组对象ID" # 可填多个,用逗号分隔 OAUTH2_PROXY_UPSTREAMS: "http://static-site:80" # 指向静态站容器 OAUTH2_PROXY_HTTP_ADDRESS: "0.0.0.0:4180" OAUTH2_PROXY_COOKIE_SECURE: "false" # 本地HTTP部署设为false,云端HTTPS设为true static-site: image: nginx:alpine volumes: - ./你的静态文件目录:/usr/share/nginx/html expose: - 80
更新方式
只需执行以下命令即可完成OAuth2-Proxy版本升级:
docker-compose pull oauth2-proxy && docker-compose up -d
方案二:简化版Apache + mod_auth_openidc(纯本地部署)
针对纯本地部署场景,简化mod_auth_openidc的配置,跳过复杂文档,直接聚焦Entra ID适配:
步骤1:安装依赖
Ubuntu/Debian系统:
apt update && apt install -y apache2 libapache2-mod-auth-openidc a2enmod auth_openidc ssl
步骤2:Entra ID应用准备
与方案一一致,注意重定向URI设为https://你的域名/callback(Apache建议用HTTPS,本地可自签证书)
步骤3:Apache虚拟主机配置
<VirtualHost *:443> ServerName 你的域名 DocumentRoot /var/www/你的静态站目录 # Entra ID OIDC配置 OIDCProviderMetadataURL https://login.microsoftonline.com/你的租户ID/v2.0/.well-known/openid-configuration OIDCClientID 你的Entra客户端ID OIDCClientSecret 你的Entra客户端密码 OIDCRedirectURI https://你的域名/callback OIDCScope "openid email profile" OIDCResponseType "code" OIDCCookieSecret "$(openssl rand -hex 16)" # 生成随机密钥 # 组权限控制 OIDCGroupClaim groups Require group 允许访问的组对象ID # 保护整个站点 <Location /> AuthType openid-connect Require valid-user </Location> # SSL配置(本地用自签证书,云端建议用Let's Encrypt) SSLEngine on SSLCertificateFile /path/to/你的证书.pem SSLCertificateKeyFile /path/to/你的密钥.key </VirtualHost>
验证与启动
apache2ctl configtest systemctl restart apache2
关键注意事项
- 组对象ID需在Entra ID门户的目标组详情页获取,不要用组名(避免重名问题)
- 会话维持:两种方案均通过Cookie维持登录会话,默认有效期可通过配置调整(如OAuth2-Proxy的
OAUTH2_PROXY_COOKIE_EXPIRE) - 本地部署HTTPS:推荐用
mkcert生成本地可信证书,避免浏览器安全警告
内容的提问来源于stack exchange,提问作者hey
相关产品推荐
相关产品推荐

