Skip to content

Configure Google as Authentication Provider using the SAML2 Protocol

Here are step by step instructions for federating authentication from Cognito to Google using the SAML2 protocol

Google Admin

  • Login to Google Workspaces as an Admin and bring up the Admin console
  • Click on Apps and then clikc on Web and mobile apps
  • Click on Add App and then choose Add custom SAML app

Name the app

Provide a name for the app (e.g. InfinStor) and a description

Download IdP Metadata

Download IdP metadata in the next screen. The download file is likely to be called GoogleIDPMetadata.xml. Click next

ACS URL and Entity ID

Two important configuration items are required here:

ACS URL a.k.a redirect URL

Google calls it ACS URL and AWS Cognito calls it Redirect URL. In any case, this URL is of the format https://your-cognito-domain.auth.aws-region.amazoncognito.com/saml2/idpresponse. For example, a cognito domain service-ai-isstage4.com in region us-east-1 would result in a ACS URL of https://service-ai-isstage4-com.auth.us-east-1.amazoncognito.com/saml2/idpresponse

Entity ID

The Entity ID is of the format urn:amazon:cognito:sp:your-cognito-user-pool-id. For example, if your Cognito User Pool is us-east-1_LzJrxyZzy, then the Entity ID would be urn:amazon:cognito:sp:us-east-1_LzJrxyZzy

Here is an example screen capture:

Attribute Mapping

  • First, choose Google Directory Attribute Primary email and map it to email
  • Next, in the Group membership section, choose the groups that you want to map and map it to an App attribute Groups

Here's a screencapture showing attribute mapping:

Turn on User Access

Finally, turn on User Access for everyone, or a smaller subset of people. Here's a screen capture showing the summary:

Cognito Configure SAML

Now, let's setup Google as a SAML2 federated authentication provider for our Cognito User Pool

  • Go to the Cognito AWS Console and choose the User Pool infinstor-service-subscribers
  • Click on Identity Providers and then click on SAML
  • Choose Metadata Document and upload the file GoogleIDPMetadata.xml that you downloaded from Google earlier
  • Supply a Provider Name. Use a simple one such as google. If you choose the name google and if the user has email address xyz@email.com, then the username composed by Cognito will be google_xyz@email.com

Create new Cognito Custom Attribute custom:groups

Click on Attributes in the left navbar, and choose Add another attribute. Then add a string attribute called groups. Note that when adding the attribute you would type in groups, but when Cognito displays it, it shows up as custom:groups as shown in the screen capture below.

Set Attribute Read and Write Permissions for for all app clients

Click on General Settings -> App clients on the left navbar, for each app client, enable read permission for the newly created custom attribute by clicking on the Set attribute read and write permissions

Cognito Custom Attribute Mapping

Next, choose Attribute Mapping on the left navbar and setup attribute mappings:

  • Groups to custom:groups
  • email to Email

Here's a screen capture showing cognito custom attribute mapping

Enable Identity Provider google for all app clients

InfinStor creates app clients named mlflowui-client, web-client, jupyterhub-full-client and cli-client

Enable this new identity provider google for each of these clients by clicking on the App Integration -> App client settings on the left navbar.

Finally, delete the Cognito auto created group your_pool_id_google

When you add an SAML provider, Cognito automatically adds a group named your_pool_id_google. All users from this authenticatino mechanism belong to this group, making it mostly useless. Delete this group.