gpt4 book ai didi

asp.net-mvc - ASP.Net MVC成员资格

转载 作者:行者123 更新时间:2023-12-04 18:54:00 25 4
gpt4 key购买 nike

我想使用AuthorizeAttribute来控制允许哪些用户访问我的操作。我只想澄清一下我的逻辑是有条理的。

  • 我创建我自己的IPrincipal实现
  • 我将用户的凭据发布到安全 Controller 的登录操作中。
  • 我使用UserService类验证凭据,并将从UserService类返回的IPrincipal分配给HttpContext.User
  • 继承AuthorizeAttribute的My WebAuthorizeAttribute会检查当前的HttpContext.User.Identity.IsAuthenticated和HttpContext.User.IsInRole,以确定用户是否有权访问该操作。

  • 事情正常吗?我知道我可以继承MembershipProvider,但是我不需要那里的所有功能,实际上只需要具有两个不同角色的登录能力。

    最佳答案

    您必须将IPrincipal存储在某个位置,并在每次请求时将其还原。如果您将使用FormsAuthentication,这是一个很好的解决方案:

    ASP.NET 2.0 Forms authentication - Keeping it customized yet simple

    您可以在此处找到其他解决方案:

    Where to store logged user information on ASP.NET MVC using Forms Authentication?

    并可能适用于其他许多StackOverflow问题:)

    编辑

    关于MyBusinessLayerSecurityClass.CreatePrincipal(id,id.Name):

    您应该阅读以下页面:

    http://msdn.microsoft.com/en-us/library/aa480476.aspx

    特别是:

    The FormsAuthenticationModule class constructs a GenericPrincipal object and stores it in the HTTP context. The GenericPrincipal object holds a reference to a FormsIdentity instance that represents the currently authenticated user. You should allow forms authentication to manage these tasks for you. If your applications have specific requirements, such as setting the User property to a custom class that implements the IPrincipal interface, your application should handle the PostAuthenticate event. The PostAuthenticate event occurs after the FormsAuthenticationModule has verified the forms authentication cookie and created the GenericPrincipal and FormsIdentity objects. Within this code, you can construct a custom IPrincipal object that wraps the FormsIdentity object, and then store it in the HttpContext. User property.



    设置身份验证Cookie后,将自动管理FormsIdentity。您所要做的就是将其包装在IPrincipal中。当HttpContext.Current.User属性 不为空(它是GenericPrincipal,不久之后将其替换)时,所有这一切都会发生。当HttpContext.Current.User为null时,则没有较早创建的身份验证Cookie,并且未对用户进行身份验证。

    关于asp.net-mvc - ASP.Net MVC成员资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1829105/

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