使用 Firebase Auth id 令牌验证(多个)云 运行 服务
Using Firebase Auth id tokens to authenticate (multiple) Cloud Run services
与Security Cloud Run services for end-users and other services相关
我正在使用:
- Firebase Auth 为具有 Google、Microsoft、GitHub ... 身份的用户生成 ID 令牌
- 云上的云端点 运行 调用(云 运行)gRPC 服务
- Firebase Auth 用户由我的一项服务授权
我挣扎的地方....
我的应用程序提供 1 项或多项云 运行 服务,应用程序的用户应该能够使用这些服务。但是验证 Cloud 运行 服务需要每个服务的 ID 令牌; id 令牌的受众必须使用 Cloud 运行 服务 URL 并且 Cloud 运行 服务 URL 是特定于服务的。
似乎我应该能够将 Firebase Auth id 令牌交换为(Google 帐户)id 令牌(具有适当的受众),然后可以用来调用云 运行 服务。代理也可以 运行 在 Cloud 运行 上,它会使用我的应用程序的身份验证服务来验证是否应该向 id 令牌用户颁发 Google id 令牌。
Guillaume Blaquire 的 answer 提出了 Coud Endpoints 或类似于我上面描述的代理。但是,Cloud Endpoints 要求在部署时知道后端服务(这些 Cloud 运行 服务不会),我想为用户提供 id 令牌,以便他们可以使用 curl
或其他一些工具来发出授权请求。
Cloud 运行 有一些令人信服的 Authenticate 文档(原文如此。)但我想要的东西介于:
- Authenticating users -- 我有 JWT,但我想接收云 运行 服务的 Google id 令牌
- Authenticating service-to-service answer.
中 Guillaume 的替代提案
与其将你的云 运行 放在云端点后面,你必须提前知道云 运行 实例,你可以在云中处理请求和身份验证 运行实例本身。
为了能够在 Cloud 运行 实例中处理 Firebase 身份验证令牌,必须对其进行设置,以便可以在未经身份验证的情况下调用它们。然后,在 Cloud 运行 内部,它应该启动一个 Web 服务器,解析传入的请求(注意 Authorization
header - Firebase Auth sample),然后执行操作或终止请求。
要实现这一点,请查看该线程代码所基于的 this thread for details on how you can handle both HTTP and service-service requests. Alternatively, you could just deploy the Functions Framework 图片。
如果您想要更简洁的 URL,请在单个 Cloud 运行 实例中托管多个端点,然后将该实例置于 Cloud Endpoints 之后,或者您可以使用类似 Firebase Hosting.
与Security Cloud Run services for end-users and other services相关
我正在使用:
- Firebase Auth 为具有 Google、Microsoft、GitHub ... 身份的用户生成 ID 令牌
- 云上的云端点 运行 调用(云 运行)gRPC 服务
- Firebase Auth 用户由我的一项服务授权
我挣扎的地方....
我的应用程序提供 1 项或多项云 运行 服务,应用程序的用户应该能够使用这些服务。但是验证 Cloud 运行 服务需要每个服务的 ID 令牌; id 令牌的受众必须使用 Cloud 运行 服务 URL 并且 Cloud 运行 服务 URL 是特定于服务的。
似乎我应该能够将 Firebase Auth id 令牌交换为(Google 帐户)id 令牌(具有适当的受众),然后可以用来调用云 运行 服务。代理也可以 运行 在 Cloud 运行 上,它会使用我的应用程序的身份验证服务来验证是否应该向 id 令牌用户颁发 Google id 令牌。
Guillaume Blaquire 的 answer 提出了 Coud Endpoints 或类似于我上面描述的代理。但是,Cloud Endpoints 要求在部署时知道后端服务(这些 Cloud 运行 服务不会),我想为用户提供 id 令牌,以便他们可以使用 curl
或其他一些工具来发出授权请求。
Cloud 运行 有一些令人信服的 Authenticate 文档(原文如此。)但我想要的东西介于:
- Authenticating users -- 我有 JWT,但我想接收云 运行 服务的 Google id 令牌
- Authenticating service-to-service answer. 中 Guillaume 的替代提案
与其将你的云 运行 放在云端点后面,你必须提前知道云 运行 实例,你可以在云中处理请求和身份验证 运行实例本身。
为了能够在 Cloud 运行 实例中处理 Firebase 身份验证令牌,必须对其进行设置,以便可以在未经身份验证的情况下调用它们。然后,在 Cloud 运行 内部,它应该启动一个 Web 服务器,解析传入的请求(注意 Authorization
header - Firebase Auth sample),然后执行操作或终止请求。
要实现这一点,请查看该线程代码所基于的 this thread for details on how you can handle both HTTP and service-service requests. Alternatively, you could just deploy the Functions Framework 图片。
如果您想要更简洁的 URL,请在单个 Cloud 运行 实例中托管多个端点,然后将该实例置于 Cloud Endpoints 之后,或者您可以使用类似 Firebase Hosting.