今天来给我们的项目增加API网关,使用Ocelot 它是系统暴露在外部的一个访问入口,这个有点像代理访问的家伙,就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导、等等功能。同时我们还要在网关中集成了Identity Server(Identity Server在项目中的使用见上一篇文章),当网关需要请求认证信息的时候会与Identity Server服务器进行交互来完成。多说也无益,直接上项目吧。

  1. 新建一个空的.netcore项目,命名为Zhengwei.Gateway新建好后引入Ocelot包,我们之前项目中已有Zhengwei.Identity和Zhengwei.Use.Api,项目结构图如下:

    aaarticlea/png;base64,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" alt="">

  2. 在上图中我们看到一个Ocelot.json文件,里面设置了所有对当前这个网关的配置。它会接收所有的客户端请求,并路由到对应的下游服务器进行处理,再将请求结果返回。而这个上下游请求的对应关系也被称之为路由。配置如下:

  1. {
  2. "GlobalConfiguration": {
  3. "BaseUrl": "http://localhost"
  4. },
  5. "ReRoutes": [
  6. {
  7. "DownstreamPathTemplate": "/api/users",
  8. "DownstreamScheme": "http",
  9. "DownstreamHostAndPorts": [
  10. {
  11. "Host": "localhost",
  12. "Port": ""
  13. }
  14. ],
  15. "UpstreamPathTemplate": "/users",
  16. "UpstreamHttpMethod": [ "Get" ],
  17. "AuthenticationOptions": {
  18. "AuthenticationProviderKey": "zhengwei",
  19. "AllowedScopes": []
  20. }
  21. },
  22. {
  23. "DownstreamPathTemplate": "/connect/token",
  24. "DownstreamScheme": "http",
  25. "DownstreamHostAndPorts": [
  26. {
  27. "Host": "localhost",
  28. "Port": ""
  29. }
  30. ],
  31. "UpstreamPathTemplate": "/connect/token",
  32. "UpstreamHttpMethod": [ "Post" ]
  33.  
  34. }
  35.  
  36. ]
  37.  
  38. }

其中,DownstreamPathTemplate是下游服务。DownstreamScheme是下游服务http schema。DownstreamHostAndPorts是下游服务的地址,如果使用LoadBalancer的话这里可以填多项。UpstreamPathTemplate: 上游也就是用户输入的请求Url模板。UpstreamHttpMethod: 上游请求http方法,可使用数组

从配置文件中我们可以看出本来通过http://localhost:33545/api/users访问的use api现在可以通过http://localhost: 4157/api/users来访问,本来通过http://localhost: 1110/connect/token来访问的现在可以通过http://localhost: 4157/connect/token来访问,http://localhost: 4157是网关项目的地址。

3、在项目启动时来引入我们的配置文件Ocelot.json吧,写在Program.cs文件中,代码如下:

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. BuildWebHost(args).Run();
  6. }
  7.  
  8. public static IWebHost BuildWebHost(string[] args) =>
  9. WebHost.CreateDefaultBuilder(args)
  10. .ConfigureAppConfiguration((webhost,builder)=>{
  11. builder.SetBasePath(webhost.HostingEnvironment.ContentRootPath)
  12. .AddJsonFile("Ocelot.json");
  13. })
  14. .UseStartup<Startup>()
  15. .UseUrls("http://+:80")
  16. .Build();
  17. }

4、 在Startup.cs文件中加入我们的认证服务吧,注意这里的authenticationProviderKey=“zhengwei”,要与我们Ocelot.json文件中的"AuthenticationProviderKey": "zhengwei"一致,代码如下:

  1. public class Startup
  2. {
  3. public Startup(IConfiguration configuration)
  4. {
  5. Configuration = configuration;
  6. }
  7.  
  8. public IConfiguration Configuration { get; }
  9.  
  10. // This method gets called by the runtime. Use this method to add services to the container.
  11. public void ConfigureServices(IServiceCollection services)
  12. {
  13. var authenticationProviderKey = "zhengwei";
  14.  
  15. services.AddAuthentication()
  16. .AddIdentityServerAuthentication(authenticationProviderKey, options=> {
  17. options.Authority = "http://localhost:1110/";
  18. options.ApiName = "gateway_api";
  19. options.SupportedTokens = SupportedTokens.Both;
  20. options.ApiSecret = "secret";
  21. options.RequireHttpsMetadata = false;
  22. });
  23. services.AddOcelot();
  24. }
  25.  
  26. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  27. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  28. {
  29. if (env.IsDevelopment())
  30. {
  31. app.UseDeveloperExceptionPage();
  32. }
  33.  
  34. app.UseOcelot();
  35. }
  36. }

