我正在使用带有SSL的HTTP从Android设备上使用Web服务.自签名(不受信任)证书用于客户端身份验证.
我对如何使用公钥/私钥进行SSL的一般性了解.根据我的理解,我可以清楚地看到如何使用证书来建立安全连接并安全地传输数据.但是我不明白它们如何用于客户端身份验证,因为证书包含公钥并且不保密.
我有几个问题:
我在哪里可以阅读有关SSL和证书如何用于客户端身份验证的信息?
即使证书未公开......通过在浏览器中访问HTTPS URL,我可以查看并保存证书.然后,我可以将证书打包到密钥库中,并从应用程序中使用它.
Jeremy Huiskamp 在这篇文章中写道
客户端身份验证将在服务器请求时自动执行
...所以客户端身份验证以及数据加密可以使用证书执行吗?
编辑回答我的问题的第一部分:客户端密钥库不仅应包含服务器的公钥,还应包含客户端的私钥.然后服务器必须能够使用客户端的公钥解密?这是否意味着密钥库应该有两个证书?
TL,博士;在使用Google Cloud Logging 驱动程序的 Docker 容器中使用CloudLoggingHandler 进行 Stackdriver日志记录 API 调用时,将忽略日志级别。
细节; 从 Google Compute Engine 上运行的 Docker 容器获取日志的推荐方法是使用Stackdriver Logging Agent:
最佳做法是在所有 VM 实例上运行 Stackdriver Logging 代理。该代理可在 Linux 和 Windows 下运行。要安装 Stackdriver Logging 代理,请参阅安装日志代理。
以下步骤已成功完成:
Editor和Logs Writer角色。然后我从 Google 的Cloud Platform Python docs复制了示例CloudLoggingHandler 示例。
import logging
import google.cloud.logging …Run Code Online (Sandbox Code Playgroud) docker google-cloud-platform stackdriver google-cloud-stackdriver
在Python脚本中mylibrary.py,我使用Protocol Buffers来使用以下方法对数据建模:
我想实现在App Engine云端点框架是imports和使用上述Python脚本,但是云端点使用ProtoRPC的,不是"标准" 协议缓冲区.
我的App Engine Python模块从而不是使用'offline' 编译器main.py导入以生成序列化和反序列化代码:protorpcprotoc
from protorpc import messages
from protorpc import remote
Run Code Online (Sandbox Code Playgroud)
消息未使用.proto文件定义.而是定义类,继承自protorpc.messages.Message:
class MyMessageDefinition(messages.Message)
Run Code Online (Sandbox Code Playgroud)
Proto Buffers可以转换为Proto RPC等价物吗?我真的不想改为mylibrary.py使用ProtoRPC,因为它不像Protocol Buffers那样通用.
使用angular/flex-layout,我有一个简单的两列布局。
<div fxFlex fxLayout="row">
<div fxFlex="35%">
<!-- Left Column -->
</div>
<div fxFlex="65%">
<!-- Right Column -->
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在小显示器上,我希望列环绕在左下方。
使用 angular/flex-layout 的响应式 API,我fxLayout.sm="column"在容器元素上为小屏幕(600px 和 959px 之间)添加了一个断点:
<div fxFlex fxLayout="row" fxLayout.sm="column">
<div fxFlex="35%">
<!-- Left Column, Top Row -->
</div>
<div fxFlex="65%">
<!-- Right Column, Bottom Row -->
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在小屏幕上,左列成为顶行,右列成为底行。
但是,fxFlex="35%"和fxFlex="65%"属性仍然受到尊重,因此行重叠。顶行占据了显示高度的35% ,因为它之前占据了显示宽度的35% 。
请参阅此 Plunker以获取问题示例。请注意,我使用fxLayout.xs断点而不是fxLayout.sm演示问题,因为 Plunker 将显示分成小部分。
我可以通过fxFlex …
Python Generated Code解释了Python中 protobuf映射字段的大多数用例,但没有解释如何将一个映射复制到另一个映射。
给定简单地图
message Src {
map<string, string> properties = 1;
...
}
message Dst {
map<string, string> properties = 1;
...
}
Run Code Online (Sandbox Code Playgroud)
您无法为嵌入的消息字段分配值,因此无需执行以下操作:
# Will not work.
dst = Dst()
dst.properties = src.properties
Run Code Online (Sandbox Code Playgroud)
也没有CopyFrom的实现,因为 map 本身不是一条消息,它是消息中的一个字段。
# Will not work.
dst = Dst()
dst.properties.CopyFrom(src.properties)
Run Code Online (Sandbox Code Playgroud)
我也无法复制整个消息,因为我只想要地图。
# Copies unwanted fields!
dst = Dst()
dst.CopyFrom(src)
Run Code Online (Sandbox Code Playgroud)
我希望我不必遍历所有键并一一分配!
# Iterate over map keys
for key in src.properties:
dst.properties[key] = src.properties[key]
Run Code Online (Sandbox Code Playgroud) TL,博士;
gcloud将 API 部署到 Cloud Endpoints。细节
我在Google Compute Engine上运行的 Docker 容器中运行Python gRPC 服务和 ESP 。关于 gRPC > API 管理显示了我的应用程序架构图:
我的高级构建步骤:
1)使用 protoc 协议缓冲区编译器创建描述符文件, api_descriptor.pb。
python -m grpc_tools.protoc \
--include_imports \
--include_source_info \
--proto_path=. \
--descriptor_set_out=api_descriptor.pb \
--python_out=generated_pb2 \
--grpc_python_out=generated_pb2 \
bookstore.proto
Run Code Online (Sandbox Code Playgroud)
2) 使用 gcloud 命令行工具部署 proto …
python docker google-cloud-platform gcloud google-cloud-build
更新: Cloud Endpoints Portal 已被弃用,2023 年 3 月 21 日后将不再可用。
按照部署端点配置后,我已成功部署编译.proto文件和 gRPC API 配置文件。
伟大的。我决定做一个好公民,并在我的.proto.
这导致了许多包含各种注释的建议。注释需要新的proto导入;
前
syntax = "proto3";
package api.v1;
// Request message for Get method.
message GetFooRequest {
// The field will contain name of the resource requested.
string name = 1;
}
...blah,blah
Run Code Online (Sandbox Code Playgroud)
后
syntax = "proto3";
package api.v1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
// Request message for Get method.
message GetFooRequest { …Run Code Online (Sandbox Code Playgroud) protocol-buffers google-cloud-endpoints google-cloud-platform grpc google-api-linter
Python 生成的代码列出了众所周知的类型,但Go 生成的代码中没有等效的类型。我假设如果有的话,它会记录这个包google.golang.org/protobuf/types/known。
具体来说,我正在寻找有关FieldMask. 虽然它在Go 生成的代码中完全不存在,但我确实在go.dev上找到了它(https://pkg.go.dev/google.golang.org/protobuf/types/known/fieldmaskpb)。
问题
FieldMask的 Python 实现提供了一个MergeMessage函数,可以合并FieldMask从源到目标中指定的字段。这在API 更新操作中非常有用,因为您可以轻松合并 2 个原始消息,同时遵循FieldMask:
# get field mask and message from request
updated_message = request.message
field_mask = request.mask
# load original message from database
original_message = read_from_db(request.id)
# source, destination
field_mask.MergeMessage(updated_message, original_message)
# original_message is now updated according to the field mask
Run Code Online (Sandbox Code Playgroud)
Go 中是否有等效的便利函数?如果不是,应该如何使用 合并原始消息FieldMask?有我可以遵循的参考实现或示例吗?FieldMask我在 …
我的 Web 应用程序向可扩展服务代理(ESP) 发出 HTTP 请求,后者又委托给gRPC 服务器(用 Python 编写)。忽略Android和iOS客户端,架构是:
ESP 是一个nginx 反向代理。
gRPC 服务器(参考架构中的“您的代码”)可能会引发异常,在这种情况下,我使用context.abort引发异常并以非正常状态终止 RPC:
try:
# Do something that could fail.
except ValueError as e:
context.abort(grpc.StatusCode.DATA_LOSS, str(e))
Run Code Online (Sandbox Code Playgroud)
虽然可以使用set_code和set_details,但它们仍然会导致 HTTP 状态为 200 OK。
有两个问题:
gRPC状态代码由 ESP 容器(nginx 代理)转换为通用500 Internal Server Error.
随附的详细信息已被删除。
2. 组合意味着 Web 客户端至多有一个500 Internal Server Error针对gRPC 服务器引发的所有异常的情况。
最终,我不明白如何将更多信息(理想情况下,自定义)错误返回给网络客户端。
python google-cloud-platform nginx-reverse-proxy grpc-python
这与如何在 Angular 中初始化 Firebase 应用程序检查不重复,因为我可以使用 reCAPTCHA Enterprise 成功初始化应用程序。这个问题是关于使用调试提供程序初始化应用程序。
Firebase文档建议在从本地主机进行测试时使用调试提供程序。具体来说
self.FIREBASE_APPCHECK_DEBUG_TOKEN在调试版本中,在初始化 App Check 之前设置为 true 来启用调试模式 。例如:
self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
initializeAppCheck(app, { /* App Check options */ });
Run Code Online (Sandbox Code Playgroud)
如何在 Angular 应用程序中实现这一点?目前尚不清楚self引用了什么或该代码片段应放置在何处。
python ×5
docker ×2
angular ×1
api-design ×1
css ×1
firebase ×1
flexbox ×1
gcloud ×1
go ×1
grpc ×1
grpc-go ×1
grpc-python ×1
javascript ×1
protorpc ×1
ssl ×1
stackdriver ×1