允许用户只从一台电脑登录

时间:2014-12-24 13:52:45

标签: javascript c# asp.net .net

在我使用C#.net构建的WebApp中,我想允许用户仅从一台PC连接。 因此,当用户第一次登录时,我将保存电脑的详细信息,当我检测到其他电脑时,他们将无法登录。

我想做的事情:

1)在用户首次登录时保存ip并在每次登录时检查,问题: ip可以更改。

 protected string GetIPAddress()
{
    System.Web.HttpContext context = System.Web.HttpContext.Current; 
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (!string.IsNullOrEmpty(ipAddress))
    {
        string[] addresses = ipAddress.Split(',');
        if (addresses.Length != 0)
        {
            return addresses[0];
        }
    }

    return context.Request.ServerVariables["REMOTE_ADDR"];
}

2)将一些密钥保存在本地存储中,然后在每次登录时检查密钥,问题:他们可以清除本地存储或选择不使用它或浏览器不支持本地存储。

localStorage.setItem("key", "123123");

有一个好的,安全的方法吗?

3 个答案:

答案 0 :(得分:0)

虽然我同意@nvoight认为这是一个非常奇怪且有问题的计划,但这是一种可以让它起作用的方式:

在服务器端,有一个数据库表(或某种形式的存储)将用户名映射到“令牌”。用户首次登录时,随机生成此类令牌,​​使用适当的用户名将其存储在数据库中,并使用包含令牌的HTTP响应发送cookie。从那时起,每当用户尝试登录时,请检查cookie是否与数据库中的令牌匹配。

但是,这种方法存在一些明显的问题,比如用户删除cookie时该怎么办(就像你提到的那样从localStorage中删除)。在这种情况下,如果没有联系您删除服务器端的记录,他们将永远无法再从任何计算机登录。同样,同一个用户可能会尝试从同一台计算机上的其他浏览器登录,这将无法正常工作。此外,除非您通过HTTPS提供此站点,否则Cookie将以纯文本形式发送,并且很容易被同一网络上的其他用户劫持。

所以,是的,你可以将一些可能有用的东西拼凑在一起,但尝试完成它可能是一件坏事,而且你很可能只能找到让你在那里工作的解决方案。

答案 1 :(得分:0)

mac地址唯一标识计算机,您应该可以使用它来拒绝/允许连接。

诀窍在于它无法从javascript中读取,因此您需要在浏览器的沙箱外部执行一些代码才能找到它 - 一个Java小程序可以正常工作。

它的kludgey因为它是一个奇怪的要求。如果它只能在一台计算机上运行,​​为什么这是一个Web应用程序?

答案 2 :(得分:0)

如果您想要按PC付费,那么WebApp是错误的技术。 构建浏览器不是以这种方式工作。 要么改变许可模式,要么改变技术。 如果你想要每台PC付费,那么你需要一个激活的胖客户端。

相关问题