C# 为asp.net core 3.0中的角色SecurityStamp创建ClaimSideEntityOptions
我需要检查基于JWT的.net核心身份验证中的C# 为asp.net core 3.0中的角色SecurityStamp创建ClaimSideEntityOptions,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我需要检查基于JWT的.net核心身份验证中的RoleSecurityStamp 我已填充令牌声明,如下所示: public IEnumerable<Claim> CustomClaims(LoginResult user) { var securityStampClaimType = new ClaimsIdentityOptions().SecurityStampClaimType; var rolesecurityStampClaimTy
RoleSecurityStamp
我已填充令牌声明,如下所示:
public IEnumerable<Claim> CustomClaims(LoginResult user)
{
var securityStampClaimType = new ClaimsIdentityOptions().SecurityStampClaimType;
var rolesecurityStampClaimType = new ClaimsIdentityOptions().SecurityStampClaimType;
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name,user.Username),
new Claim(ClaimTypes.NameIdentifier,user.Id.ToString()),
new Claim(securityStampClaimType,user.UserSecurityStamp.ToString()),
new Claim(rolesecurityStampClaimType,user.RoleSecurityStamp.ToString())
};
return claims;
}
我使用以下代码找到了UserSecurityStamp:
var securityStamp=Guid.Parse(claimsIdentity.FindFirstValue(new ClaimsIdentityOptions().SecurityStampClaimType))代码>
但是我找不到角色安全戳
我如何找到角色安全戳并检查它???您正在为您的UserSecurityStamp和RoleSecurityStamp提供相同的声明类型,即
ClaimSideEntityOptions().SecurityStampClaimType
基本上默认为:“AspNet.Identity.SecurityStamp”
因此,为了能够找到您的RoleSecurityStamp,您需要为它指定一个不同的声明类型,然后改为查找该类型的FirstValue,或者您可以尝试FindAll(),它将返回一个包含UserSecurityStamp和RoleSecurityStamp的列表
编辑:
相同的索赔类型示例:
var securityStampsList = claimsIdentity.FindAll(new ClaimsIdentityOptions().SecurityStampClaimType).ToList();
var securityStamp = Guid.Parse(securityStampsList[0].Value);
var roleSecurityStamp = Guid.Parse(securityStampsList[1].Value);
我无法接受你的回答。你能给我举个例子吗?
var securityStampsList = claimsIdentity.FindAll(new ClaimsIdentityOptions().SecurityStampClaimType).ToList();
var securityStamp = Guid.Parse(securityStampsList[0].Value);
var roleSecurityStamp = Guid.Parse(securityStampsList[1].Value);