DDD实战11 在项目中使用JWT的token 进行授权验证
步骤:
1.首先要在webapi的管道中 使用认证(Authentication)
2.要在webapi的服务中注册验证条件
代码如下:
namespace Dealer.WebApi {public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){//2 注册验证条件 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{//是否验证颁发者ValidateIssuer = true,//是否验证被颁发者ValidateAudience = true,//是否验证过期时间ValidateLifetime = true,//是否密钥ValidateIssuerSigningKey = true,ValidIssuer = "颁发者",ValidAudience = "受众",IssuerSigningKey = JwtSecurityKey.Create("imyourfather_iwanttobegreat")};});services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}AppSetting.SetAppSetting(Configuration.GetSection("ConnectString"));//1.使得webapi支持验证第一步,在管道中注册使用验证 app.UseAuthentication();app.UseMvc();}} }
3 为webapi控制器中的方法 设置授权 或者 允许匿名
上图所示 为授权给角色为普通用户
上图为允许匿名
步骤4 客户端请求需要授权的地址时在请求头中带上token 下面为一段带token请求的单元测试
[TestMethod]public void AddDealerForAuthentication(){hc = new HttpClient();UserLoginDto userLoginDto = new UserLoginDto();userLoginDto.Telephone = "1111111";userLoginDto.Password = "111111";string request = JsonConvert.SerializeObject(userLoginDto);HttpContent httpContent = new StringContent(request);httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");var response = hc.PostAsync("http://localhost:56532/api/Dealer/UserLogin/", httpContent).Result;var responseValue = response.Content.ReadAsStringAsync().Result;var responseObj = JsonConvert.DeserializeObject<ResultEntity<UserLoginResultDto>>(responseValue);//从返回的数据中取出 tokenvar token = responseObj.Data.Token;AddDealerDto addDealerDto = new AddDealerDto();addDealerDto.Name = "谢尔顿";addDealerDto.Tel = "13212778804";addDealerDto.Parentid = Guid.Parse("f060477a-14a8-4ef5-b4b1-1fce2f844c9e");addDealerDto.EleMoney = 100;addDealerDto.ContactNames = new List<string>() { "谢尔顿" };addDealerDto.ContactProvinces = new List<string>() { "四川" };addDealerDto.ContactCities = new List<string>() { "成都" };addDealerDto.ContactStreets = new List<string>() { "熊猫大道" };addDealerDto.ContactTels = new List<string>() { "028222223" };addDealerDto.ContactZeros = new List<string>() { "熊猫区" };addDealerDto.IsDefaultContact = new List<int>() { 1 };HttpClient client = new HttpClient();//请求的时候 在请求头中 带上授权信息 注意下面这行代码 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);request = JsonConvert.SerializeObject(addDealerDto);httpContent = new StringContent(request);httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");response = client.PostAsync("http://localhost:56532/api/Dealer/AddDealer/", httpContent).Result;responseValue = response.Content.ReadAsStringAsync().Result;}
步骤5 如果要在请求中获取token中的某项数据 可以参考一下代码:4
namespace Util.Bearer {//为了要使用MVC Controller 要安装 Microsoft.AspNetCore.Mvc.Core包public class BearerUserInfoController :Controller{public string GetUserName(){var principal = HttpContext.User as ClaimsPrincipal;if (principal!=null){foreach (var claim in principal.Claims){if (claim.Subject!=null){var sunjectClaims = claim.Subject.Claims as List<Claim>;return sunjectClaims[0].Value;}}}return null;}} }
上面为在util项目中创建一个控制器类 继承了这个控制器类的 控制器可以使用其中的方法 获取token中的数据 例如以下:
转载于:https://www.cnblogs.com/wholeworld/p/9410461.html
DDD实战11 在项目中使用JWT的token 进行授权验证相关推荐
- 【SpringBoot】44、SpringBoot中整合JWT实现Token验证(整合篇)
什么是JWT? Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519),该 token 被设计为紧凑且安全的,特别适用于分 ...
- SpringSecurity - 整合JWT使用 Token 认证授权
一.SpringSecurity 前面讲解了SpringSecurity的动态认证和动态权限角色,我们都知道在现在大多都是微服务前后端分离的模式开发,前面讲的还是基于Session的,本篇我们整合JW ...
- DDD 实战 (11):冲刺 1 代码 TDD 实现之道
接上篇<DDD 实战 (10):冲刺 1 战术之服务设计(下)及技术决策>后,我们接下来的重点,就是要展示真正的代码实现了.在本篇中,我将围绕 TDD(Test-driven develo ...
- 实战派 | Java项目中玩转Redis6.0客户端缓存
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过tel ...
- 实战:vue项目中导入swiper插件
版本选择 swiper是个常用的插件,现在已经迭代到了第四代:swiper4. 常用的版本是swiper3和swiper4,我选择的是swiper3. 安装 安装swiper3的最新版本3.4.2: ...
- sau交流学习社区--songEagle开发系列:Vue.js + Koa.js项目中使用JWT认证
一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的 ...
- VB的一些项目中常用的通用方法-一般用于验证类
1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...
- ASP.NET Core WebAPI中使用JWT Bearer认证和授权
为什么是 JWT Bearer ASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer, ...
- JWT生成token与中间件验证
一.安装JWT扩展 建议使用composer安装 方便 快捷,切到项目目录下运行以下命令 composer require firebase/php-jwt 二.使用 生成token ,这里是把用户u ...
最新文章
- 微软算法100题11 求二叉树中两节点之间的最大距离
- 从洗牌算法谈起--Python的random.shuffle函数实现原理
- hash 值重复_“重复”相关的问题
- Thrift使用指南
- 这2个单片机编程的思想,请你掌握。
- jdk switch 枚举_JDK 12开关表达式遇到意外的枚举值
- c语言备忘录算法矩阵链乘,矩阵链乘法(备忘录法)
- OneAlert:国内首家 SaaS 模式的云告警平台
- dbcc dbreindex server sql_SQL Server数据库碎片整理
- centos6.6编译安装lnmp系列之nginx
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- 基于Pytorch实现的声音分类
- 如何培养创造性思维能力
- java 雷达反射面积_请问:如何使用基本反射率雷达图中的dBZ值判断天气情况?比如多云、雷雨、晴等。谢谢!...
- 计算机操作系统学习笔记 第一章、操作系统概论
- 【Linux分组权限】linux下创建用户分组及设置分组权限
- ai智能写作软件哪个好-ai智能写作免费
- 文本预处理学习(2)
- 倭黑猩猩优化器(Bonobo Optimizer, BO)
- 59岁院士履新!怀进鹏出任教育部党组书记,这位计算机专家曾任北航校长
热门文章
- 为什么超凡先锋显示未选择服务器,超凡先锋画质不太流畅怎么弄 游戏画质设置方法介绍_超凡先锋...
- 如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介
- ad设置塞孔_PCB设计中,如何设置跳线
- 养生分享:九大神奇降压食物
- Java基础练习题 1-50
- 求心理阴影的面积 (题目出自:陈越-浙江大学)
- 国之重器 望穿秋水——北邮老师廖建新介绍
- HDFS千万级别文件数/PB规模量级的数据迁移实战总结
- Vmware WorkStation的三种联网方式
- VS2013打开ASP.NET网站管理工具