当前位置 主页 > 网站技术 > 代码类 >

    ASP.Net Core3.0中使用JWT认证的实现(4)

    栏目:代码类 时间:2020-01-13 12:07

    准备好测试试用的APi,打上Authorize特性,表明需要授权!

    [ApiController]
      [Route("[controller]")]
      [Authorize]
      public class WeatherForecastController : ControllerBase
      {
        private static readonly string[] Summaries = new[]
        {
          "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };
    
        private readonly ILogger<WeatherForecastController> _logger;
    
        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
          _logger = logger;
        }
    
        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
          var rng = new Random();
          return Enumerable.Range(1, 5).Select(index => new WeatherForecast
          {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
          })
          .ToArray();
        }
      }

    支持我们可以测试验证了,我们可以使用postman来进行http请求,先启动http服务,获取url,先测试一个访问需要授权的接口,但没有携带token信息,返回是401,表示未授权

    下面我们先通过认证接口,获取token,居然报错,查询了下,发现HS256算法的秘钥长度最新为128位,转换成字符至少16字符,之前设置的秘钥是123456,所以导致异常。

    System.ArgumentOutOfRangeException: IDX10603: Decryption failed. Keys tried: 'HS256'. Exceptions caught: '128'. token: '48' (Parameter 'KeySize') at

    更新秘钥

     "tokenManagement": {
        "secret": "123456123456123456",
        "issuer": "webapi.cn",
        "audience": "WebApi",
        "accessExpiration": 30,
        "refreshExpiration": 60
      }

    重新发起请求,成功获取token

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJleHAiOjE1Nzg2NDUyMDMsImlzcyI6IndlYmFwaS5jbiIsImF1ZCI6IldlYkFwaSJ9.AehD8WTAnEtklof2OJsvg0U4_o8_SjdxmwUjzAiuI-o

    把token带到之前请求的api中,重新测试,成功获取数据

    总结

    基于token的认证方式,让我们构建分布式/松耦合的系统更加容易。任何地方生成的token,只有拥有相同秘钥,就可以再任何地方进行签名校验。

    当然要用好jwt认证方式,还有其他安全细节需要处理,比如palyload中不能存放敏感信息,使用https的加密传输方式等等,可以根据业务实际需要再进一步安全加固!

    同时我们也发现使用token,就可以摆脱cookie的限制,所以JWT是移动app开发的首选!

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持IIS7站长之家。