如何使用 .netcore 中的 SecurityTokenDescriptor 将孩子添加到 jwt 标头

fly*_*pig 7 c# jwt .net-core asp.net-core-webapi asp.net-core-2.0

我正在使用 .netcore 2 和 JwtSecurityToken 来生成令牌

            var jwtSecurityToken = new JwtSecurityToken(
                issuer: issuer,
                audience:issuer,
                claims: claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
            );

            jwtSecurityToken.Header.Add("kid", requestAPIKey);
Run Code Online (Sandbox Code Playgroud)

现在因为我使用了 Idenity,所以我从 JwtSecurityToken 切换到了安全令牌描述符,我的代码是:

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(claims),
                Expires = DateTime.Now.AddDays(1),
                SigningCredentials = creds
            };
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在使用安全令牌描述符时将 Kid 添加到我的令牌标头?在 JwtSecurityToken 中,我使用以下代码添加它:

jwtSecurityToken.Header.Add("kid", requestAPIKey);
Run Code Online (Sandbox Code Playgroud)

如何使用 SecurityTokenDescriptor 做同样的事情?谢谢!

小智 9

这是我使用过的代码片段:

var tokenHandler = new JwtSecurityTokenHandler(); 
        var key = Encoding.UTF8.GetBytes("Secret"); 
        var tokenDescriptor = new SecurityTokenDescriptor 
        { 
            Subject = new ClaimsIdentity(new Claim[] 
            { 
                new Claim(ClaimTypes.Name, UserId), 
                new Claim(name, value), 
                new Claim(name, value)
            }), 

            Expires = DateTime.UtcNow.AddMinutes(5), 
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) 

        }; 

        var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor); 
        token.Header.Add("kid", ""); 

        token.Payload.Remove("iss"); 
        token.Payload.Add("iss", "your issuer"); 

        var tokenString = tokenHandler.WriteToken(token);
Run Code Online (Sandbox Code Playgroud)


小智 2

尝试这个:

var securityKey = new SymmetricSecurityKey(Encoding.Default.GetBytes(secretKey));
securityKey.KeyId = "KID_HERE";
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);

var jwtSecurityToken = new JwtSecurityToken(
                issuer: issuer,
                audience:issuer,
                claims: claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: signingCredentials 
            );

jwtSecurityToken.Header.Add("kid", requestAPIKey);
Run Code Online (Sandbox Code Playgroud)