.NET Core之Identity认识

.NET Core之Identity认识

前言

.NET Core中,Identity组件负责对用户的身份进行认证。

先认识几个概念:

l Identity,身份

l Claims,身份元素,身份单元

l ClaimType,身份元素类型,身份单元类型

l ClaimsIdentity,证件元素,证件单元

l ClaimsPrincipal,持证人

 

环境

VS2019 + .NET5.0

依赖:

System.Security.Claims

 

1.ClaimType 身份元素类型,身份单元类型

 

ClaimType可以看成身份元素类型,身份单元类型。ClaimType使用字典进行存储,一个Key,一个ValueClaimType 就是KeyClaimValue就代表一个Value

 

首先需要引用依赖,如下图所示:

 

 

 

 

 

 

 

默认的ClaimType如下:

 

 

 

 

已经定义的类型:

 //

    // 摘要:

    //     Defines constants for the well-known claim types that can be assigned to a subject.

    //     This class cannot be inherited.

    public static class ClaimTypes

    {

        //

        // 摘要:

        //     The URI for a claim that specifies the actor, http://schemas.xmlsoap.org/ws/2009/09/identity/claims/actor.

        public const string Actor = "http://schemas.xmlsoap.org/ws/2009/09/identity/claims/actor";

        //

        // 摘要:

        //     The URI for a claim that specifies the postal code of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode.

        public const string PostalCode = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode";

        //

        // 摘要:

        //     The URI for a claim that specifies the primary group SID of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid.

        public const string PrimaryGroupSid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid";

        //

        // 摘要:

        //     The URI for a claim that specifies the primary SID of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid.

        public const string PrimarySid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid";

        //

        // 摘要:

        //     The URI for a claim that specifies the role of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/role.

        public const string Role = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";

        //

        // 摘要:

        //     The URI for a claim that specifies an RSA key, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa.

        public const string Rsa = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa";

        //

        // 摘要:

        //     The URI for a claim that specifies a serial number, http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber.

        public const string SerialNumber = "http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber";

        //

        // 摘要:

        //     The URI for a claim that specifies a security identifier (SID), http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid.

        public const string Sid = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid";

        //

        // 摘要:

        //     The URI for a claim that specifies a service principal name (SPN) claim, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/spn.

        public const string Spn = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/spn";

        //

        // 摘要:

        //     The URI for a claim that specifies the state or province in which an entity resides,

        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/stateorprovince.

        public const string StateOrProvince = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/stateorprovince";

        //

        // 摘要:

        //     The URI for a claim that specifies the street address of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress.

        public const string StreetAddress = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress";

        //

        // 摘要:

        //     The URI for a claim that specifies the surname of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname.

        public const string Surname = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname";

        //

        // 摘要:

        //     The URI for a claim that identifies the system entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system.

        public const string System = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system";

        //

        // 摘要:

        //     The URI for a claim that specifies a thumbprint, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/thumbprint.

        //     A thumbprint is a globally unique SHA-1 hash of an X.509 certificate.

        public const string Thumbprint = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/thumbprint";

        //

        // 摘要:

        //     The URI for a claim that specifies a user principal name (UPN), http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn.

        public const string Upn = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn";

        //

        // 摘要:

        //     The URI for a claim that specifies a URI, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uri.

        public const string Uri = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uri";

        //

        // 摘要:

        //     The URI for a claim that specifies the user data, http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata.

        public const string UserData = "http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata";

        //

        // 摘要:

        //     The URI for a claim that specifies the version, http://schemas.microsoft.com/ws/2008/06/identity/claims/version.

        public const string Version = "http://schemas.microsoft.com/ws/2008/06/identity/claims/version";

        //

        // 摘要:

        //     The URI for a claim that specifies the webpage of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/webpage.

        public const string Webpage = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/webpage";

        //

        // 摘要:

        //     The URI for a claim that specifies the Windows domain account name of an entity,

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname.

        public const string WindowsAccountName = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdeviceclaim.

        public const string WindowsDeviceClaim = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdeviceclaim";

        //

        // 摘要:

        //     The URI for a claim that specifies the Windows group SID of the device, http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup.

        public const string WindowsDeviceGroup = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsfqbnversion.

        public const string WindowsFqbnVersion = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsfqbnversion";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowssubauthority.

        public const string WindowsSubAuthority = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowssubauthority";

        //

        // 摘要:

        //     The URI for a claim that specifies the alternative phone number of an entity,

        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone.

        public const string OtherPhone = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone";

        //

        // 摘要:

        //     The URI for a claim that specifies the name of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier.

        public const string NameIdentifier = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier";

        //

        // 摘要:

        //     The URI for a claim that specifies the name of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name.

        public const string Name = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name";

        //

        // 摘要:

        //     The URI for a claim that specifies the mobile phone number of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone.

        public const string MobilePhone = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone";

        //

        // 摘要:

        //     The URI for a claim that specifies the anonymous user; http://schemas.xmlsoap.org/ws/2005/05/identity/claims/anonymous.

        public const string Anonymous = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/anonymous";

        //

        // 摘要:

        //     The URI for a claim that specifies details about whether an identity is authenticated,

        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authenticated.

        public const string Authentication = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authentication";

        //

        // 摘要:

        //     The URI for a claim that specifies the instant at which an entity was authenticated;

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant.

        public const string AuthenticationInstant = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant";

        //

        // 摘要:

        //     The URI for a claim that specifies the method with which an entity was authenticated;

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod.

        public const string AuthenticationMethod = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod";

        //

        // 摘要:

        //     The URI for a claim that specifies an authorization decision on an entity; http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authorizationdecision.

        public const string AuthorizationDecision = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authorizationdecision";

        //

        // 摘要:

        //     The URI for a claim that specifies the cookie path; http://schemas.microsoft.com/ws/2008/06/identity/claims/cookiepath.

        public const string CookiePath = "http://schemas.microsoft.com/ws/2008/06/identity/claims/cookiepath";

        //

        // 摘要:

        //     The URI for a claim that specifies the country/region in which an entity resides,

        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country.

        public const string Country = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country";

        //

        // 摘要:

        //     The URI for a claim that specifies the date of birth of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth.

        public const string DateOfBirth = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth";

        //

        // 摘要:

        //     The URI for a claim that specifies the deny-only primary group SID on an entity;

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid.

        //     A deny-only SID denies the specified entity to a securable object.

        public const string DenyOnlyPrimaryGroupSid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid";

        //

        // 摘要:

        //     The URI for a claim that specifies the deny-only primary SID on an entity; http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid.

        //     A deny-only SID denies the specified entity to a securable object.

        public const string DenyOnlyPrimarySid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid";

        //

        // 摘要:

        //     The URI for a claim that specifies a deny-only security identifier (SID) for

        //     an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid.

        //     A deny-only SID denies the specified entity to a securable object.

        public const string DenyOnlySid = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsuserclaim.

        public const string WindowsUserClaim = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsuserclaim";

        //

        // 摘要:

        //     The URI for a claim that specifies the Windows deny-only group SID of the device,

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlywindowsdevicegroup.

        public const string DenyOnlyWindowsDeviceGroup = "http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlywindowsdevicegroup";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/dsa.

        public const string Dsa = "http://schemas.microsoft.com/ws/2008/06/identity/claims/dsa";

        //

        // 摘要:

        //     The URI for a claim that specifies the email address of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress.

        public const string Email = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration.

        public const string Expiration = "http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/expired.

        public const string Expired = "http://schemas.microsoft.com/ws/2008/06/identity/claims/expired";

        //

        // 摘要:

        //     The URI for a claim that specifies the gender of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender.

        public const string Gender = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender";

        //

        // 摘要:

        //     The URI for a claim that specifies the given name of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname.

        public const string GivenName = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname";

        //

        // 摘要:

        //     The URI for a claim that specifies the SID for the group of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid.

        public const string GroupSid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid";

        //

        // 摘要:

        //     The URI for a claim that specifies a hash value, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/hash.

        public const string Hash = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/hash";

        //

        // 摘要:

        //     The URI for a claim that specifies the home phone number of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone.

        public const string HomePhone = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone";

        //

        // 摘要:

        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/ispersistent.

        public const string IsPersistent = "http://schemas.microsoft.com/ws/2008/06/identity/claims/ispersistent";

        //

        // 摘要:

        //     The URI for a claim that specifies the locale in which an entity resides, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality.

        public const string Locality = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality";

        //

        // 摘要:

        //     The URI for a claim that specifies the DNS name associated with the computer

        //     name or with the alternative name of either the subject or issuer of an X.509

        //     certificate, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dns.

        public const string Dns = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dns";

        //

        // 摘要:

        //     The URI for an X.500 distinguished name claim, such as the subject of an X.509

        //     Public Key Certificate or an entry identifier in a directory services Directory

        //     Information Tree; http://schemas.xmlsoap.org/ws/2005/05/identity/claims/x500distinguishedname.

        public const string X500DistinguishedName = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/x500distinguishedname";

 

2.Claims身份元素,身份单元

Claims表示身份元素,如登录用户的信息,性别等身份信息。

如新建一个用户名的Claim

var nameClaim = new Claim("UserName", "yak");

 

 

3. ClaimsIdentity证件

ClaimsIdentity看成证件,如身份证,银行卡,户口本等。它包含有用户信息Claims。

如向证件中添加上面新建的户名的Claim

var nameClaim = new Claim("UserName", "yak");

ClaimsIdentity identity = new ClaimsIdentity();

identity.AddClaim(nameClaim);

 

 

4.ClaimsPrincipal持证

 

ClaimsPrincipal(持证人)使用ClaimsIdentity(证件)通行关口,或办理业务等,当然持证人可以持有多张证件。

给ClaimsPrincipal(持证人)添加Claims(身份元素),可以重写UserClaimsPrincipalFactory类中GenerateClaimsAsync方法。

UserClaimsPrincipalFactory在Microsoft.Extensions.Identity.Core程序集中。

定义类CustomClaimPrincipalFactory :

 

public class CustomClaimPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>

    {

        public CustomClaimPrincipalFactory(

        UserManager<IdentityUser> userManager,

        RoleManager<IdentityRole> roleManager,

        IOptions<IdentityOptions> optionsAccessor)

        : base(userManager, roleManager, optionsAccessor)

        {

        }

 

        protected override async Task<ClaimsIdentity> GenerateClaimsAsync(IdentityUser user)

        {

            ClaimsIdentity identity = await base.GenerateClaimsAsync(user);

            identity.AddClaim(new Claim("UserName", user.UserName ?? ""));

            return identity;

        }

总结

 

简单点举例,如用户使用app登录时,通过用户名和密码Claims(身份元素),在确认用户名密码正确情况下,Identity组件初始化为一个ClaimsIdentity(证件),生成IdentityToken返回给app,用户拿着着证件就可以操作app的功能了

 

源码

 

 

 

链接:https://pan.baidu.com/s/1UEm-UYr5ywJMNJ7AT6X6QQ?pwd=yyyy

提取码:yyyy

 

鸣谢

 

Microsoft.AspNetCore.Identity 命名空间:

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.identity?view=aspnetcore-5.0

ASP.NET Core Identity 入门

https://www.cnblogs.com/savorboard/p/aspnetcore-identity.html

 

posted @ 2022-04-23 12:12  春光牛牛  阅读(473)  评论(0编辑  收藏  举报