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-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"
]
【讨论】:
以上是关于AWS AppSync 与 Firebase 作为 OpenID Connect 提供商的主要内容,如果未能解决你的问题,请参考以下文章
Aurora PostgreSQL 可以与 AWS AppSync 一起使用吗?
Appsync oidc 与 auth0 作为授权返回未经授权