我的应用程序只能由我的组织中的员工使用。这将受Azure Active Directory限制,因此只有域中的用户才能访问该站点。
之后我需要进一步增加安全性,以便只有某些员工才能访问该网站。我有一个(MS)SQL表,其中包含所有符合条件的用户名。
使用
直接从Azure Active Directory中提取用户名string username = User.Identity.Name;
(已经过测试并返回正确的语法和字符串等)
我的第一个想法是使用表单身份验证,然后在" login.aspx" Page_Load,检查SQL表,如果存在则继续进入站点
FormsAuthentication.RedirectFromLoginPage(username, true)
如果没有,则加载带有表单的login.aspx页面以填写请求访问权。
问题是,这是最好的方法,而无需重写整个解决方案。
编辑25/12/17感谢@juunas和@PeterBons - 这是我登录表单的Page_load事件中的内容,然后web.config处理表单身份验证。 任何人都可以看到任何MASSIVE错误或安全漏洞?
protected void Page_Load(object sender, EventArgs e)
{
bool isAuthenticated = false;
string username = User.Identity.Name.ToLower().Trim();
string firstname = "";
string surname = "";
string jobrole = "";
string userlevel = "";
string constr = ConfigurationManager.ConnectionStrings["AzureSQL"].ConnectionString;
SqlConnection cnn = new SqlConnection(constr);
string query = "Select * from Usernames";
string querywriteTime = "update [usernames] set [last log in] = @date where username = @username";
SqlCommand cmd1 = new SqlCommand(querywriteTime, cnn);
SqlCommand cmd2 = new SqlCommand(query, cnn);
cnn.Open();
SqlDataReader rdr = cmd2.ExecuteReader();
while (rdr.Read())
{
if (rdr[0].ToString().ToLower().Trim() == username)
{
firstname = rdr[1].ToString().Trim();
surname = rdr[2].ToString().Trim();
jobrole = rdr[4].ToString().Trim();
userlevel = rdr[5].ToString().Trim();
isAuthenticated = true;
}
}
cnn.Close();
if (isAuthenticated)
{
string str = firstname + "/" + surname + "/" + jobrole+"/"+userlevel;
cmd1.Parameters.AddWithValue("@date", DateTime.Now);
cmd1.Parameters.AddWithValue("@username", username);
cnn.Open();
cmd1.ExecuteNonQuery();
cnn.Close();
FormsAuthentication.RedirectFromLoginPage(str, true);
}
}
答案 0 :(得分:0)
您可以在Azure门户中将应用设置为 require user assignment 。
现在,您可以转到“用户和群组”标签,然后选择有权访问的人。