跳转到内容

Windows 托管应用认证:IIS、AD、JWT 与 OIDC

核验于 1 分钟阅读

在 Windows/AD 认证、Basic、JWT、OIDC 之间有意选择,避开双跳陷阱,并区分 401 与 403。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
概念
需求 选择
域内 Windows 用户 Windows 认证(Negotiate/Kerberos)
遗留应用、无 SSO Basic 仅 TLS,绝不公网
SPA/API OIDC 授权码 + PKCE,JWT access token
服务间 client credentials/mTLS,不是共享密码
公网消费者 OIDC/IdP + MFA;不要自建密码库

认证回答“是谁”;授权回答“能做什么”。401 是未认证;403 是已认证但无权。

只开需要的 provider:

终端窗口
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WindowsAuthentication -All

IIS:关匿名,开 Windows 认证;选 Negotiate/Kerberos(必要时 NTLM 回退)。Kerberos 要:

  • 服务账户/主机注册 SPN;
  • DNS 名匹配 SPN;
  • 只有双跳才配委派。

双跳(IIS → SQL/文件共享以用户身份)没有约束委派会失败。优先用服务身份访问后端,而不是到处模拟用户。

Basic 发 Base64 凭据;无 TLS 就是明文。只给内网遗留设备、HTTPS、限定账户。绝不公网。

  • 验签、issuer、audience、expiry、clock skew。
  • 不信任 alg: none,不因为能 decode 就信任。
  • access token 短;refresh token 小心。
  • 浏览器 token 尽量 HttpOnly/Secure/SameSite cookie;长期 token 别放 localStorage。
  • 授权检查在服务端;隐藏按钮不是授权。
  • 边缘/IdP 认证,再把签名身份(header/JWT)传给应用。
  • 代理剥掉客户端自带的身份头;只有代理能设。
  • 不要让应用信任公网来的 X-User。
终端窗口
curl.exe -I https://app.example/
curl.exe -I -u user:pass https://app.example/private

看 challenge、cookie 标志(Secure、HttpOnly、SameSite)、token 过期;低权限用户应得 403,不是数据。

E1。实验室 WAC 用本地管理员;没有为 Web 应用配 AD/Kerberos/OIDC。决策表是 Server 2025 上待验证设计。

来源