Google Workspace

This guide will show you how to integrate GoodAccess with Google Workspace SSO/SCIM.

This feature is available in the Premium plan and higher.

Remember to grant your Google users access permissions to GoodAccess. Users without them won't be able to log in.

Step 1 - Adding a new identity provider

Log in to the GoodAccess Control Panel, and go to Settings > SSO & MFA.

Click + Add provider, enter the Provider name, choose your Identity Provider, and click Continue.

Step 2 - Setting up Single Sign-On with SAML

Log in to the Google Admin console, and go to Apps > Web and mobile apps.

Click Add App, and Add custom SAML app.

1. App details

Give the appplication a name, upload a logo, and click Continue.

2. Google Identity Provider details

Copy the details to GoodAccess - (3) Identity Provider links, and click Continue.

  • Sign in URL - SSO URL

  • Entity ID - Entity ID

  • X509 signing certificate - Certificate

3. Service provider details

Copy the details from GoodAccess - (2) GoodAccess links, and click Continue.

  • ACS URL - Assertion Consumer Service URL

  • Entity ID - Entity ID

  • Start URL - Login URL

  • Name ID format - UNSPECIFIED

  • Name ID - Basic Information > Primary email

4. Attribute mapping

Click ADD MAPPING, and add two attributes as follows:

Google Directory attributesApp attributes

Primary email

"email" (without quotes)

First name

"name" (without quotes)

Click Finish to confirm your settings.

If you want to set up SCIM, save the Provider ID for the next step, and click Submit.

If you don't want to set up SCIM, skip the next step in GoodAccess, and click Submit to finish the configuration.

You have now successfully set up your Google Workspace SSO with GoodAccess.

Step 3 (optional) - Setting up SCIM using an API

Since SCIM for Google Workspace is not currently supported for public use, it's necessary to use a combination of Google Apps Script and GoodAccess API Integration for complete user management.

The user provisioning time period depends on the Trigger settings (default is 1 hour).

1. Creating a new API Integration

In the GoodAccess Control Panel, go to Settings > API Integration.

Create a new API Integration with the scopes specified below, and securely save the Token for the next step.

  • Members

    • Create

    • Update

    • Remove

2. Creating the Google Apps Script

Go to Google Apps Script, and click New Project.

Copy the following code snippet and paste it into the code editor in Google Apps Script:

For the code to function correctly, you need to replace the following values in the code:

  • <DOMAIN_NAME> - The verified domain of your organization in Google Workspace (e.g. goodaccess.com)

  • <PROVIDER_ID> - The Provider ID you obtained in the final step of the GoodAccess SSO configuration form

  • <INTEGRATION_TOKEN> - The Token you obtained when creating the API Integration

var domain            = '<DOMAIN_NAME>';
var providerId        = '<PROVIDER_ID>'
var integrationToken  = '<INTEGRATION_TOKEN>'

function syncUsers(){
  sendRequest(
    getAllUsers(),
    getGroups()
  )
}
function sendRequest(users, groups) {
  var apiUrl = 'https://integration.goodaccess.com/api/v1/google-workspace/sync-users';
  
  // Creating Request payload
  var payload = {
    'domain': domain,
    'users': users,
    'groups': groups,
    'provider_id': providerId
  };
  
  // Setting up details of request
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': {
      'authorization': integrationToken
    },
    'payload': JSON.stringify(payload)
  };
  
  // Sending Request
  var response = UrlFetchApp.fetch(apiUrl, options);
  if (response.getResponseCode() == 200) {
    Logger.log('The API request was successfully sent.');
  } else {
    Logger.log("Error sending API request. Response code:" + response.getResponseCode());
  }
}

//Getting all domain groups
function getGroups(){
    var workSpaceGroups = GroupsApp.getGroups();
    var groups = {};
    
    workSpaceGroups.forEach(function(workSpaceGroup) {
    var groupEmail = workSpaceGroup.getEmail();
    if (!groups[groupEmail]) {
      groups[groupEmail] = [];
    }

    var members = workSpaceGroup.getUsers();
    members.forEach(function(member) {
      groups[groupEmail].push(member.getEmail());
    });
  });
  return groups;
}

//Getting all domain users
function getAllUsers() {
  var service = AdminDirectory.Users;
  var users = service.list({
    domain: domain, 
    maxResults: 100 
  });
  return users.users;
}

Click + to add a service, and add Admin SDK API.

3. Creating a trigger for the script

In the left menu, go to Triggers, and click + Add Trigger.

  • Choose which function to run - syncUsers()

  • Choose which doployment should run - Head

  • Select event source - Time-driven

  • Select type of time based trigger - Hour timer

  • Select hour interval - Every hour

Click Save.

You have now successfully set up Google Workspace SCIM with GoodAccess.

Step 4 - Managing user access

In the application click User access.

Choose who should have access, select ON, and click Save.

Last updated