IIdentity, IPrincipal或IUser:有什么区别?

本文关键字:什么 区别 IUser IPrincipal IIdentity | 更新日期: 2023-09-27 18:03:25

我正在尝试在MVC5应用程序中实现简单的基于角色的身份验证+授权,但我正在尝试理解身份框架中涉及的所有部分

我正在看一些教程和指南,但我还是不太清楚。

特别是:IIdentity, IPrincipalIUser接口的区别是什么?我应该实现哪一个?

IIdentity, IPrincipal或IUser:有什么区别?

'IPrincipal'是。net框架的接口:

public interface IPrincipal {
    // Retrieve the identity object
    IIdentity Identity { get; }
    // Perform a check for a specific role
    bool IsInRole (string role);
}

该接口定义了登录用户的基本功能。实现此接口的对象表示运行代码的安全上下文。你可以在。net中得到不同风格的IPrincipal: ClaimsPrincipalWindowsPrincipal和其他——这都取决于你使用的框架。如果您正在使用Asp。Net Identity框架,你将处理ClaimsPrincipal。通常不需要实现这个接口。

IIdentity表示用户权限。Asp。Net Identity框架,您将处理ClaimsIdentity。同样,这是您不需要实现的。

这里有更多关于IPrincipalIIDentity的文档

IUser是Asp的一部分。网络身份框架。如果你正在使用身份的实体框架部分,你将提供IdentityUser类,你可以继承和扩展。这是一个供您实现的模型。

基本上,IdentityUser是一个保存在数据库中的POCO。当用户登录时,框架将IdentityUser中的信息转换为ClaimsPrincipalClaimsIdentity。当您访问HttpContext.Current.User时,您将获得ClaimsPrincipal