我有一个需要Windows身份验证和表单登录的项目。我碰到了OWIN Mixed Authentication,似乎符合我的要求。
在实施到我自己的项目之前,我尝试从源链接运行示例解决方案。
我使用IIS Express调试了解决方案,当我在Windows身份验证对话框中输入凭据时,在logonUserIdentity
变量中找到了我的正确凭据。
但是,当我设置本地IIS站点时,请按照自述文件中的说明添加以下功能委托属性:
Authentication - Windows to Read/Write
当我在Windows身份验证对话框中输入凭据时,在logonUserIdentity
变量中输入的是 NT AUTHORITY \ IUSR ,而不是我在对话框中输入的用户名。
我之所以会这样,是因为IIS站点上启用了 AllowAnonymous ,但是需要停止CookieAuthentication
类中的Startup.Auth
导致的登录循环。< / p>
我应该如何设置IIS站点,以便Windows凭据对话框通过输入的凭据而不是NT AUTHORITY \ IUSR。
答案 0 :(得分:0)
我使用IIS Express调试了解决方案,当我在Windows身份验证对话框中输入凭据时,可以在logonUserIdentity变量中找到我的正确凭据。
据我所知,IIS Express使用当前的计算机登录帐户作为匿名登录帐户。因此,您会发现logonUserIdentity是正确的。您可以尝试使用其他域帐户登录该应用程序。您会发现它仍使用当前的计算机登录帐户,但未更改为登录用户帐户。
由于混合身份验证允许多种登录方式,因此您应始终启用匿名登录,以使没有域帐户的人登录。
mix自己的身份验证使用asp.net身份外部登录来实现与Windows的登录。asp.net身份外部登录将首先转到mixauth提供程序以检查Windows身份验证结果。
如果成功,它将返回带有Windows信息的帐户控制器的ExternalLoginCallback方法,并使用此信息,身份将生成一个身份用户。
我认为,如果要获得用户的当前登录名,建议您尝试使用会话将Windows登录名存储在ExternalLoginCallback方法中的用户帐户中。
更多详细信息,您可以参考以下代码:
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
Session["LoginonUsername"] = loginInfo.DefaultUserName;
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// Sign in the user with this external login provider if the user already has a login
var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
case SignInStatus.Failure:
default:
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
}
}
结果:
答案 1 :(得分:0)
我的IIS网站绑定设置为http://projectname
当我将IIS站点上的绑定更改为http://localhost或http://pcname时,它允许我通过正确的Windows凭据。