有个专门做3d同人网站,wordpress lnmp1.4,商城插件wordpress,wordpress主题仿逛丢前一篇#xff1a;gRPC in ASP.NET Core 3.x - gRPC 简介#xff08;1#xff09;身份认证这里指的不是用户的身份认证#xff0c;而是指多个server和client之间#xff0c;它们如何识别出来谁是谁#xff0c;并且能安全的进行消息传输。在身份认证这方面#xff0c;gRP… 前一篇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 StreamingServer 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 响应类型) 这也就意味着一个数组的数据将会被发送一个数组的数据也将会被响应但都是一次只发送一个数据。