我的想法是让我的家人使用他们的Windows用户名输入应用程序(只是为了让他们不必编写它),并使用Identity将密码和其他内容保存到本地MDF数据库中。问题是我无法弄清楚如何强制进行Windows身份验证(以便Context.User.Identity.Name
为我提供Windows用户名)并使用该信息登录到Identity数据库。为了创建项目,我使用带有个人帐户的Web窗体模板作为安全类型,并删除了所有Owin第三方登录包(Microsoft,Google等)。
以下是我尝试过的内容:
Default.aspx.cs (我需要身份验证的主页)
protected void Page_Load(object sender, EventArgs e)
{
//According to Identity comments, ApplicationCookie is the AuthenticationType...
//once logged in through Identity
if (Context.User.Identity.AuthenticationType != "ApplicationCookie")
Response.Redirect("Login.aspx", true);
}
Login.aspx.cs
protected void LogIn(object sender, EventArgs e) //login button handler
{
var manager = Context.GetOwinContext().GetUserManager<UserAdministrator>();
var signinManager = Context.GetOwinContext().GetUserManager<SessionAdministrator>();
string windowsName = Context.User.Identity.Name;
User user = manager.Users.Where(u => u.UserName == windowsName).FirstOrDefault();
// rest of the login code...
}
web.config (全局)
<location path="Login.aspx"> //this should only allow windows logged-in users
<system.web>
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
</system.web>
</location>
<location path="default.aspx"> // this should only allow Identity-logged in users
<system.web>
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
</system.web>
</location>
项目属性
出于某种原因,启动应用程序并浏览到default.aspx或login.aspx,并不使用Windows身份验证,因此Context.User.Identity.IsAuthenticated
返回false。我怎样才能实现我的目标?
答案 0 :(得分:1)
在default.aspx节点 <allow users="*" />
它将强制app通过拒绝匿名
来使用身份验证答案 1 :(得分:0)
这可以被认为是可以解决的。
我删除了Windows身份验证并切换到Forms身份验证,并使用我找到的代码获取Windows用户名(不记得是谁回答了SO问题):
System.Security.Principal.WindowsPrincipal windowsUser = new System.Security.Principal.WindowsPrincipal(Request.LogonUserIdentity);
Request.LogonUserIdentity.Impersonate();
string username = windowsUser.Identity.Name.Substring(windowsUser.Identity.Name.LastIndexOf("\\") + 1);