如何在ASP.NET MVC 5中验证未经授权的用户

时间:2018-09-13 07:51:34

标签: c# asp.net asp.net-mvc

不幸的是,我没有找到适合我的答案,所以我希望有人能给我一些建议。

我可以接受用户ip,但是它可以是动态的,因此这不是100%的保证,而且在一个ip上可以有多个用户。

我也可以使用anonymousIdentification

<anonymousIdentification
        enabled="true"
        cookieless="UseCookies"
        cookieName=".ASPXANONYMOUS"
        cookieTimeout="30"
        cookiePath="/"
        cookieRequireSSL="false"
        cookieSlidingExpiration = "true"
        cookieProtection="Validation"
      />

但是它基于容易被关闭或清除的鸟蛤。

据我所知有人使用evercoockie,但我觉得这太粗糙了,也许我错了。

因此,我想知道是否可以通过计算机和移动设备更可靠地识别用户。

1 个答案:

答案 0 :(得分:0)

您可以为每个访客生成一个GUID并将其保存在cookie中。因此,每次用户到来时,它都会检查Cookie。然后,您可以将GUID用作其他实体的标识符,而不是用户ID。我已经将此系统用于允许访客和用户都使用服务的页面。它必须是GUID,而不是int,因此无法手动操作cookie。

    public Guid InitGuestCookie()
    {
        if (Request.Cookies.AllKeys.Contains(Utils.Constants.GuestId))
        {
            var id = Request.Cookies[Utils.Constants.GuestId];

            if (id != null)
            {
                var guid = new Guid(id.Value);
                // Make sure this guid exists as a registered guest
                var guest = _guestService.GetById(guid);
                if (guest != null)
                {
                    return guest.Id;
                }
            }
        }

        var newGuest = CreateGuest();
        var cookie = new HttpCookie(Utils.Constants.GuestId, newGuest.Id.ToString());
        Response.Cookies.Set(cookie);
        return newGuest.Id;
    }

    public Guid GuestId { get; set; }

    public Guest CreateGuest()
    {
        var guid = Guid.NewGuid();
        var newGuest = new Guest()
        {
            CreateDate = DateTime.Now,
            LastUsageDate = DateTime.Now,
            Id = guid,
        };

        _guestService.AddOrUpdate(newGuest);
        return newGuest;
    }

然后在控制器的Init方法中调用:

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        GuestId = InitGuestCookie();
    }