AspNetCore中使用Ocelot IdentityServer4(1)

前言:

OceLot网关是基于AspNetCore 产生的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本升级,在使用AspNetCore 开发的时候可以使用2.0版本了,

开源项目Ocelot 张大队长是主力的参与人员,以前提起张大队前面都会加个腾讯,张大队于2018年8月8日 正式离开了腾讯,回归了真我,这里祝张大队:事事顺心。

OceLot是开源的,开源协议是MIT,所以我们可以大胆放心的使用。

OceLot 的GitHub地址:https://github.com/ThreeMammals/Ocelot

OceLot 的中文文档:https://blog.csdn.net/sD7O95O/article/details/79623654

目前OceLot  已经成为了一个使用AspNetCore 几乎 必会的一项技术了,所以关注,并且要学习,或者已经在使用的.net 开发人员可以关注并学习了解一下OceLot,

Ocelot的功能:

  1、基于IdentityServer4的认证
  2、Consul的注册发现
  3、单机的限流控制
  4、基于Polly的使用
  5、支持Http以及其他的rpc通讯
  6、网关集群
        等功能,

可以看出非常的强大。接下来我们将Ocelot的功能基于AspNetCore 进行实现。首先学习一下IdentityServer4

1、基于IdentityServer4的认证

在使用之前我们先明白IdentityServer4 是什么以及使用原理。

文档地址:http://docs.identityserver.io/en/release/

中文文档:网上也有 推荐 :https://www.cnblogs.com/ideck/

IdentityServer 认证的作用是,不是谁想登录我的Web就能登录的,也不是谁想使用我的接口就能使用的,不经过我的同意就想使用我的服务那是不存在的,除非你是故意的。

我们说一个故事。

怎么说呢,认证其实就是一把钥匙,打开一扇门的钥匙,就好比几个人一起租房子一样,该房门的钥匙是指纹的,房东只给四个人授权了指纹开门的权限,现在有四个人可以进屋了,但是我们有五个人要进屋,但是房东只授权我们其中四个人了,还有一人没有钥匙,但是每多配一把钥匙,需要向房东申请授权,申请通过后才能指纹开锁,这个人才能进屋,我们变要求房东在授权一个人,但是这时候房东说了那位哥们看起来不像是好人不给授权,如果以后回来了敲门,确定是你后我来给开门,后来这哥们气不过通过私下操作也能开门了,有一天被发现了,该哥们便失去了租住的权利了。

这里的钥匙就是秘钥,有秘钥了才能有进行访问程序的权限,但是秘钥只有授权后才能使用,事实上没有经过授权的秘钥是不能进行程序访问的,但是万事都不是绝对的,安全一直是我们所关注的问题,就好比一把简单的钥匙,经过违规操作,就能打开一扇门,危害我们的安危,这把违规的钥匙告诉我们的是,秘钥要严加看管,轻易不要暴露给别人,安全也要加强不要轻易放松。

IdentityServer4 的规则:

  1、我们常见的程序之间的交互方式有:
  2、浏览器和web 之间的通信:
  3、Web 于Api之间的通信:
  4、用户于Api 之间的通信:
  5、浏览器程序 于Api 之间的通信:
  6、服务器程序 于Api 通讯:
  7、Api 之间的相互通讯:

为了保证安全我们创建一个安全令牌的服务,用来管理通信之间的基础安全,并不是说有了安全令牌服务就绝对安全了,为了安全我们还需要做到更多,没有绝对的安全存在。

IdentityServer4 具体能用在什么地方:

因为IdentityServer4是一款包含了,授权(OAuth2)与认证(OpendID)协议的框架。

