
集成 Windows 身份验证概述
集成 Windows 身份验证 (IWA) 是一种机制,当 IIS 和用户都登录到同一域时,它会自动向 IIS 提供用户身份验证信息。使用 ASP.NET 的 C# 创建站点时,您可以确定用户是否已通过身份验证,并检索有关已通过身份验证用户的信息。
这样,用户无需额外的登录步骤即可访问托管在 IIS 上(或与 IIS 集成)的 Web 应用程序,并可与其他应用程序服务器实现 SSO 集成。
*如果用户未加入同一域或未通过身份验证,则 IIS 页面将显示登录拨号,如果身份验证未正确执行,则会发生 HTTP 错误 401.1 – 未授权。

单点登录 (SSO) 流程
Chat&Messenger 本地部署的 Ultimate 方案通过集成的 Windows 身份验证支持单点登录 (SSO)。SSO 流程如下:
- 客户端首先访问集成的 Windows 身份验证页面 /cam-iissso。
- /cam-iissso 页面使用 ASP.NET 来确定用户是否已通过身份验证,然后连接到 CAMServer。
- CAMServer 执行 LDAP 搜索以验证用户是否为合法的 AD 用户,生成用于访问 CAMServer 的 URL 以及 ssoToken(30 字节或更长的唯一随机值),然后请求重定向。
- 访问 CAMServer 并使用 ssoToken 进行身份验证。身份验证成功后,系统将分配一个用于 API 访问的会话 ID。

实施单点登录的要求
将 Windows Server 加入域
请将运行 CAMServer/IIS 的 Windows 服务器加入 Active Directory 域。
要查看现有 Windows Server 加入到哪些域,请转到“服务器管理器”,单击左侧菜单中的“本地服务器”,单击“计算机名称”,然后参考域字段。
此外,IIS 应该与 CAMServer 位于同一台服务器上,并在 80 端口上运行。如果在 CAMServer 前面放置一个负载均衡器,CAMServer 将在 8080 端口上运行,因此 IIS 也可以使用 443 端口。
IIS安装
从服务器角色安装 IIS。安装 IIS 时,请在角色服务选择选项中选中以下选项。
- Windows 身份验证
- ISAPI 过滤器
- ISAPI 扩展

安装 ASP.NET Core Hosting Bundle。
ASP.NET Core 托管包 请安装该软件。安装完成后,重启 IIS 并验证 AspNetCoreModuleV2 是否存在于处理程序映射中。



添加应用程序(cam-iissso)
请将 cam-iissso 应用程序添加到您的默认网站。
- 别名:cam-iissso
- 物理路径: \sys\cam-iissso-net8.0
此外,授予 IIS_IUSRS 组对 cam-iissso-net8.0 文件夹的只读访问权限(读取和执行、列出文件夹内容、读取)。


启用 Windows 身份验证
右键单击“Windows 身份验证”,然后选择“启用”。

Internet 选项设置
将 IIS 提供的站点添加到内网区域。
选择“Internet 选项”,单击“安全”选项卡,然后选择“本地 Intranet”。单击“站点”按钮,选择“高级”,然后添加站点 URL。
验证自动登录功能。
点击“自定义级别”,然后在“用户身份验证”→“登录”下,确保已选择“在内网区域自动登录”。


LDAP 设置
如果您想使用 IIS 实现单点登录,LDAP 设置(需要 LDAPUrl、LDAPBaseDN 和执行代理身份验证的 AD 用户。)

使用 FQDN(完全限定域名)进行访问和 SPN 注册。
使用主机名(NetBIOS 名称)访问 IIS Windows 集成身份验证页面不需要注册,但使用 FQDN(完全限定域名,例如 sso.example.com)访问时需要 SPN 注册。
服务主体名称 (SPN) 是 Kerberos 身份验证中用于唯一标识 Active Directory 上特定服务的名称。当使用完全限定域名 (FQDN) 访问服务时,注册 SPN 可使客户端正确请求其正在访问的服务的 Kerberos 票证。
例如 https://sso.example.com 访问服务时,客户端(浏览器)会向 Active Directory 请求票证,声明“我想连接到名为 HTTP/sso.example.com 的服务”。Active Directory 会检查 SPN 关联的帐户,并颁发相应的服务票证。如果 SPN 注册不正确,Kerberos 身份验证将失败,并显示身份验证对话框。
SPN 注册是针对托管 IIS 的计算机帐户执行的。例如:广告 对于运行在主机名 [hostname] 下的 IIS,请按如下方式注册 SPN:
setspn -S HTTP/sso.example.com ad$
注册后,您可以使用以下命令进行检查:
setspn -L ad$
这一结果 HTTP/sso.example.com 如果显示此信息,则表示您的 SPN 注册成功。
在HTTP代理连接环境下不可用。
请注意,HTTP代理连接环境下不支持SSO。
负载均衡器 + SSL 环境配置
如果您在负载均衡器 + SSL 环境中使用 IIS 集成 Windows 身份验证,请参阅以下博客文章。


