首页 > 解决方案 > 如何在 ASP.NET MVC 5 中验证未授权用户

问题描述

不幸的是,我没有找到接近我的答案,所以我希望有人能给我一个建议。

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

我也可以使用anonymousIdentification

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

但它基于可以轻松关闭或清除的 cookie。

我知道有人使用evercoockie,但我觉得它太粗糙了,也许我错了。

所以我想知道是否有可能更可靠地识别计算机和移动设备的用户。

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

解决方案


您可以为每个客人生成一个 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();
    }

推荐阅读