Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为asp.net core 3.0中的角色SecurityStamp创建ClaimSideEntityOptions_C#_Asp.net_Asp.net Core - Fatal编程技术网

C# 为asp.net core 3.0中的角色SecurityStamp创建ClaimSideEntityOptions

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

我需要检查基于JWT的.net核心身份验证中的
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);