具体什么是OAuth2和OpendID 我们以上文的故事来分析一下,授权(OAuth2)就是房东给租户授权的钥匙一样,我们拿到授权的钥匙后,可以随意的进出房子,但是那个倒霉的哥们没有没有授权,每次回家都需要先让房东证明他是他(认证(OpendID 代表着是本人)后才能进出房子,每次进屋都需要证明自己,这样进出屋就不是很方便了,权限明显没有被授权(OAuth2)的人高。

如果通过我的描述还不是很清楚的,可以搜索一下具体的区别,我想收获会更大。

推荐一个地址:https://www.jianshu.com/p/5d535eee0a9

有了这两样东西后我们可以做以下事情(不包括所有):

  1、可以做单点登录的功能
  2、可以做身份验证
  3、可以做Api访问权限的控制
  4、也可以做第三方登录

IdentityServer4是灵活的,我们可以根据我们的需求去使用他,IdentityServer 有效的保护资源不受破坏。

  大致使用流程如下图所示:官方的图:

搭建第一个IdentityServer 入门程序

1、创建AspNetCore空白Web 程序

2、在程序控制台中添加IdentityServer4 的包 安装命令获取地址 :https://www.nuget.org/packages/IdentityServer4

  安装如图所示:

  使用命令 Install-Package IdentityServer4 -Version 2.2.0

  

3、在StartUP中这样使用:下面就不过多的描述了,大多数都写在代码中:

  在ConfigureServices 中写入如下:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. //注入服务
  4. services.AddIdentityServer().
  5. AddDeveloperSigningCredential()//扩展程序为签名令牌创建临时密钥材料
  6. .AddInMemoryClients(Config.GetClients())//基于配置对象的内存中集合的注册IClientStore和ICorsPolicyService实现Client
  7. .AddInMemoryApiResources(Config.GetApiResources());//IResourceStore根据ApiResource配置对象的内存中集合注册实现
  8. }

  在 Configure 注入:

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. //注入HTTP管道中
  8. app.UseIdentityServer();
  9.  
  10. app.Run(async (context) =>
  11. {
  12. await context.Response.WriteAsync("Hello World!");
  13. });
  14. }

  新建配置类Config:

  1. using IdentityServer4.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6.  
  7. namespace InentityServer4_1
  8. {
  9. public class Config
  10. {
  11. /// <summary>
  12. /// 返回收保护的Api集合
  13. /// </summary>
  14. /// <returns></returns>
  15.  
  16. public static IEnumerable<ApiResource> GetApiResources()
  17. {
  18. List<ApiResource> resources = new List<ApiResource>();
  19. //ApiResource第一个参数是应用的名字,第二个参数是描述
  20. resources.Add(new ApiResource("API", "接口API"));
  21. return resources;
  22. }
  23. /// <summary>
  24. /// 定义客户信息列表
  25. /// </summary>
  26. /// <returns></returns>
  27. public static IEnumerable<Client> GetClients()
  28. {
  29. List<Client> clients = new List<Client>();
  30. clients.Add(new Client
  31. {
  32. ClientId = "clientID",//API账号、客户端Id
  33. //客户端验证凭证授权类型
  34. AllowedGrantTypes = GrantTypes.ClientCredentials,
  35. //ClientSecrets 认证秘钥
  36. ClientSecrets =
  37. {
  38. //SHA 安全散列算法 是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。
  39. new Secret("".Sha256(),"用户秘钥")//秘钥
  40. },
  41.  
  42. //AllowedScopes 定义当秘钥验证通过后允许访问的资源
  43. //多个使用 逗号隔开 如 AllowedScopes = { "API","API1","API1" }
  44. AllowedScopes = { "API" }
  45. });
  46. return clients;
  47. }
  48. }
  49. }

4、运行项目后根据启动的端口后面加上:.well-known/openid-configuration 可以得到配置信息的内容:

  我的是默认的5000端口 如访问:http://localhost:5000/.well-known/openid-configuration

这样身份认证服务就Ok了。

下一篇:我们创建一个受保护的Api,以及客户端如何使用。

本来最近 想写一系列 基于Ocelot+ InentityServer4 功能文章,以及后续使用的功能文章, 今天才接到通知 我们马上要上线服务,以及新的项目的所有AspNetCore的微服务接口 都要使用 Apollo 配置中心,最近要转移一下学习重心了,先把项目搞定了在 继续下一篇了。

有不足之处 希望大家指出相互学习,

                      本文原创:转载请注明出处 谢谢!

