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

如何为内部静态网站添加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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:07:34