我正在尝试构建一个要部署在我们的内部网上的Web应用程序。我正处于想要用户信息的阶段。
据我所知,我已经通过实现以下内容正确设置了身份验证:
在 Startup->ConfigureServices 中:
services.AddRazorPages();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
并在启动>配置中:
app.UseAuthentication();
app.UseAuthorization();
现在,在页面的模型中,我一直在尝试获取用户信息,但我似乎无法通过用户名和组。
public void OnGet()
{
var wi = (WindowsIdentity)User.Identity;
this.email = wi.Claims.FirstOrDefault(
c => c.Type == ClaimTypes.Email)?.Value;
this.claimsCount = wi.Claims.Count().ToString();
this.claims = wi.Claims.Select(x => x.Type.ToString()).ToList();
this.authenticationType= wi.AuthenticationType.ToString();
this.name = wi.Name;
if (wi.Groups != null)
foreach (var group in wi.Groups)
{
try
{
this.groups.Add(group.Translate(typeof(NTAccount)).ToString());
}
catch (Exception)
{
// ignored
}
}
}
这就是我在我的模型中得到的。
this.email = null
this.claimsCount = 51
this.claims = {A list composed of claims/name, claims/primarysid, claims/primarygroupsid, claims/groupsid x 48}
this.authenticationType = Negotiate
this.name = my login username
如何从这里获取用户的电子邮件地址和名字(即:"John Doe"而不是"CA/jdoe"(?我的研究使我相信我可能没有本地计算机上获取此信息的权限。
如果是这种情况,我该如何检查部署服务器以查看它是否具有获取此信息所需的权限?
1(我缺少一个名为System.DirectoryServices的包/引用,我能够使用NuGet获得它。
2(我添加了以下代码行。
var wi = (WindowsIdentity)User.Identity;
System.DirectoryServices.DirectoryEntry user = new System.DirectoryServices.DirectoryEntry($"LDAP://<SID={wi.User.Value}>");
user.RefreshCache(new[] { "givenName", "sn" });
this.name = user.Properties["givenName"].Value.ToString();