首页 > 解决方案 > AWS AppSync 与 Firebase 作为 OpenID Connect 提供商

问题描述

我想使用 firebase auth 来保护我的 AWS AppSync graphql api,而不是像 Cognito 这样的东西。这背后有几个原因,比如定价,我们已经在使用其他一些 Firebase 服务。

我能看到 atm 的唯一可行的解​​决方案是以某种方式将 firebase 用户令牌传递给我的 AppSync graphql api 并通过 OpenID Conneect / OIDC 对其进行验证。

我无法弄清楚这一点,也找不到有关该主题的任何指南,所以想在这里问一下是否有可能,如果可以,是否可以提供任何示例或可能有用的参考资料?

以下是根据 OpenID 连接数据需要向 AppSync 提供的相关字段https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-appsync.OpenIdConnectConfig.html

这些是否存在用于firebase身份验证?

更新:我能够找到一些关于 firebase 令牌验证的文档 https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library

我相信以下 URL 需要在 AppSync https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com中用作 OpenID url 设置

但是 AppSync 文档声明它们附加/.well-known/openid-configuration到这样的 url,当我对上面的 googleapis url 执行此操作时,它会抛出 404。

标签: amazon-web-servicesfirebasefirebase-authenticationopenid-connectaws-appsync

解决方案


AppSync 需要一个 OpenID Connect 提供程序 (OP)。更具体地说,它想要 OP 的发行人;基于此检索其余元数据。来自 AppSync文档

OPENID_CONNECT 授权

此授权类型强制执行由符合 OIDC 的服务提供的 OpenID Connect (OIDC) 令牌。您的应用程序可以利用您的 OIDC 提供商定义的用户和权限来控制访问。

URL 是您提供给 AWS AppSync的Issuer唯一必需配置值(例如,https://auth.example.com)。此 URL 必须可通过 HTTPS 寻址。AWS AppSync 附加 /.well-known/openid-configuration到颁发者 URL 并 https://auth.example.com/.well-known/openid-configuration根据 OpenID Connect 发现规范定位 OpenID 配置

Firebase(主要)是一个中间件。即使您可以让用户帐户驻留在 Firebase 中,更典型的用例是将某些提供商(例如 Google 或 Microsoft)插入 Firebase。然后,您可以使用 Firebase API 执行各种操作,而无需了解底层提供者的详细信息。

无论是充当中间件还是充当 Firebase 中用户的身份存储,Firebase 是否是符合 OIDC 的提供商都不清楚。OpenID 发布 OIDC 一致性测试以及已通过认证的实体。后一个列表中唯一的 Google 实体是“Google 联合身份”。除了认证之外,Firebase 确实发布了一个签名的 JWT,根据他们的说法,这在道德上等同id_token于 OIDC:

ID令牌验证

如果您的 Firebase 客户端应用程序与您的后端服务器通信,您可能需要识别服务器上当前登录的用户,以便您可以代表他们执行服务器端逻辑。您可以使用 ID 令牌安全地执行此操作,该令牌由 Firebase 在用户登录 Firebase 应用程序时创建。

ID 令牌符合 OpenID Connect 规范并包含用于识别用户的数据,以及其他一些配置文件和身份验证相关信息。您可以从自己的后端发送、验证和检查这些令牌。这使您可以安全地识别当前登录的用户并授权他们进入您自己的后端资源。

如果您创建一个 Firebase 项目,然后通过该项目进行身份验证并检查颁发的令牌,您将iss在令牌有效负载中看到 (Issuer) 密钥。它的值为 ,https://securetoken.google.com/<Firebase projectId>这就是 AppSync 所需的 URL。

/.well-known/openid-configuration您可以通过与https://securetoken.google.com/<Firebase projectId>生成的 URL 连接并执行 GET来确认 OIDC 元数据可用。预期的响应应如下所示:

{
  "issuer": "https://securetoken.google.com/<Firebase project id>",
  "jwks_uri": "https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com",
  "response_types_supported": [
    "id_token"
  ],
  "subject_types_supported": [
    "public"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ]
}

推荐阅读