代码之家  ›  专栏  ›  技术社区  ›  g_b

在IPrincipal/I身份中存储用户有什么好处?

c#
  •  0
  • g_b  · 技术社区  · 11 年前

    与拥有包含您需要的财产并将其用于身份验证/授权的自定义User类相比,IPrincipa/IIdentity的优势是什么?

    2 回复  |  直到 11 年前
        1
  •  3
  •   Wiktor Zychla    11 年前

    明显的好处如下:应用程序的身份验证和身份验证的整个概念;授权是围绕主体和身份构建的,表示为 IPrincipal / IIdentity 。因此,内置机制通常假设使用了这两个。如果它们被使用,内置机制就可以发挥作用。

    以web应用程序为例。这个 HttpContext 的用户在请求的生命周期内表示为 I负责人 。通过遵守此约定,您允许授权机制正确评估是否允许用户访问web资源。这是因为两个WebForms UrlAuthorization 的模块和MVC Authorization 属性假定主体以这种标准方式存储。

    在桌面应用程序中 Thread CurrentPrincipal 这也是一个 I负责人 .

    更换 I负责人 / I身份 使用您自己的身份验证/授权接口将需要很长时间。您必须重写基类库中处理身份验证/授权的大部分部分,而不是依赖于自定义实现的内置接口。

    但是,我看不出你提出的两个陈述之间有任何对立之处。你问到了 I负责人 在自定义类上。但是 I负责人 只是一个界面 (!!),您的自定义类可以轻松实现它。与相同 I身份 。然后可以将自定义类放在 I负责人 应为。

    当然,这可能有点棘手,例如,在web应用程序中,您必须替换内置的身份验证模块 I负责人 。有两个最常用的- FormsAuthenticaiton 使用 GenericPrincipal / FormsIdentity SessionAuthenticationModule 使用 ClaimsPrincipal / ClaimsIdentity 。相反,您的自定义模块可以使用您想要的任何自定义实现。

        2
  •  2
  •   Jim Mischel    11 年前

    标准身份验证方法(如Active Directory、Windows Identity Foundation和Windows本身)都使用 IPrincipal IIdentity 基本上,如果要使用任何内置的身份验证机制,就必须使用这些类。通常,您将有一个自定义数据库模式来存储用户信息 I负责人 I身份 对象,以便进行身份验证。