步骤:

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 进行授权验证相关推荐

  1. 【SpringBoot】44、SpringBoot中整合JWT实现Token验证(整合篇)

    什么是JWT? Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519),该 token 被设计为紧凑且安全的,特别适用于分 ...

  2. SpringSecurity - 整合JWT使用 Token 认证授权

    一.SpringSecurity 前面讲解了SpringSecurity的动态认证和动态权限角色,我们都知道在现在大多都是微服务前后端分离的模式开发,前面讲的还是基于Session的,本篇我们整合JW ...

  3. DDD 实战 (11):冲刺 1 代码 TDD 实现之道

    接上篇<DDD 实战 (10):冲刺 1 战术之服务设计(下)及技术决策>后,我们接下来的重点,就是要展示真正的代码实现了.在本篇中,我将围绕 TDD(Test-driven develo ...

  4. 实战派 | Java项目中玩转Redis6.0客户端缓存

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过tel ...

  5. 实战:vue项目中导入swiper插件

    版本选择 swiper是个常用的插件,现在已经迭代到了第四代:swiper4. 常用的版本是swiper3和swiper4,我选择的是swiper3. 安装 安装swiper3的最新版本3.4.2: ...

  6. sau交流学习社区--songEagle开发系列:Vue.js + Koa.js项目中使用JWT认证

    一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的 ...

  7. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...

  8. ASP.NET Core WebAPI中使用JWT Bearer认证和授权

    为什么是 JWT Bearer ASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer,  ...

  9. JWT生成token与中间件验证

    一.安装JWT扩展 建议使用composer安装 方便 快捷,切到项目目录下运行以下命令 composer require firebase/php-jwt 二.使用 生成token ,这里是把用户u ...

最新文章

  1. 微软算法100题11 求二叉树中两节点之间的最大距离
  2. 从洗牌算法谈起--Python的random.shuffle函数实现原理
  3. hash 值重复_“重复”相关的问题
  4. Thrift使用指南
  5. 这2个单片机编程的思想,请你掌握。
  6. jdk switch 枚举_JDK 12开关表达式遇到意外的枚举值
  7. c语言备忘录算法矩阵链乘,矩阵链乘法(备忘录法)
  8. OneAlert:国内首家 SaaS 模式的云告警平台
  9. dbcc dbreindex server sql_SQL Server数据库碎片整理
  10. centos6.6编译安装lnmp系列之nginx
  11. iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
  12. 基于Pytorch实现的声音分类
  13. 如何培养创造性思维能力
  14. java 雷达反射面积_请问:如何使用基本反射率雷达图中的dBZ值判断天气情况?比如多云、雷雨、晴等。谢谢!...
  15. 计算机操作系统学习笔记 第一章、操作系统概论
  16. 【Linux分组权限】linux下创建用户分组及设置分组权限
  17. ai智能写作软件哪个好-ai智能写作免费
  18. 文本预处理学习(2)
  19. 倭黑猩猩优化器(Bonobo Optimizer, BO)
  20. 59岁院士履新!怀进鹏出任教育部党组书记,这位计算机专家曾任北航校长

热门文章

  1. 为什么超凡先锋显示未选择服务器,超凡先锋画质不太流畅怎么弄 游戏画质设置方法介绍_超凡先锋...
  2. 如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介
  3. ad设置塞孔_PCB设计中,如何设置跳线
  4. 养生分享:九大神奇降压食物
  5. Java基础练习题 1-50
  6. 求心理阴影的面积 (题目出自:陈越-浙江大学)
  7. 国之重器 望穿秋水——北邮老师廖建新介绍
  8. HDFS千万级别文件数/PB规模量级的数据迁移实战总结
  9. Vmware WorkStation的三种联网方式
  10. VS2013打开ASP.NET网站管理工具