5、一切就序,那我们就开始测试吧,右键解决方案---》属性-->多个项目启动----》操作中将三个项目都设置为启动,关闭后点击启动,启动好后,打开postman,输入网址http://localhost:4157/users

可惜,给我们返回的验证吗是401未认证,然来是我们没有提交对应的token.那就先获取token值吧。输入网址:http://localhost:4157/connect/token,得到如下的返回值,其中access_token就是我们要的token值,复制下来吧。

6、复制下我们的token后,再次请求http://localhost:4157/users前要加入参数,在Headers中输入key:   Authorization   输入对应的值:bearer  + 复制过来的access_token,再次请求,会获取到useapi接口正常返回的值了。如下图

至此,我们的ocelot和Identity Server在我们的项目中集成完毕。

NetCore项目实战篇05---添加Ocelot网关并集成identity server4认证的更多相关文章

  1. NetCore项目实战篇06---服务注册与发现之consul

    至此,我们的解决方案中新建了三个项目,网关(Zhengwei.Gateway).认证中心(Zhengwei.Identity)和用户资源API(Zhengwei.Use.Api).当要访问用户API的 ...

  2. NetCore项目实战篇08---Docker挂载mysql并连接.netCoreWeb

    我们的项目之前在直接连接的mysql,今天我们将通过docker挂载mysql 并与我们开发的webapi项目连接. 1. 安装docker 下载地址: https://download.docker ...

  3. NetCore项目实战篇04---集成IdentityService4

    大家都知道我们的项目中已有web api,现在可以正式访问,不论任何人只要通过输入对应的api网址就可以访问到我们的api 资源,这样是很不安全的,我们需求对当前用户进行身份验证,因此我们在项目中使用 ...

  4. NetCore项目实战篇02---全局异常处理

    在 .netcore中可以自定义自己的异常类型,步骤如下: 1.自定义自己的异常类型UserOperationException 并继承自Exception public class UserOper ...

  5. NetCore项目实战篇03---HTTP Patch 更新数据

    一.什么是HTPP Patch HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 ...

  6. NetCore项目实战篇07---服务保护之polly

    1.  为什么要用polly 前面的项目中,一个服务调用另一个(Zhengwei.Identity调用Zhengwei.Use.Api)服务时是直接调用的,在这个调用的过程中可能会发生各种瞬态故障,这 ...

  7. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  8. C# Xamarin移动开发项目实战篇

    一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...

  9. 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu

    本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习——第一篇 内容: 一. Ubuntu简 ...

随机推荐

  1. AJ学IOS(21)UIApplication设置程序图标右上⾓红⾊数字_联⺴指⽰器等

    AJ分享,必须精品 效果简介 UIApplication的运用,有很多相如:进⾏行⼀一些应⽤用级别的操作等等,打开网页,打开电话拨号和信息等.. 什么是UIApplication ● UIApplic ...

  2. FreeRTOS操作系统工程建立和操作系统的概念

    一.建立工程步骤如下: 二.详细步骤流程如下: 1.新建工程文件夹,然后在里面建立如下几个文件: 2.使用keil5建立工程: a.建立工程: b.添加内核文件: 3.建立文件分组: 4.创建main ...

  3. Spring Cloud 系列之 Gateway 服务网关(一)

    什么是 Spring Cloud Gateway Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由 ...

  4. S7通信协议之你不知道的事儿

    在电气学习的路上,西门子PLC应该是我的启蒙PLC,从早期的S7-300/400 PLC搭建Profibus-DP网络开始接触,到后来的S7-200Smart PLC,再到现在的S7-1200/150 ...

  5. 2007 NOIP T1奖学金

    奖学金(07NOIPT1): [题目描述] 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果 ...

  6. CentOS7.7下二进制部署MySQL多版本多实例实战

    第一章 需求说明 部署MySQL5.7的三个多实例环境(端口分别为3307,3308,3309) 部署MySQL5.6和8.0版本数据库实例((端口分别为3316和3326) 第二章 环境准备 1.虚 ...

  7. MySQL笔记总结-DQL语言

    DQL语言 基础查询 一.语法 select 查询列表 from 表名; 二.特点 1.查询列表可以是字段.常量.表达式.函数,也可以是多个 2.查询结果是一个虚拟表 三.示例 1.查询单个字段 se ...

  8. 设计模式 - 命令模式详解及其在JdbcTemplate中的应用

    基本介绍 在软件设计中,我们经常需要向某些对象发送一些请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需要在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来设计,使得 ...

  9. pytorch seq2seq闲聊机器人beam search返回结果

    decoder.py """ 实现解码器 """ import heapq import torch.nn as nn import con ...

  10. Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践

    Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...