Synchronizing User Accounts with G Suite
In addition to adding users manually as described in chapter User Management, MailStore Server can synchronize its internal user database with the G Suite account of your organization.
During synchronization, user information, such as user names and email addresses, is copied from the G Suite account into MailStore Server's user database. That way, users can use their G Suite account credentials to also log on to MailStore Server and emails can be assigned to their corresponding user archives automatically, for example. No changes are made to the G Suite account itself by MailStore Server. The scope of the synchronization can be limited through filters.
Please note that on December 16th 2019 Google announced to limit access to G Suite accounts for less secure apps in the future. This affects any MailStore Server version prior to 13, which therefore will no longer be able to authenticate users against G Suite when trying to log into MailStore Server.
In MailStore Server 13, support for modern authentication methods via OAuth 2.0 & OpenID Connect as per Google's recommendation was introduced. Although MailStore Server 13 still comes with support for IMAP-based authentication, this document only covers the setup using modern authentication methods as required by Google in the future.
- 1 Prerequisites, Recommendations, Limitations
- 2 Register Project with Google
- 3 Grant Access on G Suite Account to Project
- 4 Configure MailStore Server
- 5 Assigning Default Privileges
- 6 Running Directory Services Synchronization
- 7 Login with G Suite Account Credentials
Prerequisites, Recommendations, Limitations
- To comply with Google's requirements for Authorized redirect URIs of OAuth 2.0 clients, MailStore Server must be accessible via an URI that ends with a public top-level domain. This does not necessarily mean that it must indeed be accessible from the Internet. Google uses the list from https://publicsuffix.org for validation.
- For best user experience, the certificate used by MailStore Server should be trusted by all client and the used Web Browsers. Using a certificate that is signed by an trusted certificate authority or using Let's Encrypt certificates is highly recommended.
- If users are supposed to login to MailStore Server from outside the organization's network without a VPN, using MailStore Client, MailStore Outlook Add-in, or the Web Access, the URIs mentioned in this article must be resolvable via DNS on the Internet and port-forwardings to the MailStore Server computer must be setup on the firewall or router if necessary.
- When using Google to authenticate users at login, accessing the archive via IMAP is not possible for technical reasons.
Register Project with Google
Irregardless of whether own or third-party applications such as MailStore are supposed to interact with a G Suite account through Google APIs, they must be registered as a project with Google first. This is necessary to ensure that access by external applications is limited to a necessary minimum and that each application uses its own set of credentials to authenticate with Google.
Create New Project
To register a project for MailStore Server with Google, proceed as follows:
- Go to the Google Developers Console.
- If prompted, login using a Google account of you G Suite organization. Logging in with a user that has admin privileges is highly recommend.
- If no project exists, click Create Project on the dashboard. Otherwise open the project list by clicking on the project drop-down in the header bar and click New project.
- Type in a meaningful name into the Project name field, e.g. MailStore Server.
- Verify that Organization matches the desired organization and adjust the Location if needed.
- Click on Create.
Once the project has been created, make sure that it is selected in the project drop-down list before proceeding.
Add API Libraries
- Open the Navigation menu (☰) and select APIs & Services > Library.
- In the API Library, search and enable the following APIs and services:
- Admin SDK
- Gmail API
Customize Consent Screen
- Open the Navigation menu and select APIs & Services > OAuth consent screen.
- Under User Type select Internal.
- Click Create
- Type in a meaningful name into the Application name field, e.g. "MailStore Server"
- Click Save.
Create Service Account
A service account is required for MailStore Server to authenticate with Google and request authorization to use certain Google APIs to synchronize users and group, and to access user mailboxes. The following steps describe the creation of such a service account.
- Open the Navigation menu (☰) and select APIs & Services > Credentials.
- Click + Create Credentials and select Service account from the drop-down list.
- On the Create service account page, enter a name for the service account, e.g. "MailStore Server Service".
- Enter a description such as "Service account for MailStore Server to synchronize users and access mailboxes"
- Click Create.
- The service account does not require permissions on project level, therefore do not select a role.
- Click Continue.
- Users do not need access to the service account, so no changes are needed in the Grant users access to this service account step.
- Click Done
- Back on the Credentials page, click on the newly created service account to open its properties.
- Under Keys click on Add Key and select Create new key.
- Select JSON as key type and click Create.
- The JSON file will be downloaded automatically. Save the JSON file in a secure location as it allows access to cloud resources of your organization.
- Click Close.
- Click Show Domain-wide Delegation.
- Tick the Enable G Suite Domain-wide Delegation box.
- Click Save.
On the Credentials page, there should be a service account listed under Service Accounts with a corresponding client listed under OAuth 2.0 Client IDs.
Create OAuth 2.0 Client for User Authentication
To allow users to log in to MailStore by authenticating with Google using the OpenID Connect mechanism, an OAuth 2.0 Client must be created as described below.
- Open the Navigation menu (☰) and select APIs & Services > Credentials.
- Click + Create Credentials and select OAuth client ID from the drop-down list.
- Select Web application as Application type.
- Enter a Name, e.g. "MailStore Server OpenID Connect".
- Click + Add URI under Authorized redirect URIs.
- Enter the URI that is reachable by clients in the URIs field using the the following scheme:
- with the following components
Specifying the protocol https:// is mandatory. To prevent certificate warnings later at login, the certificate used by MailStore Server must be trusted by all client and the used Web Browsers.
The fully qualified domain name of the MailStore Server computer, e.g. mailstore.example.com. This must be resolvable from all clients, from where users are supposed to log in to MailStore Server.
The TCP port of MailStore Web Access (default: 8462). This must match the port configured in MailStore Server Service Configuration#Services at Network Settings > Services > MailStore Web Access / Outlook Add-in (HTTPS). The TCP port is only required, if it different from the default port of the HTTPS protocol (443).
The path at which MailStore Server expects to receive then authentication response from Google via the web browser.
Examples of valid redirect URIs Computername DNS Domain TCP Port Resulting Redirect URI mailstore example.com 8462
Redirect URI with fully qualified domain name and MailStore Web Acces default port.
mailstore example.com 443
If the HTTPS default port 443 is used for MailStore Web Access or as source of a port forwarding rule on a firewall, specifying the port as part of the redirect URI can be omitted.
- Click Create to finish.
- Copy the client ID and client secret from the Your Client ID and Your Client Secret fields to a safe place (e.g. password safe or similar) and click OK.
Grant Access on G Suite Account to Project
Once created, grant the new project fine-grained access to your G Suite account by defining the Google APIs it is allowed to use.
- Open the Google Admin console and log in with a G Suite domain admin.
- Open the Navigation menu (☰) and select Security > API controls.
- Unter Domain wide delegation, click Manage domain wide delegation.
- On the Domain-wide delegation page, click Add new.
- Enter the Client ID of the OAuth 2.0 Client that is linked with the service account.
- Under OAuth Scope, add the following scopes:
- https://mail.google.com/, https://www.googleapis.com/auth/admin.directory.group.readonly, https://www.googleapis.com/auth/admin.directory.user.readonly
- Click Authorize.
Configure MailStore Server
After the project has been successfully set up on the Google side, MailStore Server can now be configured to synchronize and authenticate users with G Suite.
- Log on to MailStore Client as a MailStore Server administrator.
- Click on Administrative Tools > Users and Archives > Directory Services.
- In the Integration section, change the directory service type to G Suite.
For synchronization MailStore Server requires information on how to connect to the G Suite.
- Key ID
To import the private key, select the JSON file hat has been generated by Google for the service account in the Create Service Account step.
- Service Account
The service account is determined automatically from the JSON file.
- User Name
The email address of a G Suite Administrator (e.g. email@example.com).
User Database Synchronization
After configuring the connection settings as described above, you can specify filter criteria for the G Suite synchronization in this section.
- Sync only these groups
Choose one or several G Suite groups if you only want their members to be created as MailStore Server users. That way it's possible to exclude certain users from being synchronized to MailStore Server.
The authentication settings define how MailStore Server should authenticate users at login, that have been synchronized from G Suite.
Ensure that OpenID Connect is selected. As mentioned in the introduction, the IMAP option is only available for backward compatibility.
- Client ID
Enter the client ID from the Create OAuth_2.0 Client… step.
- Client Secret
Enter the client secret from the Create OAuth_2.0 Client… step.
- Redirect URI
Enter the same redirect URI as defined in the Create OAuth 2.0 Client… step .
- Automatically delete users in MailStore Server
Here you can choose whether users that have been deleted in the G Suite Account will also be deleted in the MailStore user database by the synchronization. If the archive folder of such a user already contains archived emails, only the user entry but not its archive folder will be deleted in MailStore. Additionally, only MailStore users that have their authentication method set to Directory Services will be deleted.
Assigning Default Privileges
By default, users that have been synchronized to MailStore Server from G Suite Account have the privilege to log on to MailStore Server as well as read access to their own user archive.
You can configure those default privileges before synchronization, for example, to assign the privilege Archive E-mail to all new users. To do this, click on Default Privileges...
More information on managing user privileges and their effects is available in the chapter Users, Folders and Settings which also has details on editing existing privileges.
Running Directory Services Synchronization
Click on Test Settings to check synchronization configuration and the results returned by the G Suite Account without any changes to the MailStore Server user database being actually committed.
To finally run the synchronization, click on Synchronize now. The results are shown with any changes committed to the MailStore Server user database.
You can test the authentication for a user by first selecting him from the list and then clicking on the button on the lower left. You will now be asked for that user's password. Upon clicking OK you'll receive a message whether the authentication has been successful.
Login with G Suite Account Credentials
After synchronization MailStore users can log on to MailStore Server with their G Suite Account username and G Suite Account password.