AspNetCore中使用Ocelot之 IdentityServer4(1)的更多相关文章

  1. 微服务网关Ocelot加入IdentityServer4鉴权-.NetCore(.NET5)中使用

    Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocel ...

  2. 在AspNetCore 中 使用Redis实现分布式缓存

    AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemoryCache,以及缓存的基础概念.本篇会进行一些概念上的补充. 本篇我们记录的内容是怎么在Core中使 ...

  3. 在ASPNETCORE中获得所有Action

    在ASPNETCORE中获得所有Action 本文旨在记录自己在aspnetcore工作中需要获取所有Action,在查询了资料后进行了几种方法的记录.后期有发现其它方式再进行追加. 一.通过 反射 ...

  4. 【转载】在AspNetCore 中 使用Redis实现分布式缓存

    原文地址:https://www.cnblogs.com/szlblog/p/9045209.html AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemo ...

  5. AspNetCore中的IdentityServer4客户端认证模式实现

    1 AuthorizationServer using IdentityServer4; using IdentityServer4.Models; public class Startup { pu ...

  6. .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)

    本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...

  7. AspNetCore 中使用 InentityServer4(2)

    基于上一篇文章 实现对IdnetityServer4 服务的使用 1:添加接口解决方案,并且使接口受认证服务的保护: 首先在解决方案中添加Api项目如下图所示: 在API项目中添加Nuget 引用 如 ...

  8. Ocelot网关+IdentityServer4实现API权限认证

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...

  9. Ocelot和IdentityServer4初体验

    Ocelot是一个用.NET Core实现的开源API网关技术.IdentityServer4是一个基于OpenID Connect和OAuth2.0的针对ASP.NET Core的框架,以中间件的形 ...

随机推荐

  1. myeclipse maven tomcat插件 创建web工程

    自从有了云笔记,很久不写博客了.今天写了使用Freemarker静态化JSP页面,索性就发出来.初学,勿喷. 这篇文字以前放在云笔记里,当然里面有很多借鉴网络上的东西,而自己也使用Maven很久了,索 ...

  2. 在后台主机中托管SignalR服务并广播心跳包

    什么是后台主机 在之前的 Asp.NETCore 轻松学系列中,曾经介绍过一个轻量级服务主机 IHostedService ,利用 IHostedService 可以轻松的实现一个系统级别的后台服务, ...

  3. gin框架使用注意事项

    gin框架使用注意事项 本文就说下这段时间我在使用gin框架过程中遇到的问题和要注意的事情. 错误处理请求返回要使用c.Abort,不要只是return 当在controller中进行错误处理的时候, ...

  4. 游戏AI之路径规划(3)

    目录 使用路径点(Way Point)作为节点 洪水填充算法创建路径点 使用导航网(Navigation Mesh)作为节点 区域分割 预计算 路径查询表 路径成本查询表 寻路的改进 平均帧运算 路径 ...

  5. 关于vue使用form上传文件

    在vue中使用form表单上传文件文件的时候出现了一些问题,获取文件的时候一直返回null, 解决之后又出现发送到后台的file文件后台显示为空,解决源码 <template> <d ...

  6. Android版数据结构与算法(八):二叉排序树

    本文目录 前两篇文章我们学习了一些树的基本概念以及常用操作,本篇我们了解一下二叉树的一种特殊形式:二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree) ...

  7. 金三银四,如何征服面试官,拿到Offer

    又到了茶余饭后的时间,想想写点什么,掐指一算,噢呦,快到3月份了,职场的金三银四跳槽季又来了,不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息,就是好多公司在优化裁 ...

  8. .NET Core:依赖注入

      在Startup的ConfigureServices方法中加入需要依赖注入的东西. 每次从容器 中获取的时候都是一个新的实例:services.AddTransient<ITransient ...

  9. 学习python的第二天

    4.26自我总结 一.程序语言 1.机械语言 由于0和1组成 优点:执行效率快 缺点:操作麻烦繁琐 2.汇编语言 比机械语言好点 优点:比机械语言操作方便 缺点,执行慢 3.高级语言 主要两个,jav ...

  10. C++对象生存期&&static

    生存期,即从诞生到消失的时间段,在生存期内,对象的值或保持不变,知道改变他的值为止.对象生存期分为静态生存期和动态生存期两种. 静态生存期 指对象的生存期与程序运行期相同.在namespace中声明的 ...