Skip to content

Commit bff3a01

Browse files
final edits
1 parent 9c2de2f commit bff3a01

File tree

4 files changed

+174
-41
lines changed

4 files changed

+174
-41
lines changed

content/manuals/security/for-admins/provisioning/scim.md

Lines changed: 82 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,19 @@ You must [configure SSO](../single-sign-on/configure/_index.md) before you enabl
102102
The user interface for your IdP may differ slightly from the following steps. You can refer to the documentation for your IdP to verify. For additional details, see the documentation for your IdP:
103103

104104
- [Okta](https://help.okta.com/en-us/Content/Topics/Apps/Apps_App_Integration_Wizard_SCIM.htm)
105-
- [Entra ID/Azure AD](https://learn.microsoft.com/en-us/azure/active-directory/app-provisioning/user-provisioning)
105+
- [Entra ID/Azure AD SAML 2.0](https://learn.microsoft.com/en-us/azure/active-directory/app-provisioning/user-provisioning)
106+
107+
> [!NOTE]
108+
>
109+
> Microsoft does not currently support SCIM and OIDC in the same non-gallery
110+
application in Entra ID. This guide provides a verified workaround using a
111+
separate non-gallery app for SCIM provisioning. While Microsoft does not
112+
officially document this setup, it is widely used and supported in practice.
106113

107114
{{< tabs >}}
108115
{{< tab name="Okta" >}}
109116

110-
### Enable SCIM
117+
### Step one: Enable SCIM
111118

112119
1. Sign in to Okta and select **Admin** to open the admin portal.
113120
1. Open the application you created when you configured your SSO connection.
@@ -123,7 +130,7 @@ The user interface for your IdP may differ slightly from the following steps. Yo
123130
1. Select **Test Connector Configuration**.
124131
1. Review the test results and select **Save**.
125132

126-
### Enable synchronization
133+
### Step two: Enable synchronization
127134

128135
1. In Okta, select **Provisioning**.
129136
1. Select **To App**, then **Edit**.
@@ -136,31 +143,48 @@ The user interface for your IdP may differ slightly from the following steps. Yo
136143
- Email
137144

138145
{{< /tab >}}
139-
{{< tab name="Entra ID/Azure AD" >}}
146+
{{< tab name="Entra ID (OIDC)" >}}
140147

141-
> [!NOTE]
142-
>
143-
> In non-gallery configurations, Azure AD requires separate applications for
144-
OIDC SSO and SCIM provisioning. Use the following steps to create and
145-
configure a second app for SCIM.
148+
Microsoft does not support SCIM and OIDC in the same non-gallery application.
149+
You must create a second non-gallery application in Entra ID for SCIM
150+
provisioning.
146151

147-
### Create a non-gallery app for SCIM
152+
### Step one: Create a separate SCIM app
148153

149-
1. In the Azure Portal, go to **Microsoft Entra ID** > **Enterprise Application** >
154+
1. In the Azure Portal, go to **Microsoft Entra ID** > **Enterprise Applications** >
150155
**New application**.
151156
1. Select **Create your own application**.
152-
1. Enter a name (for example, `Docker SCIM`) and choose **Integrate any other application you don't find in the gallery**.
157+
1. Name your application and choose **Integrate any other application you don't find in the gallery**.
153158
1. Select **Create**.
154159

155-
### Configure SCIM provisioning
160+
### Step two: Configure SCIM provisioning
156161

157162
1. In your new SCIM application, go to **Provisioning** > **Get started**.
158163
1. Set **Provisioning Mode** to **Automatic**.
159164
1. Under **Admin Credentials**:
160-
1. **Tenant URL**: Paste the **SCIM Base URL** from Docker.
161-
1. **Secret Token**: Paste the **API Token** from Docker.
165+
- **Tenant URL**: Paste the **SCIM Base URL** from Docker.
166+
- **Secret Token**: Paste the **SCIM API token** from Docker.
162167
1. Select **Test Connection** to verify.
163-
1. Select **Save** to store the credentials.
168+
1. Select **Save** to store credentials.
169+
170+
Next, [set up role mapping](#set-up-role-mapping).
171+
172+
{{< /tab >}}
173+
{{< tab name="Entra ID (SAML 2.0)" >}}
174+
175+
### Configure SCIM provisioning
176+
177+
1. In the Azure Portal, go to **Microsoft Entra ID** > **Enterprise Applications**,
178+
and select your Docker SAML app.
179+
1. Select **Provisioning** > **Get started**.
180+
1. Set **Provisioning Mode** to **Automatic**.
181+
1. Under **Admin Credentials**:
182+
- **Tenant URL**: Paste the **SCIM Base URL** from Docker.
183+
- **Secret Token**: Paste the **SCIM API token** from Docker.
184+
1. Select **Test Connection** to verify.
185+
1. Select **Save** to store credentials.
186+
187+
Next, [set up role mapping](#set-up-role-mapping).
164188

165189
{{< /tab >}}
166190
{{< /tabs >}}
@@ -191,7 +215,7 @@ This value is required in your IdP when creating custom SCIM attributes for Dock
191215
{{< tabs >}}
192216
{{< tab name="Okta" >}}
193217

194-
### Set up role mapping in Okta
218+
### Step one: Set up role mapping in Okta
195219

196220
1. Setup [SSO](../single-sign-on/configure/_index.md) and SCIM first.
197221
1. In the Okta admin portal, go to **Directory**, select **Profile Editor**, and then **User (Default)**.
@@ -204,13 +228,13 @@ This value is required in your IdP when creating custom SCIM attributes for Dock
204228
1. Select **General**, then **SAML Settings**, and **Edit**.
205229
1. Select **Step 2** and configure the mapping from the user attribute to the Docker variables.
206230

207-
### Assign roles by user
231+
### Step two: Assign roles by user
208232

209233
1. In the Okta Admin portal, select **Directory**, then **People**.
210234
1. Select **Profile**, then **Edit**.
211235
1. Select **Attributes** and update the attributes to the desired values.
212236

213-
### Assign roles by group
237+
### Step three: Assign roles by group
214238

215239
1. In the Okta Admin portal, select **Directory**, then **People**.
216240
1. Select **YOUR GROUP**, then **Applications**.
@@ -220,11 +244,11 @@ This value is required in your IdP when creating custom SCIM attributes for Dock
220244
If a user doesn't already have attributes set up, users who are added to the group will inherit these attributes upon provisioning.
221245

222246
{{< /tab >}}
223-
{{< tab name="Entra ID/Azure AD" >}}
247+
{{< tab name="Entra ID/Azure AD (SAML 2.0 and OIDC)" >}}
224248

225-
### Configure attribute mappings
249+
### Step one: Configure attribute mappings
226250

227-
1. Complete the [SCIM provisioning setup](#enable-scim).
251+
1. Complete the [SCIM provisioning setup](#enable-scim-in-docker).
228252
1. In the Azure Portal, open **Microsoft Entra ID** > **Enterprise Applications**,
229253
and select your SCIM application.
230254
1. Go to **Provisioning** > **Mappings** > **Provision Azure Active Directory Users**.
@@ -239,7 +263,7 @@ and select your SCIM application.
239263
- If enabling, test group mappings carefully.
240264
1. Select **Save** to apply mappings.
241265

242-
### Choose a role mapping method
266+
### Step two: Choose a role mapping method
243267

244268
You can map `dockerRole`, `dockerOrg`, or `dockerTeam` using one of the following
245269
methods:
@@ -283,7 +307,7 @@ Use this method if you need to map multiple attributes (e.g., `dockerRole` +
283307

284308
To assign values, you'll need to use the Microsoft Graph API.
285309

286-
### Assign users and groups
310+
### Step three: Assign users and groups
287311

288312
For either mapping method:
289313

@@ -318,17 +342,6 @@ Content-Type: application/json
318342
>
319343
> You must use a different extension attribute for each SCIM field.
320344
321-
### Enable and test provisioning
322-
323-
1. Return to **Provisioning** in the Azure Portal.
324-
1. Set **Provisioning Status** to **On**, then select **Save**.
325-
1. To test provisioning:
326-
1. Go to **Provision on demand**.
327-
1. Select a user or group and select **Provision**.
328-
1. Confirm the user or group appears in the **Members** tab in the
329-
Docker [Admin Console](https://app.docker.com/admin).
330-
1. Check **Provisioning logs** in Azure AD for any issues.
331-
332345
{{< /tab >}}
333346
{{< /tabs >}}
334347

@@ -337,6 +350,36 @@ See the documentation for your IdP for additional details:
337350
- [Okta](https://help.okta.com/en-us/Content/Topics/users-groups-profiles/usgp-add-custom-user-attributes.htm)
338351
- [Entra ID/Azure AD](https://learn.microsoft.com/en-us/azure/active-directory/app-provisioning/customize-application-attributes#provisioning-a-custom-extension-attribute-to-a-scim-compliant-application)
339352

353+
## Test SCIM provisioning
354+
355+
After completing role mapping, you can test the configuration manually.
356+
357+
358+
{{< tabs >}}
359+
{{< tab name="Okta" >}}
360+
361+
1. In the Okta admin portal, go to **Directory > People**.
362+
1. Select a user you've assigned to your SCIM application.
363+
1. Select **Provision User**.
364+
1. Wait a few seconds, then check the Docker
365+
[Admin Console](https://app.docker.com/admin) under **Members**.
366+
1. If the user doesn’t appear, review logs in **Reports > System Log** and
367+
confirm SCIM settings in the app.
368+
369+
{{< /tab >}}
370+
{{< tab name="Entra ID/Azure AD (OIDC and SAML 2.0)" >}}
371+
372+
1. In the Azure Portal, go to **Microsoft Entra ID** > **Enterprise Applications**,
373+
and select your SCIM app.
374+
1. Go to **Provisioning** > **Provision on demand**.
375+
1. Select a user or group and choose **Provision**.
376+
1. Confirm that the user appears in the Docker
377+
[Admin Console](https://app.docker.com/admin) under **Members**.
378+
1. If needed, check **Provisioning logs** for errors.
379+
380+
{{< /tab >}}
381+
{{< /tabs >}}
382+
340383
## Disable SCIM
341384

342385
If SCIM is disabled, any user provisioned through SCIM will remain in the organization. Future changes for your users will not sync from your IdP. User de-provisioning is only possible when manually removing the user from the organization.
@@ -364,3 +407,7 @@ The following videos demonstrate how to configure SCIM for your IdP:
364407
- [Video: Attribute mapping with Okta](https://youtu.be/c56YECO4YP4?feature=shared&t=1998)
365408
- [Video: Configure SCIM with Entra ID/Azure AD](https://youtu.be/bGquA8qR9jU?feature=shared&t=1668)
366409
- [Video: Attribute and group mapping with Entra ID/Azure AD](https://youtu.be/bGquA8qR9jU?feature=shared&t=2039)
410+
411+
Refer to the following troubleshooting guide if needed:
412+
413+
- [Troubleshoot provisioning](/manuals/security/troubleshoot/troubleshoot-provisioning.md)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
description: Learn how to troubleshoot common user provisioning issues.
3+
keywords: scim, jit, provision, troubleshoot, group mapping
4+
title: Troubleshoot provisioning
5+
linkTitle: Troubleshoot provisioning
6+
tags: [Troubleshooting]
7+
toc_max: 2
8+
---
9+
10+
If you experience issues with user roles, attributes, or unexpected account
11+
behavior with user provisioning, this guide provides troubleshooting
12+
recommendations to resolve conflicts.
13+
14+
## SCIM attribute values are overwritten or ignored
15+
16+
### Error message
17+
18+
Typically, this scenario does not produce an error message in Docker or your
19+
IdP. This issue ususally surfaces as incorrect role or team assignment.
20+
21+
### Possible causes
22+
23+
- JIT provisioning is enabled, and Docker is using values from your IdP's
24+
SSO login flow to provision the user, which overrides
25+
SCIM-provided attributes.
26+
- SCIM was enabled after the user was already provisioned via JIT, so SCIM
27+
updates don't take effect.
28+
29+
### Affected environments
30+
31+
- Docker organizations using SCIM with SSO
32+
- Users provisioned via JIT prior to SCIM setup
33+
34+
### Steps to replicate
35+
36+
1. Enable JIT and SSO for your Docker organization.
37+
1. Sign in to Docker as a user via SSO.
38+
1. Enable SCIM and set role/team attributes for that user.
39+
1. SCIM attempts to update the user's attributes, but the role or team
40+
assignment does not reflect changes.
41+
42+
### Solutions
43+
44+
**Disable JIT provisioning (recommended)**
45+
46+
1. Sign in to the Docker [Admin Console](app.docker.com/admin).
47+
1. Go to your organization's **Settings** > **Security** > **SSO and SCIM**.
48+
1. Find the relevant SSO connection.
49+
1. Select the **actions menu** and choose **Edit**.
50+
1. Disable **Just-in-Time provisioning**.
51+
1. Save your changes.
52+
53+
With JIT disabled, Docker uses SCIM as the source of truth for user creation
54+
and role assignment.
55+
56+
**Keep JIT enabled and mattch attributes**
57+
58+
If you prefer to keep JIT enabled:
59+
60+
- Make sure your IdP's SSO attribute mappings match the values being sent
61+
by SCIM.
62+
- Avoid configuring SCIM to override attributes already set via JIT.
63+
64+
This option requires strict coordination between SSO and SCIM attributes
65+
in your IdP configuration.
66+
67+
## SCIM updates don't apply to existing users
68+
69+
### Possible causes
70+
71+
User accounts were originally created manually or via JIT, and SCIM is not
72+
linked to manage them.
73+
74+
### Solution
75+
76+
SCIM only manages users that it provisions. To allow SCIM to manage an
77+
existing user:
78+
79+
1. Remove the user manually from the Docker [Admin Console](app.docker.com/admin).
80+
1. Trigger provisioning from your IdP.
81+
1. SCIM will re-create the user with correct attributes.
82+
83+
> [!WARNING]
84+
>
85+
> Deleting a user removes their resource ownership (e.g., repositories).
86+
Transfer ownership before removing the user.

layouts/shortcodes/admin-scim-disable.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
{{ end }}
99

1010
1. Sign in to {{ $product_link }}.
11-
2. {{ $sso_navigation }}
12-
3. In the SSO connections table, select the **Actions** icon.
13-
4. Select **Disable SCIM**.
11+
1. {{ $sso_navigation }}
12+
1. In the SSO connections table, select the **Actions** icon.
13+
1. Select **Disable SCIM**.

layouts/shortcodes/admin-scim.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
{{ end }}
99

1010
1. Sign in to {{ $product_link }}.
11-
2. {{ $sso_navigation }}
12-
3. In the SSO connections table, select the **Actions** icon and **Setup SCIM**.
13-
4. Copy the **SCIM Base URL** and **API Token** and paste the values into your IdP.
11+
1. {{ $sso_navigation }}
12+
1. In the SSO connections table, select the **Actions** icon and **Setup SCIM**.
13+
1. Copy the **SCIM Base URL** and **API Token** and paste the values into your IdP.

0 commit comments

Comments
 (0)