ASP。NETCoreIdentity系列之七
在这节中我们主要介绍在ASP。NETCoreIdentity如何使用Claims,ASP。NETCoreIdentityClaims是颁发给用户键值对(namevalue)表示用户允许做什么。例如,驾驶执照颁发机构给个人颁发驾驶执照,如果驾照上的DOB是1990年12月21日,那么在这种情况下,claimname是DOB,claimvalue是1990年12月21日,签发人是驾驶执照当局。这意味着用户是由驾驶执照当局授权驾驶汽车在前面的Identity例子可以看到认证用户是基于用户邮箱和密码,我们也可以授权一个用户访问特定资源。注意Identity的Role是Claims,但不是所有Claims都是Role,ASP。NETCoreIdentity通过使用claims做授权和认证,这节我们将覆盖更详细细节。IdentityClaims授权,最简单的方法是检查claimvalue,并允许基于该值访问资源创建一个ClaimsController控制器,修改Index方法返回User。Claims,代码如下:spanclasscodesnippetouterspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordclassspanspanclasscodesnippettitleClaimsControllerspan:spanclasscodesnippettitleControllerspanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippettitleClaimsControllerspan(spanclasscodesnippetparamsspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanIActionResultspanclasscodesnippettitleIndexspan(spanclasscodesnippetparamsspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView(User。Claims);spanspanclasscodesnippetouter}spanspanclasscodesnippetouter}span在ASP。NETIdentity中如何获取用户的Claims呢?我们可以通过HttpContext对象的User属性,它返回当前用户的ClaimsPrincipal对象,该对象包含用户的所有claims,我们将该对象通过View展示到浏览器,创建一个Index。cshtml在ViewsClaims文件夹下,代码如下:spanclasscodesnippetoutermodelIEnumerablespanclasscodesnippettagspanclasscodesnippetnameSystem。Security。Claims。Claimspanspanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterViewData〔Title〕Claims;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcontainerspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringrowmb3spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsmspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringtabletableborderedalignmiddlespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan名称spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan颁发机构spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan类型spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan值spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterforeach(varclaiminModel。OrderBy(xx。Type))spanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Subject?。Namespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Issuerspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Typespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Valuespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspan
我们运行应用程序使用并使用如下邮箱和密码进行登陆(如果没有可以自行添加)邮箱:tomyahoo。com密码:Coder77
导航到https:localhost:7296Claims
1、创建和删除Claims
对一个用户创建和删除IdentityClaims,首先创建一个新的Create。cshtml,在ViewsClaims目录下,代码如下:spanclasscodesnippetouter{spanspanclasscodesnippetouterViewData〔spanclasscodesnippetstringTitlespan〕spanclasscodesnippetstring新增Claimspan;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterAllspanspanclasscodesnippetclassspanclasscodesnippetkeywordclassspanspanspanclasscodesnippetstringtextdangerspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterformmethodspanclasscodesnippetstringpostspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringmb3rowalignitemscenterspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm1spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamelabelspanspanclasscodesnippetattrforspanspanclasscodesnippetstringClaimTypespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcontrollabelspanspanClaim类型:spanclasscodesnippettagspanclasscodesnippetnamelabelspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm11spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameinputspanspanclasscodesnippetattrnamespanspanclasscodesnippetstringClaimTypespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringformcontrolspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringmb3rowalignitemscenterspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm1spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamelabelspanspanclasscodesnippetattrforspanspanclasscodesnippetstringClaimValuespanspanClaim值:spanclasscodesnippettagspanclasscodesnippetnamelabelspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm11spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameinputspanspanclasscodesnippetattrnamespanspanclasscodesnippetstringClaimValuespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringformcontrolspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringmb3rowalignitemscenterspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm11offsetsm1spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanclasscodesnippetattrtypespanspanclasscodesnippetstringsubmitspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnprimaryspanspan保存spanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanclasscodesnippetattraspactionspanspanclasscodesnippetstringIndexspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnsecondaryspanspanspanspanclasscodesnippetouter返回spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameformspanspanspan接下来,更新Index。cshtml并添加新增按钮和删除按钮spanclasscodesnippetoutermodelIEnumerableSystem。Security。Claims。Claimspanspanclasscodesnippetouter{spanspanclasscodesnippetouterViewData〔spanclasscodesnippetstringTitlespan〕spanclasscodesnippetstringClaimsspan;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetkeywordclassspanspanspanclasscodesnippetstringcontainerspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringrowmb3spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameaspanspanclasscodesnippetattraspactionspanspanclasscodesnippetstringCreatespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnprimaryspanspan新增spanclasscodesnippettagspanclasscodesnippetnameaspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippetkeywordclassspanspanspanclasscodesnippetstringrowmb3spanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsmspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringtabletableborderedalignmiddlespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan名称spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan颁发机构spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan类型spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan值spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspan删除spanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterforeach(varclaiminModel。OrderBy(xx。Type))spanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Subject?。Namespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Issuerspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Typespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。ValuespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameformspanspanclasscodesnippetattraspactionspanspanclasscodesnippetstringDeletespanspanclasscodesnippetattrmethodspanspanclasscodesnippetstringpostspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameinputspanspanclasscodesnippetattrtypespanspanclasscodesnippetstringhiddenspanspanclasscodesnippetattrnamespanspanclasscodesnippetstringclaimValuesspanspanclasscodesnippetattrvaluespanspanclasscodesnippetstringclaim?。Type;claim?。Value;claim?。Issuerspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanclasscodesnippetattrtypespanspanclasscodesnippetstringsubmitspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnsmbtndangerspanspanspanspanclasscodesnippetouter删除spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameformspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippetregexppspanspan最后我们在ClaimsController添加新增和删除方法,与此同时我们将UserManager类通过构造函数依赖注入进去spanclasscodesnippetouterspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordclassspanspanclasscodesnippettitleClaimsControllerspan:spanclasscodesnippettitleControllerspanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordprivatespanUserManageruserManager;spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippettitleClaimsControllerspan(spanclasscodesnippetparamsUserManageruserManagerspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouteruserManageruserManager;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanIActionResultspanclasscodesnippettitleIndexspan(spanclasscodesnippetparamsspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView(User。Claims);spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanIActionResultspanclasscodesnippettitleCreatespan(spanclasscodesnippetparamsspan)spanView();spanspanclasscodesnippetouter〔spanclasscodesnippetmetaHttpPostspan〕spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordasyncspanTaskIActionResultspanclasscodesnippettitleCreatespan(spanclasscodesnippetparamsspanclasscodesnippetkeywordstringspanclaimType,spanclasscodesnippetkeywordstringspanclaimValuespan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordvarspanuserspanclasscodesnippetkeywordawaitspanuserManager。GetUserAsync(HttpContext。User);spanspanclasscodesnippetouterClaimclaimspanclasscodesnippetkeywordnewspanClaim(claimType,claimValue,ClaimValueTypes。String);spanspanclasscodesnippetouterIdentityResultresultspanclasscodesnippetkeywordawaitspanuserManager。AddClaimAsync(user??spanclasscodesnippetkeywordnewspanAppUser(),claim);spanspanclasscodesnippetouterspanclasscodesnippetkeywordifspan(result。Succeeded)spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanRedirectToAction(spanclasscodesnippetstringIndexspan);spanspanclasscodesnippetouterspanclasscodesnippetkeywordelsespanspanspanclasscodesnippetouterErrors(result);spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView();spanspanclasscodesnippetouter}spanspanclasscodesnippetouter〔spanclasscodesnippetmetaHttpPostspan〕spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordasyncspanTaskIActionResultspanclasscodesnippettitleDeletespan(spanclasscodesnippetparamsspanclasscodesnippetkeywordstringspanclaimValuesspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordvarspanuserspanclasscodesnippetkeywordawaitspanuserManager。GetUserAsync(HttpContext。User);spanspanclasscodesnippetouterspanclasscodesnippetkeywordstringspan〔〕claimValuesArrayclaimValues。Split(spanclasscodesnippetstring;span);spanspanclasscodesnippetouterspanclasscodesnippetkeywordstringspanclaimTypeclaimValuesArray〔spanclasscodesnippetnumber0span〕,claimValueclaimValuesArray〔spanclasscodesnippetnumber1span〕,claimIssuerclaimValuesArray〔spanclasscodesnippetnumber2span〕;spanspanclasscodesnippetouterClaim?claimUser。Claims。Where(xx。TypeclaimTypex。ValueclaimValuex。IssuerclaimIssuer)。FirstOrDefault();spanspanclasscodesnippetouterIdentityResultresultspanclasscodesnippetkeywordawaitspanuserManager。RemoveClaimAsync(user??spanclasscodesnippetkeywordnewspanAppUser(),claim);spanspanclasscodesnippetouterspanclasscodesnippetkeywordifspan(result。Succeeded)spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanRedirectToAction(spanclasscodesnippetstringIndexspan);spanspanclasscodesnippetouterspanclasscodesnippetkeywordelsespanspanspanclasscodesnippetouterErrors(result);spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView(spanclasscodesnippetstringIndexspan);spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordvoidspanspanclasscodesnippettitleErrorsspan(spanclasscodesnippetparamsIdentityResultresultspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordforeachspan(IdentityErrorerrorspanclasscodesnippetkeywordinspanresult。Errors)spanspanclasscodesnippetouterModelState。AddModelError(spanclasscodesnippetstringspan,error。Description);spanspanclasscodesnippetouter}spanspanclasscodesnippetouter}span新增方法
首先我们从userManager。GetUserAsync()获取当前用户,接着我们添加Claim对象,最后我们将Claim对象添加到用户中。userManager。AddClaimAsync()可以为用户创建claim删除方法删除方法获取Claim值,切割字符串之后我们获取到了claimtype,claimvalueandclaimissuer对应的值,使用Linq获取选择的ClaimspanclasscodesnippetouterClaimclaimUser。Claims。Where(spanclasscodesnippetfunctionspanclasscodesnippetparamsxspanspanx。TypeclaimTypex。ValueclaimValuex。IssuerclaimIssuer)。FirstOrDefault();span通过调用userManager。RemoveClaimAsync()将用户Claim删除2、测试
测试这个特性,运行应用程序并且使用tom用户进行登录,进入https:localhost:7296Claims页面,点击新增按钮:
我们在新增页面输入下面值:
每次创建完一个Claim,我们都需要重新登录,为了看到新的Claim我们必须重新登录一次:
现在我们通过点击删除按钮删除刚才创建的claim。每次删除完成之后我们需要重新登录一下,才能看到最新的数据状态
总结这一节我们主要介绍什么是Claims,针对当前用户如何创建和删除Claims,以及在表格内显示用户当前登录用户所有Claims。下一节我们将介绍如何使用Claims创建相应的策略进行用户认证,
源代码地址:
https:github。combingbingguiAsp。NetCoreSkilltreemasterAspNetCore。IdentityIdentity