在 SharePoint Server 中,声明身份验证不验证用户

 

**上一次修改主题:**2017-09-20

**摘要:**由于 SharePoint Server 2016 和 SharePoint 2013 建议在用户访问 Web 应用程序时使用基于声明的身份验证,因此本文介绍的工具和方法可用于排查基于声明的用户身份验证故障。

当用户尝试连接到 Web 应用程序时,日志将记录失败的身份验证事件。如果您使用 Microsoft 提供的工具并使用一种系统方法来检查失败,则可以了解与基于声明的身份验证相关的常见问题并予以解决。

需要身份验证和授权才能成功访问 SharePoint 资源。当您使用声明时,身份验证将验证安全令牌是否有效。授权将根据安全令牌中的声明集和资源的已配置权限来验证是否允许访问该资源。

若要确定身份验证或授权是否会引发访问问题,请在浏览器窗口中仔细查看错误消息。

  • 如果错误消息指示用户不具有对网站的访问权限,则表示身份验证成功,但授权失败。若要对授权进行故障排除,请尝试以下解决方案:

    • 在使用基于安全声明标记语言 (SAML) 声明的身份验证时发生授权失败的最常见原因是,权限将分配给用户的基于 Windows 的帐户(域\用户)而不是分配给用户的 SAML 标识声明。

    • 确保已将用户或用户所属的组配置为使用适当的权限。有关详细信息,请参阅 SharePoint Server 中的用户权限和权限级别

    • 使用本文中所述的工具和方法来确定用户的安全令牌中的声明集,以便您可以将其与已配置的权限进行比较。

  • 如果消息指示身份验证失败,则表示出现了身份验证问题。如果资源包含在使用基于声明的身份验证的 SharePoint Web 应用程序中,请使用本文中的信息来开始进行故障排除。

故障排除工具

下面是 Microsoft 提供的主要疑难解答工具,用于在 SharePoint Server 中收集声明身份验证的相关信息:

  • 使用统一日志记录系统 (ULS) 日志可获取身份验证事务的详细信息。

  • 使用管理中心可验证 SharePoint Web 应用程序和区域的用户身份验证设置的详细信息并配置 ULS 日志记录的级别。

  • 如果您将 Active Directory Federation Services 2.0 (AD FS) 用作基于安全声明标记语言 (SAML) 的声明身份验证的联合提供程序,则可以使用 AD FS 日志记录来确定 AD FS 向 Web 客户端计算机发出的安全令牌中的声明。

  • 使用网络监视器 3.4 可捕获并检查用户身份验证网络流量的详细信息。

设置 ULS 日志记录的级别以进行用户身份验证

以下过程将 SharePoint Server 配置为,记录声明身份验证的最多尝试次数。

将 SharePoint Server 配置为记录用户身份验证的最多尝试次数的具体步骤

  1. 在管理中心中,在“快速启动”上单击“监控”,然后单击“配置诊断日志记录”。

  2. 在类别列表中,展开“SharePoint Foundation”,然后选择“身份验证授权”和“声明身份验证”。

  3. 在“要报告给事件日志的关键程度最低的事件”中,选择“详细”。

  4. 在“要报告给跟踪日志的关键程度最低的事件”中,选择“详细”。

  5. 单击“确定”。

若要在未执行声明身份验证故障排除的情况下优化性能,可执行以下步骤来将用户身份验证日志记录设置为其默认值。

将 SharePoint Server 配置为记录用户身份验证的默认尝试次数的具体步骤

  1. 在管理中心中,在“快速启动”上单击“监控”,然后单击“配置诊断日志记录”。

  2. 在类别列表中,展开“SharePoint Foundation”,然后选择“身份验证授权”和“声明身份验证”。

  3. 在“要报告给事件日志的关键程度最低的事件”中,选择“信息”。

  4. 在“要报告给跟踪日志的关键程度最低的事件”中,选择“中”。

  5. 单击“确定”。

配置 AD FS 日志记录

即使在启用最高级 ULS 日志记录后,SharePoint Server 也不会记录在安全令牌中收到的一组声明。如果将 AD FS 用于基于 SAML 的声明身份验证,可以启用 AD FS 日志记录,并使用事件查看器来检查 SharePoint Server 发出的安全令牌声明。

