Dotnet Core API中的模拟和潜在的Kerberos Double-Hop

问题描述

我正在尝试获取一个API,以将客户端凭据传递到数据库(在另一台服务器上),但是对我来说,闻起来很像Kerberos双重问题,但是系统人员说Kerberos委派在相关服务器上已正确设置。下面是我编写的用于测试此方法的方法,底部是通过NTLM将自己的凭据发送到API时在Postman中获得的响应正文。运送我有权访问的另一个帐户的凭据时,我得到类似的响应。当我交付的凭证很差时,IIS会停止我的请求并以401响应,而不会将请求发送到API;这是预期的和必需的。

除了Kerberos双跳之外,还有什么可能导致这种情况?我的模拟实施存在缺陷吗?我无权访问任何一个服务器,但是如果需要,我可以提供控制器遇到的整个丑陋异常。

/// <summary>
/// This endpoint should not support PUT.  This method is simply a means by which to test impersonation
/// </summary>
[HttpPut]
public IActionResult PutMethod()
{
    var bogusPutResult = new ImpersonationResult();
    if (!(this.User.Identity is WindowsIdentity user)) return Problem("Cannot authenticate user");

    var row1 = _myDbContext.MyTable.Find(1);
    bogusPutResult.BeforeImpersonation = $"{WindowsIdentity.GetCurrent().Name} got a row with value {row1.Value}";

    WindowsIdentity.RunImpersonated(user.AccessToken,() =>
    {
        string message;
        try
        {
            var row2 = _myDbContext.MyTable.Find(2);  // All domain users have SELECT access
            message = $" got a row with value {row2.Value}";
        }
        catch (Exception e)
        {
            message = $" ate this: {e.GetType()}--{e.Message}";
        }
                
        bogusPutResult.DuringImpersonation = $"{WindowsIdentity.GetCurrent().Name} {message}";
    });

   bogusPutResult.AfterImpersonation = WindowsIdentity.GetCurrent().Name;

   return Ok(bogusPutResult);
}

API返回的JSON ...

{
    "BeforeImpersonation": "MYDOMAIN\\srv-apiserviceaccount got a row with value 34 ","DuringImpersonation": "MYDOMAIN\\finglixon  ate this: Microsoft.Data.SqlClient.SqlException--Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.","AfterImpersonation": "MYDOMAIN\\srv-apiserviceaccount"
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)