为什么我没有在经过 Windows 身份验证的 Web Core API 中获取我的用户名?



我的 Web Core API 中的此代码确认我是经过身份验证的用户,但我没有获取用户名,而是获取应用程序池的名称。 我该如何解决这个问题?

var testa = User.Identity.GetType();
NLogger.Info($"testa = {testa}");
var testd = User.Identity.IsAuthenticated;
NLogger.Info($"testd = {testd}");
var loggedInUser = User.Identity.Name;
NLogger.Info($"loggedInUser = {loggedInUser}");

在我的日志文件中,我得到;

testa = System.Security.Principal.WindowsIdentity
testd = True
loggedInUser = IIS APPPOOLSIR.WEBUI

我对控制器使用 [Authorize] 标签,但匿名身份验证已禁用。

好吧,我从邮递员调用该方法,它工作正常,LoggedInUser是正确的。但是当我从我的代码调用时,我得到了上面显示的错误登录InUser。 我用于从客户端应用调用 Web API 的代码是;

public static async Task<IEnumerable<ContractDto>> GetAllForUser()
{
using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
{
client.BaseAddress = new Uri(AppSettings.ServerPathApi);
var path = GetPath("getallforuser");
var response = await client.GetAsync(path);
response.EnsureSuccessStatusCode();
var stringResult = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IEnumerable<ContractDto>>(stringResult);
}
}

在 IIS 中,我已将应用程序池类型设置为所有各种选项; 应用程序池身份,网络服务,本地服务,本地系统,每次都测试应用程序。我到底错过了什么?

试试这个

if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
string username = System.Web.HttpContext.Current.User.Identity.Name;
}

或者你可以试试

var user = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;
var userName = user.Impersonate();

相关内容

最新更新