Azure Web App web API 使用 ClaimsIdentity 模拟用户

Azure Web App web API impersonate user using ClaimsIdentity

在我的 Azure Web 应用程序中,我想通过使用他们的 ClaimsIdentity 来模拟用户来调用第 3 方 API。第 3 方 Web API 允许 Basic 或 Kerberos,如果需要,我可以选择切换到使用 windows 集成安全性的第 3 方 SDK。

我 运行 遇到的问题是模拟位,下面是我的代码。

var webUser = HttpContext.Current.User.Identity as ClaimsIdentity;

var windowsIdentity = S4UClient.UpnLogon(webUser.Claims.FirstOrDefault(x => x.Type.Equals(ClaimTypes.Upn)).Value);

using (var impersonationContext = windowsIdentity.Impersonate())
{
    //make call to 3rd party Web API or SDK
}

当 运行 以上时,我得到以下错误:

The pipe endpoint 'net.pipe://localhost/s4u/022694f3-9fbd-422b-b4b2-312e25dae2a2' could not be found on your local machine.

我读过的所有内容都指向启动 C2WTS windows 服务,有没有办法为 Azure Web 应用程序启动此服务?如果不是,我如何才能冒充用户或将凭据传递给我的第 3 方 api/sdk?

当您使用 Azure WebApp 时,您与基础架构和托管环境隔离 - 因此您无法启动 "Windows service" 之类的东西。

如果您需要为个人用户使用 Windows / Kerberos 身份验证来访问您的 Web 应用程序背后的资源,则不能使用 Azure WebApp。您应该将 Azure VM 与 IIS 一起使用,IIS 是您域的成员服务器。然后您可以配置您的 Web 应用程序以接受基于声明的身份验证(例如来自 Azure AD)并通过 UPN 和 WindwosIdentity 构造函数(> .NET 4.5)模拟您的内部域帐户。