【发布时间】:2018-03-23 11:00:22
【问题描述】:
我有一个网络应用程序,用户需要创建/编辑/删除帖子操作的权限。权限根据 Windows 用户名和自定义角色名称在数据库中的自定义表中处理。
这是我的代码:
var username = Environment.UserName;
using (HostingEnvironment.Impersonate())
{
var ctx = new PrincipalContext(ContextType.Domain);
var user = UserPrincipal.FindByIdentity(ctx, username);
if (user != null)
{
var roleName = accessRepository.GetRole(username);
if (string.IsNullOrEmpty(roleName) || roleName != Roles.admin.ToString())
{
hasAccess = false;
}
}
else
{
hasAccess = false;
}
if (!hasAccess)
{
// redirect
}
}
在 web.config 我有
<authentication mode="Windows" />
我也试过设置
<identity impersonate="true" />
但它不起作用。在服务器上,我尝试将 IIS 设置为启用 Asp.Net 模拟和匿名访问以及这三者的所有变体中的 Windows 身份验证。
当我在我的机器上本地运行它时没有问题,username 是我登录到我的机器时的 Windows 身份验证的用户名。
但是当我将它上传到服务器并访问本地计算机上的网站时,username 是来自服务器的用户名,而不是来自本地计算机的用户名。
为了清楚起见,我不希望用户登录到 Web 应用程序。我希望 Web 应用程序从活动目录中找出 Windows 身份验证。
这不可能吗?还是我想的不对?
【问题讨论】:
-
您似乎在 IIS 中启用了匿名身份验证.. 看看
标签: c# asp.net-mvc-5 active-directory windows-authentication