集成 Windows 身份验证概述
集成 Windows 身份验证 (IWA) 是一种当 IIS 和用户登录到同一域时自动向 IIS 提供用户身份验证信息的机制。当您使用 ASP.NET C# 创建站点时,您可以获得用户身份验证确定和经过身份验证的用户信息。
这允许用户访问 IIS 托管(或链接)的 Web 应用程序,而无需额外的登录操作,并支持与其他应用程序服务器的 SSO 集成。
*如果您未参与同一域或未经身份验证的用户访问 IIS 页面,则会显示登录拨号盘,如果您未正确进行身份验证,则会出现 HTTP 错误 401.1 – 未经授权。

SSO(单点登录)流程
Chat&Messenger On-Premise 的 Ultimate 计划允许通过集成 Windows 身份验证进行 SSO。 SSO流程如下。
- 客户端首先访问集成Windows认证页面/cam-iissso
- /cam-iissso 页面使用 ASP.NET 来确定它是否经过身份验证并链接到 CAMServer。
- CAMServer 执行 LDAP 搜索以确认其是常规 AD 用户,生成 ssoToken(30 字节或更多字节的唯一随机值)和用于访问 CAMServer 的 URL,并请求重定向。
- 访问 CAMServer 并使用 ssoToken 进行身份验证。如果身份验证成功,将分配用于 API 访问的会话 ID。

实现 SSO 的要求
将 Windows Server 加入域
请将运行 CAMServer/IIS 的 Windows Server 加入到 Active Directory 域。
若要检查现有 Windows Server 所加入的域,请进入“服务器管理器”→单击左侧菜单上的“本地服务器”→单击“计算机名称”并参考域列。
此外,IIS 应该与 CAMServer 位于同一台服务器上并在端口 80 上运行。如果在 CAMServer 前面放置一个 LoadBalancer,则 CAMServer 将在端口 8080 上运行,因此 IIS 也可以使用端口 443。
安装IIS
从服务器角色安装 IIS。
安装IIS时,在角色服务选择选项中勾选以下内容。
- Windows 身份验证
- ISAPI 过滤器
- 单独安装 ISAPI 扩展

ISAPI过滤器:支持IIS中加载扩展模块。需要加载 AspNetCoreModuleV2。
ISAPI 扩展:将 ISAPI 扩展添加到 IIS。 AspNetCoreModuleV2 操作所需。启动 IIS 管理器 (iisreset)
安装 ASP.NET Core 托管捆绑包
ASP.NET Core 托管捆绑包 请安装。
安装后,重新启动 IIS 并确保处理程序映射中存在 AspNetCoreModuleV2。



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


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

设置互联网选项
将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 的计算机帐户上完成。例如,广告
对于使用主机名运行的 IIS,按如下方式注册 SPN:
setspn -S HTTP/sso.example.com ad$
注册后,可以使用以下命令进行检查:
setspn-L ad$
此结果 HTTP/sso.example.com
如果显示,则表示 SPN 注册成功。
HTTP代理连接环境下不可用
请注意,SSO 不能在 HTTP 代理连接环境中使用。
LoadBalancer + SSL 环境中的配置
如果您在 LoadBalancer + SSL 环境中使用 IIS 集成 Windows 身份验证,请参阅以下博客文章。
