3

I'm trying to build an IFTTT service and connect it to my Firebase backend.

I need to authenticate user as indicated in the IFTTT docs: 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.

But I can only get short-lived access tokens from Firebase it seems. Where can I get or how can I generate such tokens from the Firebase auth SDK?


Update in response to @FrankvanPuffelen:

I'll create an IFTTT service running on a Node server (possibly simply Cloud Functions) that will use the Firebase RTDB to send formatted HTTP request back to IFTTT. IFTTT requires me to authorize user accounts. Their required UX is something like this:

  • If an IFTTT user tries to use my service on the IFTTT website,
  • an auth dialog for my service pops up.
  • The user logs in and confirms IFTTT's access to their data on my service.
  • Some OAuth 2.0 tokens are exchanged.
  • IFTTT servers will periodically send requests (authentified with those tokens) on behalf of the user to my server.

Part of the question is: Can I use the Firebase Auth API to get those tokens, etc. or do I need to create a new OAuth 2.0 "layer" with my own generated tokens for IFTTT?

PS: I'm very new to OAuth, so it's all a bit confusing to me, sorry if the question isn't very clear.

Community
  • 1
  • 1
now
  • 4,772
  • 2
  • 24
  • 26

2 Answers2

2

So IFTTT calls Cloud Functions, which then calls Realtime Database, and you want to authentication the IFTT user with Realtime Database. Is that correct? If so, you can either use an OAuth2 token or create a Firebase Authentication session cookie.

Use an OAuth2 token

I did this not too long ago for accessing the Realtime Database from Google Apps Script. The requirements are relatively simple (once you know them):

  1. The OAuth2 tokens must be requested with the correct scopes: https://www.googleapis.com/auth/userinfo.email and https://www.googleapis.com/auth/firebase.database.
  2. The OAuth2 access token must be present in the request to Realtime Database.
  3. The authenticated user must be at least an editor on the Firebase project. Note that this is not a Firebase Authentication user, but a Google user account.

Also see:

Use a Firebase Authentication session cookie

You can also use a Firebase Authentication session cookie, which can be longer-lived (up to 2 weeks) than a regular Firebase Authentication ID token (up to an hour). You'll want to set up a Cloud Function for creating the session cookie, call that from IFTTT, and then pass the session cookie with the IFTTT request and along to the Realtime Database.

For more on this, see:

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
  • Thanks Frank, once again you're my Firebase hero! I'm still figuring out what I want to do, so I'll keep digging with your knew info and come back here when I'm done – now Dec 23 '18 at 16:01
0

I'm posting my solution here, this is a rough draft of what I did at at the time.


I'm using this auth method: My API has users with non-expiring OAuth2 access tokens and have an Express server responding at a Firebase HTTPS Cloud Function endpoint. Currently, at the prototyping stage, it generates fake tokens from the UID that are successfully accepted by IFTTT.

It's a redirect-heavy authentification flow based on this old IFTTT api example: https://github.com/IFTTT/connect_with_ifttt_auth_sample

Here's the gist of it:

  • Tokens and Auth Codes are just randomized and encrypted UIDs for now.
  • /oauth/authorize redirects to my app.
  • The app asks the user if they want to authorize IFTTT
  • The app redirects to /oauth/authorize_user
  • /oauth/authorize_user generates a user-specific code and redirects the user to IFTTT with this code
  • IFTTT asks /oauth/token to exchange the code for a Bearer tokens.
  • IFTTT can now make requests on behalf of this user with this bearer token.

Sample code here: https://gist.github.com/nathanvogel/15ed311258b91d7ec3d25f44047780e2

now
  • 4,772
  • 2
  • 24
  • 26