AWS AppSync 与 Firebase 作为 OpenID Connect 提供商

Posted

技术标签:

【中文标题】AWS AppSync 与 Firebase 作为 OpenID Connect 提供商【英文标题】:AWS AppSync with Firebase as OpenID Connect provider 【发布时间】:2021-03-10 23:57:07 【问题描述】:

我想使用 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。

【问题讨论】:

Firebase 作为 OpenID Connect 提供者 - 发行者是 https://securetoken.google.com/<Firebase projectId> 。这就是 AppSync 想要的 URL。 @identigral 太棒了!您是否愿意将此作为答案提供更多细节,以便将来对其他人有用,以便我可以奖励您? 【参考方案1】:

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

OPENID_CONNECT 授权

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

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

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

无论是充当中间件还是充当 Firebase 中用户的身份存储,Firebase 是否是符合 OIDC 的提供程序尚不清楚。 OpenID 发布 OIDC 一致性测试以及entities that have been certified。后一个列表中唯一的 Google 实体是“Google 联合身份”。除了认证之外,Firebase 确实发布了一个签名的 JWT,according to them 在道德上等同于 OIDC 中的 id_token

ID 令牌验证

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

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

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

您可以通过将/.well-known/openid-configurationhttps://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"
  ]

【讨论】:

以上是关于AWS AppSync 与 Firebase 作为 OpenID Connect 提供商的主要内容,如果未能解决你的问题,请参考以下文章

Aurora PostgreSQL 可以与 AWS AppSync 一起使用吗?

使用 AWS AppSync 进行输入验证

Appsync oidc 与 auth0 作为授权返回未经授权

连接 AWS Appsync Graphql Link 作为 Gatsbyjs 数据源

将 aws-appsync 与 nextjs 连接

将 AWS Appsync 与 AWS Neptune 结合使用