From 676aa9a95ef60236aff7519121be12ab99a12bd5 Mon Sep 17 00:00:00 2001 From: Hunter Achieng Date: Fri, 8 May 2026 11:47:28 +0300 Subject: [PATCH 1/5] feat: add oauth docs for sheets and salseforce Signed-off-by: Hunter Achieng --- adaptors/googledrive.md | 41 ++++++++++++++++++++--- adaptors/googlesheets.md | 24 +++++++++++++ docs/build/credentials.md | 9 +++-- static/img/googledrive-access-token.webp | Bin 0 -> 26974 bytes static/img/googledrive-oauth2.webp | Bin 0 -> 46456 bytes static/img/gsheets-oauth2.webp | Bin 0 -> 42842 bytes 6 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 static/img/googledrive-access-token.webp create mode 100644 static/img/googledrive-oauth2.webp create mode 100644 static/img/gsheets-oauth2.webp diff --git a/adaptors/googledrive.md b/adaptors/googledrive.md index 6d17aeba691..d93a4b62742 100644 --- a/adaptors/googledrive.md +++ b/adaptors/googledrive.md @@ -12,7 +12,18 @@ title: Google Drive Adaptor ## Authentication -Google Drive uses OAuth 2.0 access tokens for API authentication: +Google Drive supports two credential types in OpenFn: **OAuth2** and a raw **access token**. + +### OAuth2 + +For interactive workflows where a user authorizes access, you can connect via OAuth2. To authorize Google Drive for your OpenFn workflows, read our documentation on +[using OAuth credentials](/documentation/build/credentials#use-oauth2-credentials). + +![Google Drive OAuth credential](/img/googledrive-oauth2.webp) + +### Access Token + +For workflows using a pre-generated access token (e.g. from a service account or Google Cloud Console), provide the token directly: ```json { @@ -20,10 +31,32 @@ Google Drive uses OAuth 2.0 access tokens for API authentication: } ``` -**Authentication Components:** -- **access_token**: OAuth 2.0 access token obtained through Google's authentication flow +Access tokens provide scoped access to Google Drive resources based on the permissions granted during the OAuth flow. + +![Google Drive access token credential](/img/googledrive-access-token.webp) + +### Using a Google Service Account + +For automated, unattended workflows we recommend using a +[Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) +instead of a personal user OAuth credential. Service accounts are designed for +machine-to-machine access and do not require a human login or interactive +consent flow, making them more reliable and auditable for integration workflows. + +When setting up a service account for Google Drive: + +- Grant only the scopes your workflow requires. For example, if the workflow + only reads files, restrict the account to + `https://www.googleapis.com/auth/drive.readonly` rather than full + `drive` access. +- Share the specific Drive folder(s) or file(s) with the service account's + email address (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) + at the appropriate permission level (Viewer for read-only, Editor for write + access). -Access tokens can be generated through Google Cloud Console and provide scoped access to Google Drive resources based on the permissions granted during the OAuth flow. +See the [Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) +for broader guidance on why dedicated integration users and service accounts are +recommended for all OpenFn workflows. diff --git a/adaptors/googlesheets.md b/adaptors/googlesheets.md index 5faf5e7ab7e..7441ea995a4 100644 --- a/adaptors/googlesheets.md +++ b/adaptors/googlesheets.md @@ -16,6 +16,8 @@ default OpenFn Google OAuth client or choose to To authorize Google Sheets for your OpenFn workflows, read our documentation on [using OAuth credentials](/documentation/build/credentials#use-oauth2-credentials). +![Google Sheets OAuth credential](/img/gsheets-oauth2.webp) + :::info Google Oauth Client Setup Tips for Super Users Setting up your own generic OAuth client requires that you have an OAuth @@ -48,6 +50,28 @@ for the latest information. need to use the full URL, e.g., `https://www.googleapis.com/auth/spreadsheets`) +### Using a Google Service Account + +For automated, unattended workflows we recommend using a +[Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) +instead of a personal user OAuth credential. Service accounts are designed for +machine-to-machine access and do not require a human login or interactive +consent flow, making them more reliable and auditable for integration workflows. + +When setting up a service account for Google Sheets: + +- Grant only the scopes your workflow requires. For example, if the workflow + only reads data, restrict the account to + `https://www.googleapis.com/auth/spreadsheets.readonly` rather than full + `spreadsheets` access. +- Share the specific Google Sheet(s) with the service account's email address + (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) at the + appropriate permission level (Viewer for read-only, Editor for write access). + +See the [Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) +for broader guidance on why dedicated integration users and service accounts are +recommended for all OpenFn workflows. + ## Integration Options There are a couple of primary ways to integrate with this app, each catering to diff --git a/docs/build/credentials.md b/docs/build/credentials.md index 328b37160b2..b631a4eaaa9 100644 --- a/docs/build/credentials.md +++ b/docs/build/credentials.md @@ -77,7 +77,7 @@ Users of the hosted OpenFn platform SaaS can post on Note the credential selects only required scopes for Google Sheets. -![Google OAuth](/img/google-oauth2.webp) +![Google Sheets OAuth](/img/gsheets-oauth2.webp) #### e.g., Salesforce OAuth Credential @@ -101,8 +101,11 @@ application. You _can_ use your personal user as an OpenFn credential for your workflow, but we recommend that you create a dedicated "OpenFn" integration user or service account user to access your target applications. For example, in -Salesforce, you can create an API-only user with a special API-only license type -to perform automated tasks and integrations without requiring full user access. +[Salesforce](/adaptors/salesforce#salesforce-credentials), you can create an +API-only user with a special API-only license type to perform automated tasks +and integrations without requiring full user access. For Google APIs such as +[Google Sheets](/adaptors/googlesheets#using-a-google-service-account), a +Google Service Account is the recommended approach for automated workflows. API-only users might not be available in every target system, but many do offer the creation of user roles that have API-only access permissions, and may allow you diff --git a/static/img/googledrive-access-token.webp b/static/img/googledrive-access-token.webp new file mode 100644 index 0000000000000000000000000000000000000000..e994302ef9529c9b6e340ca213e4e455f9e819b4 GIT binary patch literal 26974 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 literal 0 HcmV?d00001 diff --git a/static/img/googledrive-oauth2.webp b/static/img/googledrive-oauth2.webp new file mode 100644 index 0000000000000000000000000000000000000000..bdc0bd73e5d7fa10f744898ae2d00950e6efe72a GIT binary patch literal 46456 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 z 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 literal 0 HcmV?d00001 From 78724e1f4761939a545c777ad38f296422f12c6d Mon Sep 17 00:00:00 2001 From: Hunter Achieng Date: Fri, 8 May 2026 12:32:37 +0300 Subject: [PATCH 2/5] update health image and add link to oauth scopes Signed-off-by: Hunter Achieng --- adaptors/googledrive.md | 8 +++--- adaptors/googlehealthcare.md | 24 ++++++++++++++++++ adaptors/googlesheets.md | 8 +++--- static/img/googlehealthcare-access-token.webp | Bin 0 -> 28548 bytes 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 static/img/googlehealthcare-access-token.webp diff --git a/adaptors/googledrive.md b/adaptors/googledrive.md index d93a4b62742..78969c7b737 100644 --- a/adaptors/googledrive.md +++ b/adaptors/googledrive.md @@ -45,10 +45,10 @@ consent flow, making them more reliable and auditable for integration workflows. When setting up a service account for Google Drive: -- Grant only the scopes your workflow requires. For example, if the workflow - only reads files, restrict the account to - `https://www.googleapis.com/auth/drive.readonly` rather than full - `drive` access. +- Grant only the scopes your workflow requires, following the principle of + least privilege. See + [Google's documentation on OAuth scopes](https://developers.google.com/identity/protocols/oauth2/scopes#drive) + for the available Drive scopes. - Share the specific Drive folder(s) or file(s) with the service account's email address (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) at the appropriate permission level (Viewer for read-only, Editor for write diff --git a/adaptors/googlehealthcare.md b/adaptors/googlehealthcare.md index 71723ed044e..d214adbe49b 100644 --- a/adaptors/googlehealthcare.md +++ b/adaptors/googlehealthcare.md @@ -25,6 +25,30 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag } ``` +![Google Cloud Healthcare access token credential](/img/googlehealthcare-access-token.webp) + +### Using a Google Service Account + +For automated, unattended workflows we recommend using a +[Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) +to generate the access token rather than using a personal user credential. +Service accounts are designed for machine-to-machine access, do not require a +human login, and provide a clear audit trail which is particularly important for +healthcare data integrations. + +When setting up a service account for Google Cloud Healthcare: + +- Grant only the IAM roles your workflow requires, following the principle of + least privilege. See + [Google Cloud IAM roles for Healthcare](https://cloud.google.com/healthcare-api/docs/access-control) + for the available roles. +- Generate a short-lived access token from the service account to use as your + OpenFn credential, rather than a long-lived personal token. + +See the [Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) +for broader guidance on why dedicated integration users and service accounts are +recommended for all OpenFn workflows. + ### Helpful Links 1. [Google Cloud Healthcare API Documentation](https://cloud.google.com/healthcare-api) diff --git a/adaptors/googlesheets.md b/adaptors/googlesheets.md index 7441ea995a4..5e6caff9967 100644 --- a/adaptors/googlesheets.md +++ b/adaptors/googlesheets.md @@ -60,10 +60,10 @@ consent flow, making them more reliable and auditable for integration workflows. When setting up a service account for Google Sheets: -- Grant only the scopes your workflow requires. For example, if the workflow - only reads data, restrict the account to - `https://www.googleapis.com/auth/spreadsheets.readonly` rather than full - `spreadsheets` access. +- Grant only the scopes your workflow requires, following the principle of + least privilege. See + [Google's documentation on OAuth scopes](https://developers.google.com/identity/protocols/oauth2/scopes#sheets) + for the available Sheets scopes. - Share the specific Google Sheet(s) with the service account's email address (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) at the appropriate permission level (Viewer for read-only, Editor for write access). diff --git a/static/img/googlehealthcare-access-token.webp b/static/img/googlehealthcare-access-token.webp new file mode 100644 index 0000000000000000000000000000000000000000..a18119d6c294f590f3dfff64d3f7833a4ed31695 GIT binary patch literal 28548 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 literal 0 HcmV?d00001 From 9e231cbef52dbe850d9e69d0091c49c21564009f Mon Sep 17 00:00:00 2001 From: Hunter Achieng Date: Tue, 26 May 2026 17:30:00 +0300 Subject: [PATCH 3/5] fix gdrive docs Signed-off-by: Hunter Achieng --- adaptors/googledrive.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adaptors/googledrive.md b/adaptors/googledrive.md index 78969c7b737..7fc7c5689f9 100644 --- a/adaptors/googledrive.md +++ b/adaptors/googledrive.md @@ -16,14 +16,14 @@ Google Drive supports two credential types in OpenFn: **OAuth2** and a raw **acc ### OAuth2 -For interactive workflows where a user authorizes access, you can connect via OAuth2. To authorize Google Drive for your OpenFn workflows, read our documentation on +To authorize Google Drive using OAuth2 for your OpenFn workflows, read our documentation on [using OAuth credentials](/documentation/build/credentials#use-oauth2-credentials). ![Google Drive OAuth credential](/img/googledrive-oauth2.webp) ### Access Token -For workflows using a pre-generated access token (e.g. from a service account or Google Cloud Console), provide the token directly: +You can generate an access token via google cloud console or from a service account, then provide the token directly: ```json { From 37d60c2d412de20796d70cd64808bab7d8ac7ba8 Mon Sep 17 00:00:00 2001 From: Hunter Achieng Date: Thu, 28 May 2026 14:27:05 +0300 Subject: [PATCH 4/5] fix: update google apps related docs Signed-off-by: Hunter Achieng --- adaptors/googledrive.md | 7 ++++--- adaptors/googlehealthcare.md | 2 +- adaptors/googlesheets.md | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/adaptors/googledrive.md b/adaptors/googledrive.md index 7fc7c5689f9..727ac73acb8 100644 --- a/adaptors/googledrive.md +++ b/adaptors/googledrive.md @@ -12,7 +12,8 @@ title: Google Drive Adaptor ## Authentication -Google Drive supports two credential types in OpenFn: **OAuth2** and a raw **access token**. +Google Drive uses OAuth 2.0 access tokens for API authentication: + ### OAuth2 @@ -23,7 +24,7 @@ To authorize Google Drive using OAuth2 for your OpenFn workflows, read our docum ### Access Token -You can generate an access token via google cloud console or from a service account, then provide the token directly: +If you need to test the adaptor locally you, you can generate a 1hour token using gcloud cli, then provide the token directly: ```json { @@ -37,7 +38,7 @@ Access tokens provide scoped access to Google Drive resources based on the permi ### Using a Google Service Account -For automated, unattended workflows we recommend using a +We recommend using a [Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) instead of a personal user OAuth credential. Service accounts are designed for machine-to-machine access and do not require a human login or interactive diff --git a/adaptors/googlehealthcare.md b/adaptors/googlehealthcare.md index d214adbe49b..739258c623b 100644 --- a/adaptors/googlehealthcare.md +++ b/adaptors/googlehealthcare.md @@ -29,7 +29,7 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### Using a Google Service Account -For automated, unattended workflows we recommend using a +We recommend using a [Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) to generate the access token rather than using a personal user credential. Service accounts are designed for machine-to-machine access, do not require a diff --git a/adaptors/googlesheets.md b/adaptors/googlesheets.md index 5e6caff9967..580fe23afae 100644 --- a/adaptors/googlesheets.md +++ b/adaptors/googlesheets.md @@ -52,7 +52,7 @@ for the latest information. ### Using a Google Service Account -For automated, unattended workflows we recommend using a +We recommend using a [Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) instead of a personal user OAuth credential. Service accounts are designed for machine-to-machine access and do not require a human login or interactive From c89ec9dc095db171a69161a54c34db8f8993bbc4 Mon Sep 17 00:00:00 2001 From: Emmanuel Evance Date: Tue, 2 Jun 2026 11:07:25 +0300 Subject: [PATCH 5/5] wip update docs --- adaptors/googledrive.md | 94 ++++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 35 deletions(-) diff --git a/adaptors/googledrive.md b/adaptors/googledrive.md index 727ac73acb8..b82de55805c 100644 --- a/adaptors/googledrive.md +++ b/adaptors/googledrive.md @@ -4,27 +4,72 @@ title: Google Drive Adaptor ## About Google Drive -[Google Drive](https://www.google.com/drive/) is Google's cloud-based file storage and synchronization service that allows users to store files online and access them from any computer or mobile device. Google Drive provides secure cloud storage, real-time collaboration capabilities, and seamless integration with Google Workspace applications including Docs, Sheets, and Slides. +[Google Drive](https://www.google.com/drive/) is Google's cloud-based file +storage and synchronization service that allows users to store files online and +access them from any computer or mobile device. Google Drive provides secure +cloud storage, real-time collaboration capabilities, and seamless integration +with Google Workspace applications including Docs, Sheets, and Slides. ## Integration Options -**REST API**: Google Drive provides comprehensive REST APIs through the Google Drive API, enabling developers to create, read, update, and manage files and folders programmatically. The API supports OAuth 2.0 authentication and provides access to metadata, content manipulation, and sharing permissions management. +**REST API**: Google Drive provides comprehensive REST APIs through the Google +Drive API, enabling developers to create, read, update, and manage files and +folders programmatically. The API supports OAuth 2.0 authentication and provides +access to metadata, content manipulation, and sharing permissions management. ## Authentication -Google Drive uses OAuth 2.0 access tokens for API authentication: +Google Drive authentication requires an access token, which can be obtained in +two ways: via a [Google Service Account](#google-service-account-recommended) +(recommended) or via [OAuth2](#oauth2) using a personal Google account. +### Google Service Account (Recommended) + +We strongly recommend using a +[Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) +for production workflows. A service account is a dedicated, non-personal Google +identity designed for machine-to-machine access — similar to an API-only user in +Salesforce. It does not require anyone to log in with their personal Gmail +account, and it won't break if someone changes their password or loses access. + +When setting up a service account for Google Drive: + +- Grant only the scopes your workflow requires, following the principle of least + privilege. See + [Google's documentation on OAuth scopes](https://developers.google.com/identity/protocols/oauth2/scopes#drive) + for the available Drive scopes. +- Share the specific Drive folder(s) or file(s) with the service account's email + address (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) at the + appropriate permission level (Viewer for read-only, Editor for write access). + +See the +[Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) +for broader guidance on why dedicated integration users and service accounts are +recommended for all OpenFn workflows. ### OAuth2 -To authorize Google Drive using OAuth2 for your OpenFn workflows, read our documentation on +OpenFn has a built-in **GoogleDrive** OAuth credential type that handles the +OAuth 2.0 flow for you. This works with any Google user account — personal Gmail +or Google Workspace — but keep in mind the integration is tied to whichever +account completes the authorization. If that person's access is revoked or they +leave the organization, the integration will break. + +To authorize Google Drive using OAuth2, read our documentation on [using OAuth credentials](/documentation/build/credentials#use-oauth2-credentials). ![Google Drive OAuth credential](/img/googledrive-oauth2.webp) -### Access Token +### Access Token (Local Testing Only) + +For local development and testing, you can generate a short-lived access token +(valid for 1 hour) using the `gcloud` CLI and provide it directly: + +```bash +gcloud auth print-access-token +``` -If you need to test the adaptor locally you, you can generate a 1hour token using gcloud cli, then provide the token directly: +Then set it as your credential: ```json { @@ -32,44 +77,23 @@ If you need to test the adaptor locally you, you can generate a 1hour token usin } ``` -Access tokens provide scoped access to Google Drive resources based on the permissions granted during the OAuth flow. - ![Google Drive access token credential](/img/googledrive-access-token.webp) -### Using a Google Service Account - -We recommend using a -[Google Service Account](https://cloud.google.com/iam/docs/service-accounts-create) -instead of a personal user OAuth credential. Service accounts are designed for -machine-to-machine access and do not require a human login or interactive -consent flow, making them more reliable and auditable for integration workflows. - -When setting up a service account for Google Drive: - -- Grant only the scopes your workflow requires, following the principle of - least privilege. See - [Google's documentation on OAuth scopes](https://developers.google.com/identity/protocols/oauth2/scopes#drive) - for the available Drive scopes. -- Share the specific Drive folder(s) or file(s) with the service account's - email address (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) - at the appropriate permission level (Viewer for read-only, Editor for write - access). - -See the [Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) -for broader guidance on why dedicated integration users and service accounts are -recommended for all OpenFn workflows. - - +This approach is not suitable for production as the token expires quickly and +must be manually refreshed. ## Helpful Links - - [Google Drive API Documentation](https://developers.google.com/drive/api) - [OpenFn Google Drive Adaptor Configuration](https://docs.openfn.org/adaptors/packages/googledrive-configuration-schema) - [OpenFn Google Drive Adaptor Docs](https://docs.openfn.org/adaptors/packages/googledrive-docs) ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/).