【问题标题】:Relationship between MembershipUser and IPrincipal objectMembershipUser 和 IPrincipal 对象之间的关系
【发布时间】:2009-05-10 21:20:17
【问题描述】:

我假设 MembershipUser 对象和实现 IPrincipal 接口的对象在某种意义上是“连接的”,即当其中一个对象中的某些信息发生变化时,另一个对象也会相应地发生变化?

【问题讨论】:

    标签: asp.net authentication asp.net-membership forms-authentication


    【解决方案1】:

    不确定我是否理解您的问题,但我认为您的假设不正确。

    System.Web.Security 使用MembershipUser 来通过MembershipProvider 对用户进行身份验证,以便您在Web 配置中设置。当你打电话时......

    MembershipUser user = Membership.GetUser(username);
    

    您的会员资格提供商将查询您保存用户信息的数据存储区(Sql 数据库、Active Directory 等)并返回为该用户名搜索的 Memberhsip 数据。

    如果您在应用程序中定义了另一个实现 IPrincipal 接口的类,并且您已经实例化了该类型的对象,这并不一定意味着您的 MembershipUser 对象和您的自定义对象共享数据(当然,除非您已分配以编程方式引用)

    如果您提供了一个代码示例,可能会有助于澄清

    【讨论】:

    • 我知道,如果您手动创建主体对象(实现 IPrincipal 接口的对象),您还必须以编程方式创建两个对象之间的引用。但是在我最初的问题中,我指的是(抱歉没有更具体)代表当前用户的安全上下文的主体对象,并且在使用表单身份验证时由 Asp.Net 自动创建。我认为在那种情况下,Asp.Net 也会负责“同步”这两个对象?
    • 我还是不明白你想在两个对象之间“同步”什么?他们并没有真正共享任何东西——IPrincipal 实现包含一个 IIdentity——但仅此而已....
    • Asp.net 上下文中的IPrincipal (HttpContext.User) 是在机器上运行当前进程的用户。 MembershipUser 是您存储在数据存储中某处的应用程序用户。在授权期间,您可以通过将 MembershipUser 的值分配给 FormsAuthentication 票证来设置 HttpContext.User,但是您所引用的两个对象永远不会自动同步。
    • 对不起,我的问题完全没有解决。出于某种原因,我认为 IPrincipal ( HttpContext.User ) 与 MembershipUser 有更多共同的属性,但实际上只有属性 MembershipUser 与 HttpContext.User 共享是 IIdentity 中定义的三个属性!非常感谢您的帮助和耐心
    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 2016-02-08
    • 2011-03-08
    • 2010-10-12
    • 2021-08-26
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多