.net 6 使用JWE

JWE 简介

在前后端分离的项目中,我们经常使用JWT作为无状态身份认证的方式。然而,JWT中的payload是明文的,这意味着有可能泄露用户的信息。为了保护用户信息不被泄露,一些项目会对JWT的payload进行了加密,需要自己写一些加密的代码。实际上,还有一种更加简单的方法,那就是使用JWE, JWE 是对整个Token进行加密的,相对来说更加安全。

net中使用JWE

只要在JWT的基础之上稍作修改即可 代码下载

//产生Token
 [HttpPost]
    public IActionResult Login(string account, string pwd)
    {
        var claims = new[]
        {
            new Claim(ClaimTypes.Name, account),
            new Claim(ClaimTypes.Role, "a"),
            new Claim(ClaimTypes.Role, "b"),
            new Claim("test", "123")
        };
        var signingSecretBytes = Encoding.UTF8.GetBytes(Constant.SigningSecret);
        var signingKey = new SymmetricSecurityKey(signingSecretBytes);
        var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
        var secret = Encoding.ASCII.GetBytes(Constant.Secret);
        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Issuer = Constant.Issuer,
            Audience = Constant.Audiance,
            Expires = DateTime.Now.AddDays(1),
            Subject = new ClaimsIdentity(claims),
            SigningCredentials = signingCredentials,
            EncryptingCredentials = new EncryptingCredentials(new SymmetricSecurityKey(secret),
                SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256) //JWE
        };
        var tokenHandler = new JwtSecurityTokenHandler();
        var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor);
        var result = tokenHandler.WriteToken(token);
        return Ok(result);
    }
//验证
services.AddAuthentication().AddJwtBearer(Constant.JwtBearerAuthenticationScheme, options =>
        {
            var secretBytes = Encoding.UTF8.GetBytes(Constant.SigningSecret);
            var key = new SymmetricSecurityKey(secretBytes);

            options.TokenValidationParameters = new TokenValidationParameters
            {
                ClockSkew = TimeSpan.Zero,
                ValidateIssuer = true,
                ValidIssuer = Constant.Issuer,
                ValidateAudience = false,
                IssuerSigningKey = key,
                TokenDecryptionKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Constant.Secret)) //JWE
            };
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值