8.11配置 Kerberos 和 Active Directory 身份认证

创建于 2026 年 8 月 17 日约 2 分钟读完

Kerberos 是一种网络认证协议,它利用对称密钥加密技术来验证用户和服务的身份。通过使用票证(tickets)机制,Kerberos 能够确保在网络上的通信是安全的,并且可以有效地防止窃听、重放攻击等安全威胁。自 Windows 2000 开始,Kerberos 成为了域环境下的默认认证协议。

Active Directory (AD) 是微软提供的一系列目录管理服务,用于 Windows 域网络的管理和安全设置。它允许 IT 管理员管理网络中的用户、设备和其他资源,并提供了诸如身份认证、授权等功能。AD 支持多种认证协议,包括 NTLMNT LAN Manager),但更推荐使用 Kerberos 因为其更高的安全性。


如果您的应用程序运行在域环境中,并且目标服务支持 Windows 身份认证(如 NegotiateNTLM),可以直接使用 Windows 身份认证的配置方法。以下是具体配置示例:

1. 使用当前域用户的凭据(推荐)

此方式适用于应用程序与目标服务在同一个域环境中运行的情况。系统会自动使用当前域用户的凭据进行身份认证。

cs
// 配置默认客户端services.AddHttpClient(string.Empty)    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler    // 或使用 SocketsHttpHandler    {        UseDefaultCredentials = true    });// 配置特定客户端services.AddHttpClient("furion")    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler    // 或使用 SocketsHttpHandler    {        UseDefaultCredentials = true    });

2. 跨域环境的 Kerberos 身份认证

如果应用程序与目标服务不在同一个域环境中,可以通过安装 Microsoft.Identity.Client 库来实现跨域身份认证。该库提供了对 Kerberos 和其他身份认证协议的支持。

安装 NuGet 包

bash
dotnet add package Microsoft.Identity.Client

使用 Microsoft.Identity.Client 实现身份认证

以下是一个简单的示例,展示如何使用 Microsoft.Identity.Client 获取访问令牌并进行身份认证:

cs
using Microsoft.Identity.Client;// 配置身份认证参数var clientId = "你的客户端ID";var tenantId = "你的租户ID";var authority = $"https://login.microsoftonline.com/{tenantId}";var app = PublicClientApplicationBuilder.Create(clientId)    .WithAuthority(authority)    .Build();// 获取访问令牌var scopes = new[] { "api://目标服务的作用域" };var result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();// 使用访问令牌调用目标服务httpRemoteService.SendAsync(HttpRequestBuilder.Post("https://furion.net/")    .AddBearerAuthentication(result.AccessToken));

3. 参考文档

通过以上配置,您可以根据应用程序的运行环境选择合适的身份认证方式,确保安全访问目标服务。