启用 AD FS 日志记录的具体步骤

  1. 在 AD FS 服务器上的事件查看器中,单击“视图”,然后单击“显示分析和调试日志”。

  2. 在事件查看器控制台树中,展开“应用程序和服务日志/AD FS 2.0 跟踪”。

  3. 右键单击“调试”,然后单击“启用日志”。

  4. 打开 %ProgramFiles%\Active Directory Federation Services 2.0 文件夹。

  5. 使用记事本打开“Microsoft.IdentityServer.ServiceHost.Exe.Config”文件。

  6. 单击“编辑”,再单击“查找”,键入“<source name=“Microsoft.IdentityModel“ switchValue="Off">”,然后单击“确定”。

  7. 将“switchValue="Off"”更改为“switchValue="Verbose"”。

  8. 单击“文件”,再单击“保存”,然后退出记事本。

  9. 从“服务”管理单元中,右键单击“AD FS 2.0 服务”,然后单击“重新启动”。

您现在可以使用 AD FS 服务器上的事件查看器来检查有关“应用程序和服务日志/AD FS 2.0 跟踪/调试”节点中的声明的详细信息。查找事件 ID 为 1001 的事件。

还可以使用 HttpModule 或 Web 部件或通过 OperationContext 来枚举声明。有关详细信息,请参阅如何在 SharePoint 2010 中进行声明扩充时获取所有用户声明。有关 SharePoint 2010 的此信息还适用于 SharePoint 2013。

声明用户身份验证方法疑难解答

下列步骤可帮助您确定导致声明身份验证尝试失败的原因。

第 1 步:确定失败的身份验证尝试的详细信息

若要获取有关某个失败的身份验证尝试的最可靠的详细信息,您必须在 SharePoint ULS 日志中找到此尝试。这些日志文件存储在 %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\15\LOGS 文件夹中。

您可以通过手动或使用 ULS Log Viewer 在 ULS 日志文件中查找失败的身份验证尝试。

手动查找失败的身份验证尝试的具体步骤

  1. 从用户处获取生成的失败的身份验证尝试的用户帐户名。

  2. 在运行 SharePoint Server 或 SharePoint Foundation 的服务器上,查找“%CommonProgramFiles%\Microsoft Shared\Web Server Extensions\16\LOGS”或“%CommonProgramFiles%\Microsoft Shared\Web Server Extensions\15\LOGS”文件夹。

  3. LOGS 文件夹中,单击“修改日期”以按日期对文件夹进行排序,其中最新的文件夹将位于顶部。

  4. 再次尝试身份验证任务

  5. LOGS 文件夹窗口中,双击列表顶部的日志文件以在记事本中打开该文件。

  6. 在“记事本”中,单击“编辑”,再单击“查找”,键入“身份验证授权”或“声明身份验证”,然后单击“查找下一个”。

  7. 单击“取消”,然后阅读“消息”列的内容。

若要使用 ULS Viewer,请从 ULS Viewer 下载它,并保存到运行 SharePoint Server 或 SharePoint Foundation 的服务器上的文件夹中。安装后,请执行以下步骤,查找失败的身份验证尝试。

使用 ULS Viewer 查找失败的身份验证尝试的具体步骤

  1. 在运行 SharePoint Server 或 SharePoint Foundation 的服务器上,在存储 Ulsviewer 的文件夹中双击它。

  2. 在“ULS Viewer”中,单击“File”,并指向“Open From”,然后单击“ULS”。

  3. 在“设置 ULS 运行时源”对话框中,验证“使用默认日志文件目录中的 ULS 源”中指定的是“%CommonProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\16\LOGS”文件夹,还是“\Common Files\Microsoft Shared\Web Server Extensions\15\LOGS”文件夹。如果未指定,请单击“使用实时源的目录位置”,并在“日志文件位置”中指定“%CommonProgramFiles%\Microsoft Shared\Web Server Extensions\16\LOGS”文件夹或“\Microsoft Shared\Web Server Extensions\15\LOGS”文件夹。

    对于 %CommonProgramFiles%,请将其替换为运行 SharePoint Server 或 SharePoint Foundation 的服务器的 CommonProgramFiles 环境变量中的值。例如,如果位置是驱动器 C,则将 %CommonProgramFiles% 设置为 C:\Program Files\Common Files。

  4. 单击“确定”。

  5. 单击“Edit”,然后,单击“Modify Filter”。

  6. 在“Filter by”对话框的“Field”中,单击“Category”。

  7. 在“Value”中键入“Authentication Authorization”或“Claims Authentication”,然后单击“OK”。

  8. 重复身份验证尝试。

  9. 从“ULS Viewer”窗口中,双击显示的行以查看“Message”部分。

