gpt4 book ai didi

c# - 使用 ASP .NET MVC(缓存、Cookie...)自定义身份验证的最佳选择

转载 作者:太空狗 更新时间:2023-10-29 21:47:21 27 4
gpt4 key购买 nike

我对使用 MVC 身份验证有点迷茫......

我正在寻找用于大型电子商务 网站的最佳选择,其中性能是重中之重...

到目前为止,我正在寻找的两个选项是:

  • 创建一个 FormsAuthenticationTicket 并将其加密到一个 cookie 中,就像这里实现的那样:Cookie implementation
  • 缓存认证数据,像这样:

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
    if (HttpContext.Current.User != null)
    {
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
    if (HttpContext.Current.User.Identity is FormsIdentity)
    {
    // Get Forms Identity From Current User
    FormsIdentity id = FormsIdentity)HttpContext.Current.User.Identity;
    // Create a custom Principal Instance and assign to Current User (with caching)
    Customer principal = (Customer)HttpContext.Current.Cache.Get(id.Name);
    if (principal == null)
    {
    // Create and populate your Principal object with the needed data and Roles.
    principal = MyBusinessLayerSecurityClass.CreatePrincipal(id, id.Name);
    HttpContext.Current.Cache.Add(
    id.Name,
    principal,
    null,
    System.Web.Caching.Cache.NoAbsoluteExpiration,
    new TimeSpan(0, 30, 0),
    System.Web.Caching.CacheItemPriority.Default,
    null);
    }
    HttpContext.Current.User = principal;
    }
    }
    }
    }

Caching sample here

大家怎么看?

谢谢

最佳答案

一个更MVCish的方法来实现这个是写一个自定义 AuthorizeAttribute并在覆盖 OnAuthorization 中执行此操作方法而不是使用 Application_AuthenticateRequest

话虽如此,我认为您的实现非常好。作为将附加信息存储到缓存中的替代方法,如果此信息不是很大,您可以将其存储在身份验证票证的 userData 部分中。这两种方法都是可行的。如果您决定使用缓存,我建议您将其卸载到专用缓存服务器,而不是将其存储在 Web 服务器的内存中。

关于c# - 使用 ASP .NET MVC(缓存、Cookie...)自定义身份验证的最佳选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com