如何向 IFTTT 服务验证 Firebase 用户?

How to authenticate a Firebase user to an IFTTT service?

我正在尝试构建 IFTTT 服务并将其连接到我的 Firebase 后端。

我需要按照 IFTTT 文档中的指示对用户进行身份验证: https://platform.ifttt.com/docs/api_reference#service-authentication

IFTTT’s protocol supports OAuth2 authentication, including support for refresh tokens if so desired.

Your service API should use access tokens for authentication and as a source of identity. A single access token should correspond to a single user account or resource owner on your service.

If refresh tokens are used, they must be non-expiring. If refresh tokens are not used, access tokens must be non-expiring.

但我似乎只能从 Firebase 获得短期访问令牌。我从哪里可以获得或如何从 Firebase auth SDK 生成此类令牌?


更新以回应@FrankvanPuffelen:

我将在节点服务器(可能只是 Cloud Functions)上创建一个 IFTTT 服务 运行,该服务将使用 Firebase RTDB 将格式化的 HTTP 请求发送回 IFTTT。 IFTTT 要求我授权用户帐户。他们所需的用户体验是这样的:

问题的一部分是:我可以使用 Firebase Auth API 获取这些令牌等,还是需要使用我自己为 IFTTT 生成的令牌创建一个新的 OAuth 2.0“层”?

PS: 我是 OAuth 的新手,所以对我来说有点困惑,如果问题不是很清楚,请见谅。

所以 IFTTT 调用 Cloud Functions,然后调用 Realtime Database,并且您想使用 Realtime Database 对 IFTT 用户进行身份验证。那是对的吗?如果是这样,您可以使用 OAuth2 令牌或创建 Firebase 身份验证会话 cookie。

使用 OAuth2 令牌

我不久前为了从 Google Apps 脚本访问实时数据库而这样做。要求比较简单(只要你知道):

  1. 必须使用正确的范围请求 OAuth2 令牌:https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/firebase.database
  2. OAuth2 访问令牌必须出现在对实时数据库的请求中。
  3. 经过身份验证的用户必须至少是 Firebase 项目的编辑者。请注意,这不是 Firebase 身份验证用户,而是 Google 用户帐户。

另见:

使用 Firebase 身份验证会话 cookie

您还可以使用 Firebase 身份验证会话 cookie,它比常规 Firebase 身份验证 ID 令牌(最多 1 小时)的寿命更长(最多 2 周)。您需要设置一个云函数来创建会话 cookie,从 IFTTT 调用它,然后将会话 cookie 与 IFTTT 请求一起传递到实时数据库。

有关这方面的更多信息,请参阅:

我把我的解决方案贴在这里,这是我当时所做的粗略草稿。


我正在使用此身份验证方法:我的 API 的用户具有未过期的 OAuth2 访问令牌 并且有一个 Express 服务器响应 Firebase HTTPS 云函数端点。目前,在原型设计阶段,它会根据 UID 生成假令牌,并成功被 IFTTT 接受。

这是一个基于旧 IFTTT api 示例的重重定向身份验证流程:https://github.com/IFTTT/connect_with_ifttt_auth_sample

要点如下:

  • 令牌和授权码目前只是随机加密的 UID。
  • /oauth/authorize 重定向到我的应用。
  • 应用询问用户是否要授权 IFTTT
  • 应用重定向到 /oauth/authorize_user
  • /oauth/authorize_user 生成用户特定代码并使用此代码将用户重定向到 IFTTT
  • IFTTT 要求 /oauth/token 将代码交换为 Bearer 令牌。
  • IFTTT 现在可以使用此不记名令牌代表此用户发出请求。

这里是示例代码:https://gist.github.com/nathanvogel/15ed311258b91d7ec3d25f44047780e2