在众所周知的If This Then That app (IFTTT)中,您可以创建工作流程,例如:
如果我收到带有附件的电子邮件,请将该附件添加到Evernote。
为此,您可以授权所谓的“ channels”,例如Gmail和Evernote。实际上,这意味着您需要输入用户名和密码(例如Gmail),然后IFTTT应用程序可以自由扫描其中的传入电子邮件。
我现在想知道这个系统如何工作? iOS / Android中是否有特定的API,以允许具有特定触发器的应用程序之间在接收电子邮件后进行此类交互,或者IFTTT是否将用户名和密码以明文形式存储并定期轮询电子邮件箱(我无法想象)?
有人能进一步阐明这个过程的内部运作方式吗?任何信息或提示都将受到欢迎(描述,API端点的名称,代码示例,实现此目的的FLOSS替代品,等等)。
最佳答案
每个提供程序都会有所不同,但是其中很多(包括Gmail流)都将OAuth用于身份验证部分。验证后,他们将使用每个单独服务提供的任何API。
Gmail的提示是将您重定向到Google进行身份验证的方式,URL中包含“ OAuth”。我刚尝试时,身份验证URL为:https://accounts.google.com/o/oauth1/auth?oauth_callback=http%3A%2F%2Fifttt.com%2Fchannels%2Fgoogle_callback&oauth_token=[REDACTED]&btmpl=mobile
将会发生的事情是Google将对您的凭据进行身份验证,因此永远不会将它们提供给IFTTT这样的第三方。取而代之的是,在成功通过身份验证后,Google会在提供的“ oath_callback” URL上“回调” ifttt,并有效地为他们提供允许访问的令牌。在任何时候,您都可以撤消该令牌(在Gmail的首选项中的某个位置),以防止IFTTT访问您的帐户,因此对您帐户的控制权始终在您和Google的手中,而IFTTT只要获得授权就可以令牌持续。 (这里是Gmail's auth scopes)。您的用户名和密码仅通过Google的服务器进行身份验证,而不会由第三方存储。
与身份验证一样,身份验证一旦完成,IFTTT如何监视和响应事件取决于特定服务的API。在某些情况下,他们会轮询,可能的话,他们可能会注册事件回调。根据Linden Tibbets的this Quora answer,one of IFTTT's creators,对于Gmail,他们使用OAuth来获取IMAP登录名,然后将其用于轮询。