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 中写入如下:

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

  在 Configure 注入:

  public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}//注入HTTP管道中
            app.UseIdentityServer();app.Run(async (context) =>{await context.Response.WriteAsync("Hello World!");});}

  新建配置类Config:

using IdentityServer4.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;namespace InentityServer4_1
{public class Config{/// <summary>/// 返回收保护的Api集合/// </summary>/// <returns></returns>public static IEnumerable<ApiResource> GetApiResources(){List<ApiResource> resources = new List<ApiResource>();//ApiResource第一个参数是应用的名字,第二个参数是描述resources.Add(new ApiResource("API", "接口API"));return resources;}/// <summary>/// 定义客户信息列表/// </summary>/// <returns></returns>public static IEnumerable<Client> GetClients(){List<Client> clients = new List<Client>();clients.Add(new Client{ClientId = "clientID",//API账号、客户端Id//客户端验证凭证授权类型AllowedGrantTypes = GrantTypes.ClientCredentials,//ClientSecrets 认证秘钥ClientSecrets ={//SHA 安全散列算法 是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。new Secret("123321".Sha256(),"用户秘钥")//秘钥
                },//AllowedScopes 定义当秘钥验证通过后允许访问的资源//多个使用 逗号隔开 如 AllowedScopes = { "API","API1","API1" }AllowedScopes = { "API" }});return clients;}}
}

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/szlblog/p/9452045.html

AspNetCore中使用Ocelot之 IdentityServer4(1)相关推荐

  1. AspNetCore中使用Ocelot之 IdentityServer4

    前言: Ocelot网关是基于AspNetCore开发的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本升级,在使用AspNetCore 开发的时候可以使用2.0版本了, 开源项目Oce ...

  2. 极验接入教程纯html,在AspNetCore中使用极验做行为认证的验证流程

    极验验证 极验验证是一种在计算机领域用于区分自然人和机器人的,通过简单集成的方式,为开发者提供安全.便捷的云端验证服务. 与以往传统验证码不同的是,极验通过分析用户完成拼图过程中的行为特征,通过数据分 ...

  3. Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务

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

  4. AspNetCore 中使用 InentityServer4(2)

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

  5. 4、Hangfire在AspNetCore中的使用(一)

    前言:就是定时去执行某一个功能需求,最常见的就是定时去备份数据库,或者去更新token 网上搜索定时执行会有很多方案,最多的就是通过Timer去实现,然后还有通过兄台那个服务去实现,然后又继续搜了下相 ...

  6. ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡

    本系列相关文章: <ASP.NET Core中Ocelot的使用:API网关的应用> <ASP.NET Core中Ocelot的使用:基于Spring Clound Netflix ...

  7. .NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  8. 【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4...

    上篇文章介绍了IdentityServer4的源码分析的内容,让我们知道了IdentityServer4的一些运行原理,这篇将介绍如何使用dapper来持久化Identityserver4,让我们对I ...

  9. 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

    上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现 ...

最新文章

  1. 在Photoshop扣图的基本方法
  2. 获取当前脚本所在的绝对路径
  3. 在Access和 SQL Server中通配符的应用方法
  4. SD--如何在输出控制中增加自定义字段
  5. IE8中HTTP连接数目的变化
  6. Unix传奇(下篇)
  7. 21个营销机构网站设计案例
  8. 【数据结构与算法】之深入解析“24点游戏”的求解思路与算法示例
  9. 如何理解Nginx, WSGI, Flask之间的关系
  10. oracle删除死锁进程
  11. Cookie、Session、Token
  12. 解决 Agent admitted failure to sign using the key 问题 with ssh
  13. Emacs是一种信仰!世界最强编辑器介绍 (转自王珢)
  14. 在java中转义符 n代表什么_在Java中,表示换行符的转义字符是()。 A.\nB.\fC.n D.\ddd...
  15. bug篇——mysql中sum函数
  16. 用数据,创造下一个可能
  17. AI头发笔刷_笔刷不够用?给你送1000款~快来拿走
  18. 51单片机学习笔记(清翔版)(23)——红外通讯
  19. leadbbs移花接木漏洞与加入黑客木马
  20. andorid自动化测试之Monkey(上)

热门文章

  1. Hibernate--Criteria Query and DetachedCriteria
  2. VC++中文件类型小结
  3. 主键思维定势导致的惨案
  4. 一个简单的GTK的例子程序
  5. UTC转换BJT时间 时间转换 c语言程序设计 mooc 翁恺
  6. 相同MAC地址,相同IP的两天电脑为什么可以同时上网互不影响(转自Nothel的blog)
  7. c++课设实验室管理系统_庆安知名实验室设备管理系统平均价格
  8. 性能测试(二)确定需求,执行测试
  9. SAP License:SAP不便解决的问题之六——采购组在审批策略中的作用
  10. SAP License:如何用Coding Block