scim_setup.md 6.2 KB
Newer Older
R
Russell Dickenson 已提交
1 2 3 4
---
type: howto, reference
---

5
# SCIM provisioning using SAML SSO for Groups **(SILVER ONLY)**
6

7
> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/9388) in [GitLab.com Silver](https://about.gitlab.com/pricing/) 11.10.
8

R
Russell Dickenson 已提交
9 10 11 12
System for Cross-domain Identity Management (SCIM), is an open standard that enables the
automation of user provisioning. When SCIM is provisioned for a GitLab group, membership of
that group is synchronized between GitLab and the identity provider.

13
GitLab's [SCIM API](../../../api/scim.md) implements part of [the RFC7644 protocol](https://tools.ietf.org/html/rfc7644).
14 15 16 17 18 19 20 21 22 23 24 25 26

Currently, the following actions are available:

- CREATE
- UPDATE
- DELETE (deprovisioning)

The following identity providers are supported:

- Azure

## Requirements

E
Evan Read 已提交
27 28
- [Group SSO](index.md) needs to be configured.

29
## GitLab configuration
30 31 32 33 34 35 36

Once [Single sign-on](index.md) has been configured, we can:

1. Navigate to the group and click **Settings > SAML SSO**.
1. Click on the **Generate a SCIM token** button.
1. Save the token and URL so they can be used in the next step.

E
Evan Read 已提交
37
![SCIM token configuration](img/scim_token.png)
38

39
## Identity Provider configuration
40

41
### Azure
42

43
The SAML application that was created during [Single sign-on](index.md) setup now needs to be set up for SCIM.
44

45
1. Check the configuration for your GitLab SAML app and ensure that **Name identifier value** (NameID) points to `user.objectid` or another unique identifier. This will match the `extern_uid` used on GitLab.
46

47
   ![Name identifier value mapping](img/scim_name_identifier_mapping.png)
48

49 50
1. Set up automatic provisioning and administrative credentials by following the
   [Provisioning users and groups to applications that support SCIM](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/use-scim-to-provision-users-and-groups#provisioning-users-and-groups-to-applications-that-support-scim) section in Azure's SCIM setup documentation.
51 52

During this configuration, note the following:
53 54

- The `Tenant URL` and `secret token` are the ones retrieved in the
E
Evan Read 已提交
55
  [previous step](#gitlab-configuration).
56
- Should there be any problems with the availability of GitLab or similar
E
Evan Read 已提交
57
  errors, the notification email set will get those.
58
- It is recommended to set a notification email and check the **Send an email notification when a failure occurs** checkbox.
59 60
- For mappings, we will only leave `Synchronize Azure Active Directory Users to AppName` enabled.

61
You can then test the connection by clicking on **Test Connection**. If the connection is successful, be sure to save your configuration before moving on. See below for [troubleshooting](#troubleshooting).
62

63
#### Configure attribute mapping
64

65 66 67 68
1. Click on `Synchronize Azure Active Directory Users to AppName`, to configure the attribute mapping.
1. Click **Delete** next to the `mail` mapping.
1. Map `userPrincipalName` to `emails[type eq "work"].value` and change it's **Matching precedence** to `2`.
1. Map `mailNickname` to `userName`.
69 70 71 72 73 74 75
1. Determine how GitLab will uniquely identify users.

    - Use `objectId` unless users already have SAML linked for your group.
    - If you already have users with SAML linked then use the `Name ID` value from the [SAML configuration](#azure). Using a different value will likely cause duplicate users and prevent users from accessing the GitLab group.

1. Create a new mapping by clicking **Add New Mapping** then set **Source attribute** to the unique identifier determined above, **Target attribute** to `id`, **Match objects using this attribute** to `Yes`, and **Matching precedence** to `1`.
1. Create a new mapping by clicking **Add New Mapping** then set **Source attribute** to the unique identifier determined above, and **Target attribute** to `externalId`.
76
1. Click the `userPrincipalName` mapping and change **Match objects using this attribute** to `No`.
77

78
   Save your changes and you should have the following configuration:
E
Evan Read 已提交
79

80
   ![Azure's attribute mapping configuration](img/scim_attribute_mapping.png)
81

82
   NOTE: **Note:** If you used a unique identifier **other than** `objectId`, be sure to map it instead to both `id` and `externalId`.
83 84

1. Below the mapping list click on **Show advanced options > Edit attribute list for AppName**.
85

86 87
1. Leave the `id` as the primary and only required field.

88 89 90
   NOTE: **Note:**
   `username` should neither be primary nor required as we don't support
   that field on GitLab SCIM yet.
E
Evan Read 已提交
91

92
   ![Azure's attribute advanced configuration](img/scim_advanced.png)
93 94

1. Save all the screens and, in the **Provisioning** step, set
95 96
   the `Provisioning Status` to `On`.

97
   ![Provisioning status toggle switch](img/scim_provisioning_status.png)
98

99 100 101
   NOTE: **Note:**
   You can control what is actually synced by selecting the `Scope`. For example,
   `Sync only assigned users and groups` will only sync the users assigned to
102
   the application (`Users and groups`), otherwise, it will sync the whole Active Directory.
103 104 105

Once enabled, the synchronization details and any errors will appear on the
bottom of the **Provisioning** screen, together with a link to the audit logs.
R
Russell Dickenson 已提交
106

107 108 109
CAUTION: **Warning:**
Once synchronized, changing the field mapped to `id` and `externalId` will likely cause provisioning errors, duplicate users, and prevent existing users from accessing the GitLab group.

110
## Troubleshooting
R
Russell Dickenson 已提交
111

112
### Testing Azure connection: invalid credentials
R
Russell Dickenson 已提交
113

114
When testing the connection, you may encounter an error: **You appear to have entered invalid credentials. Please confirm you are using the correct information for an administrative account**. If `Tenant URL` and `secret token` are correct, check whether your group path contains characters that may be considered invalid JSON primitives (such as `.`). Removing such characters from the group path typically resolves the error.
115 116 117 118 119 120

### Azure: (Field) can't be blank sync error

When checking the Audit Logs for the Provisioning, you can sometimes see the
error `Namespace can't be blank, Name can't be blank, and User can't be blank.`

121
This is likely caused because not all required fields (such as first name and last name) are present for all users being mapped.
122 123 124 125 126 127

As a workaround, try an alternate mapping:

1. Follow the Azure mapping instructions from above.
1. Delete the `name.formatted` target attribute entry.
1. Change the `displayName` source attribute to have `name.formatted` target attribute.