如何登录用户数据(以安全的方式)



我正在使用 ASP.NET MVC实体框架。 在我的应用程序中,我目前能够登录并检索一些数据,但我不确定我这样做的方式是否是一种安全的方式。

以下是我的应用程序的工作方式:

目前,当用户登录时,我使用以下方法将用户名存储在cookie中:

FormsAuthentication.SetAuthCookie(user.Username, true);

然后我有一个包含以下方法的 RoleProvider 类,该方法返回一个带有用户角色的字符串数组:

public override string[] GetRolesForUser(string username)
{
List<string> rolesList = new List<string>();
string role = CurrentlyLoggedInUser.User.Role.Name;
rolesList.Add(role);
string[] rolesArray = rolesList.ToArray();
return rolesArray;
}

然后我有以下类,用于存储当前登录用户的数据:

public class CurrentlyLoggedInUser
{
private const string UserKey = "MyWebApp.Infrastructure.UserKey";
public static User User
{
get
{
MyDBEntities db = new MyDBEntities();
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
return null;
}
var user = HttpContext.Current.Items[UserKey] as User; //we set the 
if (user == null)
{
user = db.Users.FirstOrDefault(x => x.Username == HttpContext.Current.User.Identity.Name);
if (user == null)
{
return null;
}
HttpContext.Current.Items[UserKey] = user;
}
return user; //Then we return the user object
}
}
}

然后,每当我需要查询数据库以查找用户的任何相关数据时,我都会按如下方式检索用户 ID:

int id = CurrentlyLoggedInUser.User.UserId;

现在我可以使用此 ID 进行查询。

完成后,我注销并调用以下内容:

FormsAuthentication.SignOut();

这是否足够推荐和安全?

考虑要求https来保护你的登录表单,不要忘记MVC控制器和/或操作上的Authorize属性(或者,最好将授权属性设置为全局过滤器(和基本级别就足够了。 @Chad-Nedzlek 不是绝对正确的,FormsAuthentication,您参与,关心您的身份验证 cookie 加密,因此任何人都不容易冒充任何其他人。但是在实现自定义登录时,您必须注意防止暴力攻击:考虑密码生存期限制,所需的复杂性等,如果您正在考虑未来的可扩展性,Web,移动应用程序和API的SSO,或者轻松使用外部(Facebook,Google
等(登录的可能性,请考虑切换到OpenId Connect。

相关内容

  • 没有找到相关文章

最新更新