tnblog
首页
视频
资源
登录

.net core 3.1 Ocelot 与 Identity Server4 鉴权

8060人阅读 2020/12/11 11:54 总访问:3470312 评论:0 收藏:0 手机
分类: Ids4

目录与前言


目录链接:.net core Ocelot 简单网关集群熔断架构整合目录


Unsplashed background img 1

.net core 3.1 Identity Server4 (ClientCredentials模式)

 通过参考上面的连接达成 Ocelot 与 IdentityServer4 的 ClientCredentials 进行合并,实现鉴权功能


添加 AiDaSi.OcDemo.Authenzation 项目到解决方案中



1. AiDaSi.OcDemo.Authenzation 项目结构如下图所示



对 AiDaSi.OcDemo.ServiceInstance API项目添加鉴权


1.添加 IdentityServer4.AccessTokenValidation 依赖



nuget

2.修改 WeatherForecastController.cs 添加 Authorize




3.在 Startup.cs 添加鉴权


  1.  public void ConfigureServices(IServiceCollection services)
  2.  {
  3.      services.AddControllers();
  4.      services.AddControllersWithViews(option =>
  5.      {
  6.          option.ReturnHttpNotAcceptable = true;
  7.          //option.EnableEndpointRouting = false;
  8.      }).AddXmlDataContractSerializerFormatters();
  9.      services
  10.          .AddAuthentication("Bearer")
  11.          .AddJwtBearer("Bearer", config =>
  12.          {
  13.              config.Authority = "http://localhost:7200";
  14.              //确定使用哪些资源
  15.              config.Audience = "ApiOne";
  16.              config.RequireHttpsMetadata = false;
  17.              //关键
  18.              config.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
  19.              {
  20.                  ValidateIssuer = false,
  21.                  ValidateAudience = false
  22.              };
  23.          });
  24.  }
  25.  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  26.  {
  27.      if (env.IsDevelopment())
  28.      {
  29.          app.UseDeveloperExceptionPage();
  30.      }
  31.      app.UseHttpsRedirection();
  32.      app.UseRouting();
  33.      app.UseAuthentication();
  34.      app.UseAuthorization();
  35.      app.UseEndpoints(endpoints =>
  36.      {
  37.          endpoints.MapControllers();
  38.      });
  39.      //只执行一次
  40.      this.Configuration.ConsulRegist();
  41.  }


运行测试API项目添加鉴权是否成功


  1. 启动2个项目

  2. 获取 Access Token



  3.用 Access Token 尝试访问 WeatherForecast 接口




Ocelot 与 ID4 的鉴权


1. 打开 Ocelot  项目,修改配置文件

  1. {
  2.   "ReRoutes": [
  3.     {
  4.       "UpstreamPathTemplate""/consul/{url}",
  5.       "UpstreamHttpMethod": [ "Get""Post" ],
  6.       "DownstreamPathTemplate""/api/{url}",
  7.       "DownstreamScheme""http",
  8.       "ServiceName""AiDaSiService",
  9.       "LoadBalancerOptions": {
  10.         "Type""RoundRobin"
  11.       },
  12.       "UseServiceDiscovery"true,
  13.       //鉴权
  14.       "AuthenticationOptions": {
  15.         "AuthenticationProviderKey""Bearer",
  16.         "AllowedScopes": []
  17.       }
  18.     }
  19.   ],
  20.   "GlobalConfiguration": {
  21.     "BaseUrl""http://127.0.0.1:6299",
  22.     "ServiceDiscoveryProvider": {
  23.       "Host""localhost",
  24.       "Port"8500,
  25.       "Type""Consul"
  26.     }
  27.   }
  28. }

2.修改 Startup.cs 

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3.     #region Ids4
  4.     //IdentityModelEventSource.ShowPII = true;
  5.     services
  6.         .AddAuthentication("Bearer")
  7.         .AddJwtBearer("Bearer", config =>
  8.         {
  9.             config.Authority = "http://localhost:7200";
  10.             //确定使用哪些资源
  11.             config.Audience = "ApiOne";
  12.             config.RequireHttpsMetadata = false;
  13.             //取消验证用户以及验证角色
  14.             config.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
  15.             {
  16.                 ValidateIssuer = false,
  17.                 ValidateAudience = false
  18.             };
  19.         });
  20.     #endregion
  21.     //services.AddControllers();
  22.     services.AddOcelot()
  23.         //使用 counsulconfiguration.json 并添加 Ocelot.Provider.Consul 包
  24.         .AddConsul()
  25.         //添加缓存
  26.         .AddCacheManager(x=> {
  27.             x.WithDictionaryHandle(); //默认字典存储
  28.         })
  29.         //使用 counsulpollyconfiguration.json 并添加 Ocelot.Provider.Polly 包
  30.         .AddPolly()
  31.         ;
  32. }
  33. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  34. {
  35.     app.UseOcelot();
  36.     app.UseAuthorization();
  37. }


3.启动 Consul  

  1. .\consul.exe agent -dev

测试鉴权功能


1.启动网关,访问相关路径







欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

分布式服务架构微服务架构概念的区别联系

分布式:分散压力。微服务:分散能力。当下理解分布式:不同模块部署在不同服务器上作用:分布式解决网站高并发带来问题集...

jsController中分割字符串的方法

js: varstr=OpenRule; varstrs=newArray(); strs=str.split(","); for(vari=0;i<strs.length;i++){ $(&q...

Service-stack.redis配置连接池读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List<string>writes=newList<string>(); writes.Add("123456a...

CSS相对定位绝对定位

一般相对定位和绝对定位可以配合起来使用 例如实现如下的效果 只需要在外层div设置为相对定位,在内部设置为绝对定位就...

C委托事件

1.什么是委托?  委托在C#里的意义和在现实里差不多,从字面意思理解即可。举个例子:领导委托小张去传递个文件,这就是...

asp.net core2.0 依赖注入 AddTransientAddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

Vue.js+Layer实现表格数据绑定更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

下划线、换行、回车、空格ASCII码值对照表

下划线,ASCII码95换行 , ASCII码10回车 , ASCII码13空格 , ASCII码32ASCII码表:Bin(二进制)Oct(八进制)Dec(十进制)Hex(...

数据读取器指定的"xx"不兼容。某个类型为"xx"的成员在同名的数据读取器中没有对应的列

报错的地方var result= _db.Database.SqlQuery<SMachine>(sql).FirstOrDefault();经过分析,是因为SqlQuery方法查询...

git 下载提交命令

一.先使用git clone下载一个项目 git clone '项目地址' 这里要注意: clone的项目里边会自带git的一些信息,...

微信开发四 接受用户普通消息回复消息

微信接收用户普通消息的文章可以在官方中直接看微信普通消息分类:接受用户文本消息 与 回复文本信息 注意在接收用户普通...

记忆糖的关系【阅读听力】

Link Between Memory and SugarSugar On The BrainIt’s long been understood that there is a connection between memory...

婚姻心脏健康的关系【阅读听力】

Marriage and Heart HealthPlenty of studies have found that being married is generally good for health. One study ze...

iframe自适应高度配合net core使用

去掉iframe边框frameborder="0"去掉滚动条scrolling="no"iframe 自适应高度如果内容是固定的,那么就...

net core中使用url编码解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

Sqlerver添加用户授权

添加用户安全性-->登录名,然后右键新建登录名就可以了然后填写好相关信息就可以了右键属性,用户映射可以选择该用户可...
这一世以无限游戏为使命!
排名
2
文章
635
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术