HttpWebRequest.UnsafeAuthenticatedConnectionSharing 属性

定义

获取或设置一个值,该值指示是否允许高速 NTLM 身份验证的连接共享。

public bool UnsafeAuthenticatedConnectionSharing { get; set; }

属性值

true 使经过身份验证的连接保持打开状态;否则,false

注解

注意

WebRequestHttpWebRequestServicePointWebClient 已过时,不应将其用于新开发。 请改用 HttpClient

此属性的默认值为 false,这会导致在请求完成后关闭当前连接。 应用程序每次发出新请求时都必须通过身份验证序列。

如果此属性设置为 true,则用于检索响应的连接在执行身份验证后保持打开状态。 在这种情况下,将此属性设置为 true 的其他请求可能会使用连接而不重新进行身份验证。 换句话说,如果某个连接已经过用户 A 身份验证,则用户 B 可以重复使用 A 的连接;用户 B 的请求是根据用户 A 的凭据完成的。

注意

由于应用程序可以在未经身份验证的情况下使用连接,因此需要在将此属性设置为 true时确保系统中没有管理漏洞。 如果应用程序发送对多个用户的请求(模拟多个用户帐户),并依赖于身份验证来保护资源,请不要将此属性设置为 true,除非使用连接组,如下所示。

如果遇到性能问题,并且应用程序在具有集成 Windows 身份验证的 Web 服务器上运行,则可能需要考虑启用此机制。

启用此设置会打开系统,使其面临安全风险。 如果将 UnsafeAuthenticatedConnectionSharing 属性设置为 true 请务必采取以下预防措施:

  • 使用 ConnectionGroupName 属性管理不同用户的连接。 这样就避免了未经身份验证的应用程序可能使用该连接。 例如,用户 A 应具有不同于用户 B 的唯一连接组名称。这为每个用户帐户提供隔离层。

  • 在受保护的环境中运行应用程序,以帮助避免可能的连接攻击。

如果控制后端服务器,作为替代方法,可以考虑关闭身份验证持久性。 这提高了性能,但性能越低,但更安全。 有关详细信息,请参阅 AuthPersistence

备注

如果 PreAuthenticateUnsafeAuthenticatedConnectionSharing 都设置为 true,则会使用来自不安全池的连接发送每个请求,但具有授权标头。

适用于

产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1