HttpContext.Current.User.Identity.Name

时间:2013-10-13 10:21:46

标签: asp.net security

目前,在使用内置asp.net成员资格提供程序对用户进行身份验证时,我遇到了安全问题。

问题是:我使用用户AAA进行身份验证,之后,我在不同计算机上对用户BBB执行相同操作。验证用户BBB并调用

HttpContext.Current.User.Identity

在AAA的计算机上,它将返回BBB的凭证。这是我的代码:

public void SignIn(string UserEmail, decimal UserProviderId, bool CreatePersistentCookie) 
{ 
    string userName = ""; 
    bool validUser = _acctMembership.ValidateUser(UserEmail, UserProviderId, out userName, out _userId);
    if (validUser) 
    {
        string name = userName + ";" + UserEmail; _formAuth.SignIn(name, CreatePersistentCookie);
    }
    else
    {
        throw new System.Security.Authentication.InvalidCredentialException("Invalid Email or Password");
    }
} 

结论:

最后记录的用户会覆盖之前记录的用户的身份。

有谁能告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您正在使用 UserEmail 验证用户,但使用名为 name 的其他值创建 FormAuhtenicationTicket

bool validUser = _acctMembership.ValidateUser(XXXXX, UserProviderId, out userName, out _userId);
if (validUser) 
{
   string name = userName + ";" + UserEmail; 
   _formAuth.SignIn(XXXXX, CreatePersistentCookie);
}

上述代码中的XXXXX必须相同。