gRPC in ASP.NET Core 3.x - gRPC 简介(2)

前一篇:

gRPC in ASP.NET Core 3.x - gRPC 简介(1)

身份认证

这里指的不是用户的身份认证,而是指多个server和client之间,它们如何识别出来谁是谁,并且能安全的进行消息传输。

在身份认证这方面,gRPC一共有4种身份认证的 机制:

  • 不采取任何措施的连接,也就是不安全的连接。

  • TLS/SSL 连接。

  • 基于 Google Token 的身份认证。

  • 自定义的身份认证提供商。 

 

针对第一种不安全的连接,client和server默认将会采用HTTP/1,没有其他特殊的安全措施,也就是使用明文在网络上传输。所以尽量别用不安全连接,容易被截获。但是不安全连接却不需要其他任何特殊的处理,不需要CA证书等等,所以适合于快速建立gRPC的情况,后期再添加其他安全措施也行。

 

如果采用了TLS/SSL,那么想截获传输的消息就比较困难了,而且默认也是使用HTTP/2。HTTP/2的很多实现根本就不支持不安全连接,所以gRPC也不会尝试使用这些不安全连接,但是如果gRPC发现它是在一个安全的连接上面,它就会尝试把这些连接升级到HTTP/2,这时你的消息的传输速度就会变得更快,因为HTTP/2协议的效率更高。

但是需要注意的是,client会对这些证书进行验证,所以不能因为这是一个安全连接,那么就啥也不用干。client会去检查证书的授权来确保证书的真实性。所以如果你使用的是生成的证书,那么你还需要在client端做一些额外的工作来确保client能够识别出这些server证书的合理性。

 

当使用基于 Google Token 的身份认证方式时,需要注意的是它需要安全的连接,所以你可以把这种认证方式想象为在SSL/TLS上面的一层。所以你需要有安全连接,在此之上,你才能使用基于Google Token的认证方式。 

 

最后一个是自定义身份认证,你可能想要的是OAuth 2.0这种认证协议,但是gRPC并没有自带OAuth 2.0协议,但是还是有很多用于不同语言的插件可以支持OAuth 2.0的。所以如果有需要的话,可以去官网查一下。

你也可以自己实现一个身份认证协议,但是自己实现的肯定是和语言有关的,而且gRPC也会尽量配合这种语言。所以不是让你的认证协议像gRPC这样工作,而是让你尽量用该语言惯用的方式。所以使用C#开发一个身份认证提供商和使用Go语言可能会不太一样。这块的详细信息需要去官网查阅。

 

消息传输类型

gRPC的消息传输类型有4种。

  • 第一种是一元的消息,就是简单的请求--响应。

  • 第二种是server streaming(流),server会把数据streaming回给client。

  • 第三种是client streaming,也就是client会把数据streaming给server。

  • 最后是双向streaming。

 

 一元消息

这里有一个server,一个client。gRPC从client发送请求到server开始,然后server做一些处理,生成一个响应并返回。所以在这次远程调用里,有一个请求,一个响应。

这个Protocol Buffer的消息格式大约是这样:

rpc 方法名(请求类型) returns(响应类型) 

在这里,即使请求的时候不需要带有数据(参数),你仍然需要传递一个空的请求类型的对象。所以在gRPC里就必须有请求类型和响应类型,因为gRPC不知道你带没带数据,而且未来你有可能需要带上 数据。

 

Server Streaming

Server Streaming的请求和响应管道还是一样的,但不同的是,虽然一切也是始于client到server的一个请求,然后server处理完之后或者当server正在生成响应的时候,server会一次发送一部分结果回来,也就是把响应sreaming回来。

一个常见的用例就是流式视频。你发送一个请求,想要看某种类型的动作片,然后server会把视频数据的一部分缓冲流发送回来,这样client就不需要等到整个视频一次性返回再看,一次返回一块即可。

当使用这种远程调用的时候,我们只需要在响应类型前面加一个关键字stream即可:

rpc 方法名(请求类型) returns(stream 响应类型) 

这样的话,server就相当于会返回一个数组的响应,但是一次只返回一个。

 

Client Streaming

与Server streaming对应的就是Client streaming。

常见的用例就是上传文件,你可能需要缓冲,这样的话就会把请求分为多块来执行,一次包含一部分数据。需要注意的时候,在发送期间,server会一直等待,直到整个请求都被接收到。在接收到整个请求之前,server不会做任何处理动作。最后当server接收到所有数据并处理完之后,server会发送一个响应返回给client。

不难猜,client streaming的格式是这样的:

