如何对Firebase用户进行IFTTT服务身份验证?

时间:2018-12-22 17:59:48

标签: firebase firebase-realtime-database oauth-2.0 firebase-authentication ifttt

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

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

  

IFTTT的协议支持OAuth2身份验证,包括对   如果需要,刷新令牌。

     

您的服务API应该使用访问令牌进行身份验证,并作为   身份来源。单个访问令牌应对应于一个   服务上的单个用户帐户或资源所有者。

     

如果使用刷新令牌,则它们必须是未过期的。如果刷新   令牌未使用,访问令牌必须未过期。

但是我似乎只能从Firebase获得短暂的访问令牌。从Firebase身份验证SDK哪里可以获得或如何生成此类令牌?


根据@FrankvanPuffelen的更新:

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

  • 如果IFTTT用户尝试在IFTTT网站上使用我的服务,
  • 弹出我的服务的身份验证对话框。
  • 用户登录并确认IFTTT对他们在我的服务上的数据的访问。
  • 某些OAuth 2.0令牌已交换。
  • IFTTT服务器将代表用户定期向我的服务器发送请求(使用这些令牌进行身份验证)。

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

PS:我对OAuth还是很陌生,所以这一切令我感到困惑,如果问题不太清楚,请对不起。

2 个答案:

答案 0 :(得分:0)

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

使用OAuth2令牌

我不久前这样做是为了从Google Apps脚本访问实时数据库。要求相对简单(一旦您知道它们):

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

另请参阅:

使用Firebase身份验证会话Cookie

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

有关此的更多信息,请参见:

答案 1 :(得分:0)

我暂时在这里发布我的解决方案,当我确定它可以实现我所需的一切时,我会接受它。如果有人对在这种情况下如何生成相关令牌/验证码有任何建议,欢迎您!


我正在使用此auth方法:我的API的用户具有未过期的OAuth2访问令牌,并且有一个Express服务器在Firebase HTTPS Cloud Function端点处进行响应。目前,它在原型设计阶段会从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