暴露网络上的 gRPC
gRPC on an exposed network
我设置了一个可以工作的 server/client 流媒体,它在没有安全和局域网 dns 的情况下对我有用。
现在我准备好将它部署在一个公开的 (public) 网络上,我第一次使用 NGINX 和来自 letsEncrypt 的服务器端证书设置服务器,以便客户端像这样连接。
creds := credentials.NewTLS(&tls.Config{
InsecureSkipVerify: true,
})
conn, err := grpc.Dial(host, grpc.WithTransportCredentials(creds))
我想在某个时候实现身份验证,gRPC 似乎引入了一种新的东西,叫做 ALTS。
我想知道我是否可以在公开的 gRPC 服务上结合 username/password 身份验证实施 ALTS,以便用户获得一次身份验证,然后可以使用证书进行身份验证。
另一个想法是在会话中创建一个(已登录)布尔值,用户必须先调用 rpc
才能登录,然后才能访问其他 rpc
的
使用 TLS(最好是相互 TLS 或 mTLS)有助于确保客户端和服务器可以相互验证,但 TLS 仅验证客户端和服务器进程,它不会验证用户,例如客户端。 TLS 是用户身份验证(以及可能的授权)的先决条件。
缺少 gRPC 文档,但请参阅 Authentication
gRPC 身份验证的一个常见模式是客户端从带外身份验证服务(例如 Google|Microsoft|facebook OAuth)获取某种形式的凭据(通常是身份令牌或 JWT)然后它作为请求元数据的一部分传递给 gRPC 服务。
gRPC 服务接收请求,从元数据中提取凭据并确保这些凭据经过身份验证(通过使用凭据确定颁发者并与颁发者确认)。
通常,gRPC 服务然后通过调用授权服务来授权用户,以确定允许用户进行哪些身份验证权限(例如 gRPC 方法)。
与身份验证 (OAuth) 不同,授权通常是专有的实现。身份验证和授权机制通常都作为 gRPC 拦截器实现。在 gRPC 服务的方法被调用之前拦截器 运行 是阻止未经身份验证|未经授权的用户访问的好方法。请参阅 gRPC middleware 以获得带有示例的拦截器的体面概述。虽然 repo 是针对 Go SDK 的,但这些原则适用于 gRPC 语言实现。
我设置了一个可以工作的 server/client 流媒体,它在没有安全和局域网 dns 的情况下对我有用。
现在我准备好将它部署在一个公开的 (public) 网络上,我第一次使用 NGINX 和来自 letsEncrypt 的服务器端证书设置服务器,以便客户端像这样连接。
creds := credentials.NewTLS(&tls.Config{
InsecureSkipVerify: true,
})
conn, err := grpc.Dial(host, grpc.WithTransportCredentials(creds))
我想在某个时候实现身份验证,gRPC 似乎引入了一种新的东西,叫做 ALTS。
我想知道我是否可以在公开的 gRPC 服务上结合 username/password 身份验证实施 ALTS,以便用户获得一次身份验证,然后可以使用证书进行身份验证。
另一个想法是在会话中创建一个(已登录)布尔值,用户必须先调用 rpc
才能登录,然后才能访问其他 rpc
的
使用 TLS(最好是相互 TLS 或 mTLS)有助于确保客户端和服务器可以相互验证,但 TLS 仅验证客户端和服务器进程,它不会验证用户,例如客户端。 TLS 是用户身份验证(以及可能的授权)的先决条件。
缺少 gRPC 文档,但请参阅 Authentication
gRPC 身份验证的一个常见模式是客户端从带外身份验证服务(例如 Google|Microsoft|facebook OAuth)获取某种形式的凭据(通常是身份令牌或 JWT)然后它作为请求元数据的一部分传递给 gRPC 服务。
gRPC 服务接收请求,从元数据中提取凭据并确保这些凭据经过身份验证(通过使用凭据确定颁发者并与颁发者确认)。
通常,gRPC 服务然后通过调用授权服务来授权用户,以确定允许用户进行哪些身份验证权限(例如 gRPC 方法)。
与身份验证 (OAuth) 不同,授权通常是专有的实现。身份验证和授权机制通常都作为 gRPC 拦截器实现。在 gRPC 服务的方法被调用之前拦截器 运行 是阻止未经身份验证|未经授权的用户访问的好方法。请参阅 gRPC middleware 以获得带有示例的拦截器的体面概述。虽然 repo 是针对 Go SDK 的,但这些原则适用于 gRPC 语言实现。