C# 自定义角色身份验证ASP.NET 4.5
我正在努力创建自己的用户访问角色,并利用IIdentity和IPrincipal类 编辑 我一直在看,但我不能让它工作 我创建了一个简单的终端用户表,其中包含电子邮件、密码和角色列。但是目前,我不认为这些角色没有被解析为身份或原则,我也不确定如何做到这一点 我已经看了一些指南,大多数指南要么依靠VS和.NET Framework为您构建基础,提供许多外观笨拙的表,要么是MVC,这一点都没有帮助 在我的表中,我定义了三个角色,分别是客户、销售和管理员,我希望某些用户无法访问某些页面。这些在我的webconfig中反映为拒绝全局访问,但仅在经过身份验证的情况下才允许访问某些角色 目前,登录功能正在运行,除非用户登录,否则将拒绝用户,但不考虑特定角色。我有一个对象存储在整个站点所有用户数据的会话中,但在web配置中完全忽略了“角色” 最终,我需要对uRole做些什么,但我不确定做什么或如何做 有人能给我指一下正确的方向吗 非常感谢 登录C#:C# 自定义角色身份验证ASP.NET 4.5,c#,asp.net,webforms,C#,Asp.net,Webforms,我正在努力创建自己的用户访问角色,并利用IIdentity和IPrincipal类 编辑 我一直在看,但我不能让它工作 我创建了一个简单的终端用户表,其中包含电子邮件、密码和角色列。但是目前,我不认为这些角色没有被解析为身份或原则,我也不确定如何做到这一点 我已经看了一些指南,大多数指南要么依靠VS和.NET Framework为您构建基础,提供许多外观笨拙的表,要么是MVC,这一点都没有帮助 在我的表中,我定义了三个角色,分别是客户、销售和管理员,我希望某些用户无法访问某些页面。这些在我的we
几个月前,当我试图解决这个问题时,我遇到了这个问题。您目前正在登录,根据您展示的代码,我必须假设这是一个带有预构建web表单工具包的web表单项目。因此,您仍然使用OWIN登录 不是基于代码的演练,但这是您需要做的,如果您遇到困难,我很乐意提供进一步帮助:
应用程序\u AthenticateRequest
上对用户进行身份验证,并删除其方法中与OWIN相关的任何内容IIdentity
派生的类,并接受username、authtype和isAuthenticated的参数,还需要一个从IPrincipal
派生的类,该类将包含派生的IIdentity
,以及角色。我选择了公共getter和setter以及私有变量,比如name、is-auth等IIdentity
的实例,同时检查数据库中保存的信息应用程序\u AthenticateRequest
需要在每次页面加载时验证用户,因此您需要有一个方法来创建派生IPrincipal
的实例,通过抓取派生IIdentity
并检查用户所扮演的角色来检查用户是否经过身份验证表单身份验证
,而不使用OWIN,因此在应用设置
中添加
,因为我假设您有一个预构建的站点,不要尝试删除OWIN,只需禁用它即可李>
然后,您应该能够登录,并且您声明的自定义角色将被派生的IIdentity
使用,而派生的IIdentity将被webconfig基于位置的安全性确认
希望这能帮助你和其他人
public partial class Login : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void logindd_Click(object sender, EventArgs e)
{
EndUser newEndUser = new EndUser();
string user = ((TextBox)loginForm1.FindControl("UserName")).Text;
string conRef = ((TextBox)loginForm1.FindControl("Password")).Text;
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalConnection"].ConnectionString))
{
try
{
con.Open();
string checkIdent = @"SELECT Count(*) FROM EndUser WHERE EndUser.Email=@email AND EndUser.Password=@pass";
using (SqlCommand cmd = new SqlCommand(checkIdent, con))
{
cmd.Parameters.AddWithValue("@email", user);
cmd.Parameters.AddWithValue("@pass", pass);
int chk = (int)cmd.ExecuteScalar();
if (chk > 0)
{
//grabbing user role
SqlCommand cmd2 = new SqlCommand("SELECT EndUser.Role FROM EndUser WHERE EndUser.Password=@pass;",con);
cmd2.Parameters.AddWithValue("@pass", pass);
SqlDataReader sdr = null;
sdr = cmd2.ExecuteReader();
sdr.Read();
string uRole = sdr["Role"].ToString();
UserIdentity userr = new UserIdentity(user, true, uRole);
userr.Roles.Add(uRole);
FormsAuthentication.Initialize();
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, user, DateTime.Now, DateTime.Now.AddMinutes(30), false, userr.Roles.ToString());
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat)));
newEndUser.email = user;
newEndUser.pass = pass;
Session["EndUserObj"] = newEndUser;
FormsAuthentication.RedirectFromLoginPage(user, false);
}
else
{
ErrorLbl.Visible = true;
ErrorLbl.Text = "Details are incorrect";
}
}
}
catch (Exception er)
{
ErrorLbl.Visible = true;
ErrorLbl.Text = er.ToString();
}
}
}
}