我有一个MVC网站,我想修改它,而不是使用表单来记录用户,它会获取他们的Windows ID,然后使用LDAP将其传递给本地Active Directory。
但是,当我将IIS从Anonymous更改为Windows身份验证并使用以下内容更改Start.Auth.cs中的代码时(其中LoginUser是拾取用户并连接到AD的脚本)...
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/LoginUser")
});
...它导致查询字符串浏览器错误太长了......
我已经将[AllowAnonymous]置于LoginUser脚本之上,所以我真的不确定为什么它不会进入它(因为这看起来像是一次又一次地发生)。
真的非常感谢任何帮助。
更新为包含LoginUser脚本: 我已经包含了一个只需记录用户的精简版本。
[AllowAnonymous]
public async Task<ActionResult> LoginUser()
{
var status = await SignInManager.PasswordSignInAsync("ATHORNE", "Something123!", false, false);
return View();
}
我使用PasswordSignInAsync和常量密码,因为没有Windows身份验证的密码。如果有更好的方法,请告诉我!
视图是目前的空白默认视图。
答案 0 :(得分:0)
通常我会覆盖OnActionExcuting(ActionExecutingContext filterContext)
您可以在基本Controller类或Action Filter
中执行此操作如果IIS设置为拒绝匿名访问并启用Windows身份验证,则在过滤器上下文中,您可以通过HttpContext.User.Identity.Name;
为了更安全一点,你可以写一些像
这样的代码var user = (filterContext.HttpContext.User.Identity != null
&& filterContext.HttpContext.User.Identity.IsAuthenticated) ?
HttpContext.User.Identity.Name : null;
如果username不为null,则表示您拥有当前登录的经过身份验证的用户,格式为domain \ username。您可以根据此查询Active Directory以获取所需的任何其他信息。