asp.net core中的OAth2.0 (JWT的简单使用)

  • 理论部分您想了解的话可以百度一下,这里就不拖泥带水了
  • net core 一向以简单、简洁、高效为主
  • 希望您不要过度封装 😡
  • 缺包的话请按照vs提示安装

StartUp类

  public void ConfigureServices(IServiceCollection services)
  {
      // 认证服务注册
      services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.Events = new JwtBearerEvents
                    {
                        OnMessageReceived = context =>
                        {
                            //context.Token = context.Request.QueryString["access_token"];
                            context.Token = context.Request.Headers["access_token"];
                            return Task.CompletedTask;
                        }
                    };
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        //不明白这些属性的话翻译一下
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,
                        ValidIssuer = Configuration["JwtOptions:Issuer"], //http://example.com
                        ValidAudience = Configuration["JwtOptions:Audience"],//http://example.com
                        RequireExpirationTime = true,
                        //一段机密
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtOptions:Secret"]))
                    };
                });
  }
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {        
       //中间件
      //先认证、再授权(我得先知道你是谁才能给你对应的权限。)
      app.UseAuthentication();//认证

      app.UseAuthorization();//授权
 }

生成令牌

            // _option 是配置文件读取的 
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_options.Secret));
            var crenentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
            var claims = new Claim[]
            {
                //添加自定义信息
                new Claim(ClaimTypes.Role,"user"),//角色
                new Claim(ClaimTypes.Name,"张三"),
                new Claim("id","自定义的id")
            };
            var jwtSecurityToken = new JwtSecurityToken(
                issuer: _options.Issuer,
                audience: _options.Audience,
                claims,
                notBefore: DateTime.Now,//生效时间
                expires: DateTime.Now.AddSeconds(_options.ExpiresIn),//过期时间
                signingCredentials: crenentials);
            //token就是你的令牌
            var token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);

在控制器中使用。请 不 要 过 度 封 装 !

  • 实践是检验真理的唯一标准
  • 多多尝试会有意外的收获
    [Route("api/[controller]")]
    [ApiController]
    //[Authorize]
    [Authorize(Roles ="user")]
    public class ValuesController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            return Ok();
        }
        [AllowAnonymous]
        [HttpGet("test")]
        public IActionResult Get1()
        {
            return Ok();
        }
    }

客户端调用示例

如果您是请求头的方式校验的话

var access_token = '你的access_token'
var headers = {
    Authorization:`Bearer ${access_token}`//注意这个空格哟
}
//你的ajax操作
//...

.net core 加油!希望我们永远不会秃头😀

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容