MVC Windows身份验证导致查询字符串太长错误

时间:2016-01-26 13:30:04

标签: asp.net-mvc ldap

我有一个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")
});

...它导致查询字符串浏览器错误太长了......

http://localhost:80/UserAuthentication/Account/LoginUser?ReturnUrl=%2FUserAuthentication%2FAccount%2FLoginUser%3FReturnUrl%3D%252FUserAuthentication%252FAccount%252FLoginUser%253FReturnUrl%253D%25252FUserAuthentication%25252FAccount%25252FLoginUser%25253FReturnUrl%25253D%2525252FUserAuthentication%2525252FAccount%2525252FLoginUser%2525253FReturnUrl%2525253D%252525252FUserAuthentication%252525252FAccount%252525252FLoginUser%252525253FReturnUrl%252525253D%(等)

我已经将[AllowAnonymous]置于LoginUser脚本之上,所以我真的不确定为什么它不会进入它(因为这看起来像是一次又一次地发生)。

真的非常感谢任何帮助。

更新为包含LoginUser脚本: 我已经包含了一个只需记录用户的精简版本。

[AllowAnonymous]
public async Task<ActionResult> LoginUser()
{
    var status = await SignInManager.PasswordSignInAsync("ATHORNE", "Something123!", false, false);

    return View();
}

我使用PasswordSignInAsync和常量密码,因为没有Windows身份验证的密码。如果有更好的方法,请告诉我!

视图是目前的空白默认视图。

1 个答案:

答案 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以获取所需的任何其他信息。