rpc 方法名(stream 请求类型) returns(响应类型) 

这个远程调用就相当于,一个请求数据的数组,一次发送一个元素,最后所有请求处理完成后返回单个响应。

 

双向Streaming

最后一种就是双向streaming。在这种方式下,client会发送一个初始的请求,也许接下来还会发送几个请求,与此同时server就开始把响应发送回来了,这时client可以继续发送额外的请求。所以整个过程非常的异步,而且没有什么预定义的结构来规定请求和响应如何构造。所以你也可以想到,在你的server和client之间,肯定是需要异步处理的。

双向streaming的格式如下:

rpc 方法名(stream 请求类型) returns((stream 响应类型) 

这也就意味着一个数组的数据将会被发送,一个数组的数据也将会被响应,但都是一次只发送一个数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

08 | 配置框架:让服务无缝适应各种环境配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 ASP.NET Core 的配置框架配置框架的核心包有两个,一个抽象包,一个实现包Microsoft.Extensions.Configuration.AbstractionsMicr…

【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客,发表于 2019 年 11 月 1 日。Steve Sanderson 是 Blazor 最早的创造者。这篇文章发布后还有一篇后续,是介绍一个在本文提到的跨平台 webview 概念的落地项目 WebWindow ,我也会接着翻译过…

mysql 剔除不可见字符_不可见字符,Excel里最隐蔽的坑

小伙伴们好啊,我是流浪铁匠,今天为大家介绍的是excel数据整理时一类最常见的坑——不可见字符。从unichar函数对应的uincode字符集结果来说,excel大约有111万个字符,其中有不少字符的性质千奇百怪,由于unichar/unicode…

同为Chromium浏览器,Edge却被“特别关照”

谷歌会在 Microsoft Edge 用户访问 Chrome Web Store(Chrome 网上应用商店) 时发去一条通知提醒,建议用户切换到 Google Chrome 以安全地使用扩展程序,通知还提供了下载 Google Chrome 的链接。不过有趣的是,其他 Chro…

噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...

第一期《声学分享客--噪声与振动控制篇》将于今日上午10:00~11:00,在线直播,欢迎各位上线交流。主讲人:苏宏兵报告内容:大型隔振工程案例介绍报告人介绍:苏宏兵,工学硕士&#xff0c…

微软推出全新的Windows 10系统图标

微软已开始通过 Fast Ring 向 Insider 用户推出新的 Windows 10 系统图标,这些新图标基于 Fluent 设计。更改从邮件和日历等程序开始,微软将陆续推出更多彩色图标。这些图标将在接下来的几个月中通过 Microsoft Store 的应用更新和 Windows 10 的发布预览…

.NET Core开发实战(第9课:命令行配置提供程序)--学习笔记

09 | 命令行配置提供程序:最简单快捷的配置注入方法这一节讲解如何使用命令行参数来作为配置数据源命令行配置(提供程序的)支持三种格式的命令1、无前缀的 keyvalue 模式2、双中横线模式 --keyvalue 或 --key value3、正横杠模式 /keyvalue 或…

gRPC in ASP.NET Core 3.x - gRPC 消息定义

之前写了几篇关于 Protoco Buffer 的文章。gRPC in ASP.NET Core 3.x - gRPC 简介(1)gRPC in ASP.NET Core 3.x - gRPC 简介(2)当gRPC使用Protocol Buffer作为传输协议的时候,Protocol Buffer里所有的规则仍然都适用。…

10个用于C#.NET开发的基本调试工具

在调试软件时,工具非常重要。获取正确的工具,然后再调试时提取正确的信息。根据获取的正确的错误信息,可以找到问题的根源所在。找到问题根源所在,你就能够解决该错误了。你将看到我认为最基本的解决在C# .NET 中错误问题的工具的…

[蓝桥杯2015初赛]移动距离

题目描述 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。 其楼房的编号为1,2,3… 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 …

最长公共子序列-dp

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” …

将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1

目录前言Microsoft.AspNetCore.Mvc.ViewFeatures.Internal 消失了升级到 ASP.NET Core 3.1项目文件(.csproj)Program.csStartup.csViewBag 与 Razor Pages 第一次接触ViewBag 与 Razor Pages 第二次接触小结(文件更改对比图)ASP.N…

WTM系列视频教程:View和Taghelper

文字摘要:“又到了老刘胡说的时间了,今天我们主要聊一下View和TagHelper。在前后端不分离的模式下,View还是很重的一块。”“前几课有朋友反馈说收获很大,也有朋友反应基础内容太多,众口难调啊。这个系列教程还是希望有…