asp.net core webapi实现jwt授权认证
2018-06-12 19:33
1761 查看
Asp.net core WebApi实现JWT授权。首先在Start. cs启动类中,配置服务,代码如下:
在这里,我创建了一个OAuthController控制器,新建一个Token action,用来获取token,具体代码如下:
然后,我们再ValuesController中, 添加 [Authorize]特性,要求授权终端才能访问。
接下来,我们通过JS实现领取的获取及数据的获取,具体代码如下:
当客户请求受保护的资源时,通过HTTP header携带上token。这里需要注意的是,请求头必须是Authorization,值是Bearer空格加上token。这样访问资源时,通过HTTP header携带令牌信息,服务端,通过认证中间件,完成授权认证过程。在上面的示例中,通过向全局Ajax注册事件,将token写入请求Header。、
//配置授权 services.AddAuthentication(options => { options.DefaultAuthenticateScheme = "JwtBearer"; options.DefaultChallengeScheme = "JwtBearer"; }).AddJwtBearer("JwtBearer", (jwtBearerOptions) => { jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(Configuration["JwtSecurityKey"])),//秘钥 ValidateIssuer = true, ValidIssuer = Configuration["issuer"], ValidateAudience = true, ValidAudience = Configuration["audience"], ValidateLifetime = true, ClockSkew = TimeSpan.FromMinutes(5) }; });
在这里,我创建了一个OAuthController控制器,新建一个Token action,用来获取token,具体代码如下:
/// <summary> /// /// </summary> /// <returns></returns> [HttpPost] public string Token(string user, string password) { //验证用户名和密码 var claims = new Claim[] { new Claim(ClaimTypes.Name, "John"), new Claim(JwtRegisteredClaimNames.Email, "john.doe@blinkingcaret.com") }; var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(Configuration["JwtSecurityKey"])); var token = new JwtSecurityToken( issuer: Configuration["issuer"], audience: Configuration["audience"], claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddDays(28), signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)); string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);//生成Token return jwtToken; }
然后,我们再ValuesController中, 添加 [Authorize]特性,要求授权终端才能访问。
接下来,我们通过JS实现领取的获取及数据的获取,具体代码如下:
<script type="text/javascript"> //获取令牌 $.post("/oauth/token", $.param({ user: "lichaoqiang", password: "fdsfds" })).done(function (token) { localStorage.setItem("token", token); }); //设置HTTP头 $.ajaxSetup({ beforeSend: function (xhr) { if (localStorage.getItem("token") !== null) { xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem("token")); } } }); $.getJSON("/api/values", function (data) { console.log(data); }); </script>
当客户请求受保护的资源时,通过HTTP header携带上token。这里需要注意的是,请求头必须是Authorization,值是Bearer空格加上token。这样访问资源时,通过HTTP header携带令牌信息,服务端,通过认证中间件,完成授权认证过程。在上面的示例中,通过向全局Ajax注册事件,将token写入请求Header。、
相关文章推荐
- 【译】使用Jwt身份认证保护 Asp.Net Core Web Api
- 【译】使用Jwt身份认证保护 Asp.Net Core Web Api
- 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
- ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
- 用JWT来保护我们的ASP.NET Core Web API
- asp.net core WebAPI实现CRUD
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
- 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」
- ASP.NET Core2利用Jwt技术在服务端实现对客户端的身份认证
- ASP.NET Core的身份认证框架IdentityServer4--(2)API跟WEB端配置
- 用JWT来保护我们的ASP.NET Core Web API
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
- ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
- ASP.NET Core Web API 开发-RESTful API实现
- ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
- asp.net core WebAPI实现CRUD
- ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线