从非 OAuth 请求的“消息”部分的声明编码部分中,可以通过基于声明的字符串(示例:i:0#.w|contoso\chris)确定身份验证方法和已编码的用户标识。有关详细信息,请参阅 SharePoint 2013 和 SharePoint 2010 声明编码

第 2 步:检查配置要求

若要确定如何配置 Web 应用程序或区域以支持一个或多个声明身份验证方法,请使用 SharePoint 管理中心网站。

验证 Web 应用程序或区域的身份验证配置的具体步骤

  1. 从管理中心中,单击“快速启动”上的“应用程序管理”,然后单击“管理 Web 应用程序”。

  2. 单击用户正尝试访问的 Web 应用程序的名称,并在功能区的“安全性”组中,单击“身份验证提供程序”。

  3. 在身份验证提供程序的列表中,单击适当的区域(如“默认”)。

  4. 在“编辑身份验证”对话框的“声明身份验证类型”部分,验证声明身份验证的设置。

    • 对于 Windows 声明身份验证,确认已选择“启用 Windows 验证”和“集成的 Windows 验证”,并确认已根据需要选择“NTLM”或“协商(Kerberos)”。如果需要,可以选择“基本身份验证”。

    • 对于基于窗体的身份验证,确保已选择“启用基于窗体的身份验证(FBA)”。确认“ASP.NET 成员身份提供程序名称”和“ASP.NET 角色管理器名称”中的值。这些值必须与您在 SharePoint 管理中心网站、Web 应用程序和 SharePoint Web Services\SecurityTokenServiceApplication 的 web.config 文件中配置的成员资格提供程序和角色值相匹配。有关详细信息,请参阅在 SharePoint 2013 中为基于声明的 Web 应用程序配置基于表单的身份验证

    • 对于基于 SAML 的声明身份验证,确认已选择“信任的身份提供程序”和正确的受信任提供程序名称。有关详细信息,请参阅在 SharePoint 2013 中使用 AD FS 配置基于 SAML 的声明身份验证

    • 在“登录页 URL”部分,确认登录页的选项。对于默认登录页,应选择“默认登录页”。对于自定义登录页,确认自定义登录页的指定 URL。若要验证该 URL,请将其复制,然后尝试使用 Web 浏览器对其进行访问。

  5. 单击“保存”保存对身份验证设置所做的更改。

  6. 重复身份验证尝试。对于基于窗体的或基于 SAML 的身份验证,预计的登录页在显示时是否会包含适当的登录选项?

  7. 如果身份验证仍失败,请查看 ULS 日志以确定在身份验证配置更改之后和之后进行的身份验证尝试之间是否存在任何差异。

第 3 步:要检查的其他项

在您查看日志文件和 Web 应用程序配置后,请确认:

  • Web 客户端计算机上的 Web 浏览器支持声明。有关详细信息,请参阅规划 SharePoint Server 2016 中的浏览器支持

  • 对于 Windows 声明身份验证,请确认:

    • 用户从其中发出身份验证尝试的计算机是承载 SharePoint Web 应用程序的服务器所在的域的成员或受宿主服务器信任的域的成员。

    • 用户从其中发出身份验证尝试的计算机已登录到其 Active Directory 域服务 (AD DS) 域。在命令提示符处或在 Web 客户端计算机上的 SharePoint 命令行管理程序 中键入 nltest /dsgetdc: /force 以确保其可以访问域控制器。如果未列出域控制器,请解决 Web 客户端计算机和 AD DS 域控制器之间缺少可发现性和连接的问题。

    • 运行 SharePoint Server 或 SharePoint Foundation 的服务器是否已登录 AD DS 域。在命令提示符处或在运行 SharePoint Server 或 SharePoint Foundation 的服务器上的 SharePoint 命令行管理程序 中键入 nltest /dsgetdc: /force,以确保它可以访问域控制器。如果未列出域控制器,请排查运行 SharePoint Server 或 SharePoint Foundation 的服务器和 AD DS 域控制器之间缺少可发现性和连接性的问题。

  • 对于基于窗体的身份验证,请确认:

    • 配置的 ASP.NET 成员身份和角色提供程序的用户凭据是正确的。

    • 网络上已提供承载 ASP.NET 成员身份和角色提供程序的系统。

    • 自定义登录页正确收集和传达了用户凭据。若要测试这一点,请将 Web 应用程序配置为临时使用默认登录页并确保其正常运行。

  • 对于基于 SAML 的声明身份验证,请确认:

    • 配置的身份提供程序的用户凭据是正确的。

    • 网络上已提供用作联合提供程序(如 AD FS)和身份提供程序(如 AD DS 或第三方身份提供程序)的系统。

    • 自定义登录页正确收集和传达了用户凭据。若要测试这一点,请将 Web 应用程序配置为临时使用默认登录页并确保其正常运行。

第 4 步:使用 Web 调试工具监视和分析 Web 流量

使用工具(如 HttpWatchFiddler)分析以下类型的 HTTP 流量:

  • Web 客户端计算机和运行 SharePoint Server 或 SharePoint Foundation 的服务器之间的流量

    例如,您可以监视运行 SharePoint Server 或 SharePoint Foundation 的服务器发送的 HTTP 重定向消息以将联合服务器(如 AD FS)的位置告知 Web 客户端计算机。

  • Web 客户端计算机和联合服务器(如 AD FS)之间的流量

    例如,您可以监视 Web 客户端计算机发送的 HTTP 消息以及联合服务器的响应,其中包括安全令牌及其声明。

备注

如果使用 Fiddler,则身份验证尝试将在要求三次身份验证提示后失败。若要阻止此行为,请参阅将 Fiddler 与 SAML 和 SharePoint 结合使用以通过三次身份验证提示

第 5 步:捕获和分析身份验证网络流量

使用网络流量工具(如网络监视器 3.4)可捕获和分析 Web 客户端计算机、运行 SharePoint Server 或 SharePoint Foundation 的服务器以及 SharePoint Server 或 SharePoint Foundation 进行声明身份验证所依赖的系统之间的流量。

备注

在许多情况下,声明身份验证使用基于安全超文本传输协议 (HTTPS) 的连接,这将对计算机之间发送的消息进行加密。在不借助加载项或扩展的情况下,无法使用网络流量工具查看已加密的消息的内容。例如,对于网络监视器,必须安装和配置 Network Monitor Decryption Expert。作为尝试解密 HTTPS 消息的更简单的替代方式,可使用承载 SharePoint Server 或 SharePoint Foundation 的服务器上的工具(如 Fiddler),这将报告未加密的 HTTP 消息。

分析网络流量可获知:

  • 在声明身份验证过程中涉及的计算机之间发送的协议和消息的准确集合。答复消息可以包含错误条件信息,您可以根据此信息确定其他故障排除步骤。

  • 请求消息是否获得相应答复。如果多个已发送请求消息未收到答复,则表示网络流量未达到其预定目标。在此情况下,请检查数据包路由问题,路径中的数据包筛选设备(如防火墙)或目标上的数据包筛选(如本地防火墙)。

  • 是否尝试了多种声明方法以及哪些方法失败。

对于 Windows 声明身份验证,您可以捕获和分析下列计算机之间的流量:

  • Web 客户端计算机和运行 SharePoint Server 或 SharePoint Foundation 的服务器

  • 运行 SharePoint Server 或 SharePoint Foundation 的服务器和其域控制器

对于基于窗体的身份验证,您可以捕获和分析下列计算机之间的流量:

  • Web 客户端计算机和运行 SharePoint Server 或 SharePoint Foundation 的服务器

  • 运行 SharePoint Server 或 SharePoint Foundation 的服务器和 ASP.NET 成员身份和角色提供程序

对于基于 SAML 的声明身份验证,您可以捕获和分析下列计算机之间的流量:

  • Web 客户端计算机和运行 SharePoint Server 或 SharePoint Foundation 的服务器

  • Web 客户端计算机和其身份提供程序(如 AD DS 域控制器)

  • Web 客户端计算机和联合提供程序(如 AD FS)

See also

在 SharePoint 2013 中为基于声明的 Web 应用程序配置基于表单的身份验证
在 SharePoint 2013 中使用 AD FS 配置基于 SAML 的声明身份验证