Skip to main content

Set up Enrollment SSO for Apple devices

Overview

With Apple Enrollment SSO, employees sign in with a Managed Apple Account on a Mac, iPhone, or iPad, and the device enrolls in Swif automatically. They don't need to sign in to Swif separately. This is Apple's account-driven enrollment.

You can set up Enrollment SSO three ways:

Method

How it works

Host by JSON

You serve a .well-known/com.apple.remotemanagement file on your own domain, for Apple to read.

Host by Proxy

Your web server, such as Nginx, forwards that address to Swif.

Apple Business Manager service discovery

Devices get Swif's enrollment address from Apple Business Manager (ABM), when the .well-known lookup isn't available. iOS 18.2, iPadOS 18.2, and macOS 15.2 or later.


BYOD and company-owned enrollments

Enrollment SSO supports two of Apple's account-driven enrollment types. Which one a device uses depends on whether you set it up for BYOD or company-owned devices.

BYOD

Company-owned (non-BYOD)

Apple enrollment type

Account-driven User Enrollment

Account-driven Device Enrollment

Value in the JSON

"Version": "mdm-byod"

"Version": "mdm-adde"

Who it's for

Personal devices

Company-owned devices

What Swif can manage

A separate, managed part of the device. Personal data stays private, and many device-wide settings aren't available.

The whole device

Swif agent

Can't be installed

Installed

BYOD Enrollment SSO limits what Swif can manage. With account-driven User Enrollment, Apple doesn't allow many device-wide settings, and the Swif agent can't be installed. On Macs enrolled this way:

  • Policies that need the Swif agent don't work, such as the Apple Hardening Policy and agent-based tracking.

  • Some settings aren't allowed by Apple, such as approving system extensions and granting privacy permissions, like Full Disk Access. Apps that need these, such as Huntress, can't be deployed silently.

  • Some policy settings may make the profile fail, such as the sudo settings in the Apple User Authorization Policy.

For full management of personal Macs, enroll them with Swif's standard BYOD enrollment instead, using the Application or Silent installer method. See Swif enrollment methods for all OSs.

Choose a hosting method

You need

Use

Only BYOD, or only company-owned enrollments

Host by JSON, with one domain

Both BYOD and company-owned enrollments

Host by JSON, with two domains (one for each), or Host by Proxy, with one domain

No hosting on your own domain

Apple Business Manager service discovery

Host by JSON lets you host the file on your root domain, so each Managed Apple Account can be the same as the employee's work email.


Prerequisites

  • Administrator access to Swif, and to Apple Business Manager (ABM) or Apple School Manager (ASM).

  • For Host by JSON: the ability to upload files to your domain. For Host by Proxy: the ability to set up a proxy on your web server.

  • Managed Apple Accounts for your employees in ABM or ASM. See Add Managed Apple Accounts below.

ABM lets users sign in to their Managed Apple Account with Google, Microsoft Entra ID, or Okta credentials. To set this up, go to Managed Apple Accounts in ABM.


Host on your own domain

Host by JSON

Configuration

Use when

BYOD JSON

All Enrollment SSO enrollments should be BYOD

Non-BYOD JSON

All Enrollment SSO enrollments should be company-owned

Get your configuration

Swif provides both configurations, and the proxy settings, with one API call:

curl -X GET "https://mdm.swifteam.com/api/v2/sso/enroll/json" \
-H "Authorization: Bearer {{TOKEN}}" \
-H "team-id: {{TEAM-ID}}"

For EU organizations, use mdm.eu.swifteam.com.

The response includes your team identifier, the static JSON for BYOD and non-BYOD, and proxy settings:

{
"teamIdentifier": "{{IDENTIFIER}}",
"adde": {
"Servers": [
{
"Version": "mdm-adde",
"BaseURL": "https://mdm.swifteam.com/api/v1/sso/enroll?team-identifier={{IDENTIFIER}}"
}
]
},
"byod": {
"Servers": [
{
"Version": "mdm-byod",
"BaseURL": "https://mdm.swifteam.com/api/v1/sso/enroll?team-identifier={{IDENTIFIER}}&isbyod=true"
}
]
},
"proxyConfigs": { ... }
}

You can also download the JSON files from Swif's Enrollment SSO settings:

  • JSON For BYOD Device

  • JSON For Non BYOD Device

Option A: BYOD JSON (account-driven User Enrollment)

Use this if all Enrollment SSO enrollments should be BYOD. See BYOD and company-owned enrollments for what this means.

  1. Download the BYOD JSON, or copy the byod section from the API response.

  2. Serve it at {{YOUR_DOMAIN}}/.well-known/com.apple.remotemanagement.

  3. The address must return only the JSON text, with no .json extension, and no HTML.

Option B: Non-BYOD JSON (account-driven Device Enrollment)

Use this if all Enrollment SSO enrollments should be company-owned.

  1. Download the non-BYOD JSON, or copy the adde section from the API response.

  2. Serve it at {{YOUR_DOMAIN}}/.well-known/com.apple.remotemanagement.

  3. The address must return only the JSON text, with no .json extension, and no HTML.

Set the content type

The file must be served with content-type: application/json. To check:

curl -sI https://YOURDOMAIN/.well-known/com.apple.remotemanagement | grep -i content-type

It should return:

content-type: application/json

Host by Proxy

Use this if some users should enroll as BYOD, and others as company-owned, on the same domain. A proxy forwards requests for /.well-known/com.apple.remotemanagement to Swif, which decides the enrollment type for each user.

How it works

  1. You set up a proxy on your domain, so requests for /.well-known/com.apple.remotemanagement go to Swif.

  2. First attempt: the user signs in with their Managed Apple Account. Swif remembers their email, and asks them to close the window and start again.

  3. Second attempt: Swif recognizes the user, and enrolls the device as BYOD or company-owned, based on the user's settings in Swif.

Why two attempts? Apple starts the enrollment before the sign-in page opens. The first attempt lets Swif identify the user, and the second completes enrollment with the right type.

Proxy settings

The API response includes ready-to-use settings for common web servers, under proxyConfigs. The proxy target is:

https://mdm.swifteam.com/api/v1/sso/well-known/{{IDENTIFIER}}

For EU organizations, use mdm.eu.swifteam.com.

Nginx:

location = /.well-known/com.apple.remotemanagement {
proxy_pass https://mdm.swifteam.com/api/v1/sso/well-known/{{IDENTIFIER}};
proxy_set_header Host mdm.swifteam.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

Caddy:

handle /.well-known/com.apple.remotemanagement {
rewrite * /api/v1/sso/well-known/{{IDENTIFIER}}
reverse_proxy https://mdm.swifteam.com {
header_up Host mdm.swifteam.com
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}

Apache:

ProxyPass        "/.well-known/com.apple.remotemanagement" "https://mdm.swifteam.com/api/v1/sso/well-known/{{IDENTIFIER}}"
ProxyPassReverse "/.well-known/com.apple.remotemanagement" "https://mdm.swifteam.com/api/v1/sso/well-known/{{IDENTIFIER}}"

<Location "/.well-known/com.apple.remotemanagement">
ProxyPreserveHost Off
RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
RequestHeader set X-Forwarded-For expr=%{REMOTE_ADDR}
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
</Location>

Traefik:

http:
routers:
apple-well-known:
rule: "Path(`/.well-known/com.apple.remotemanagement`)"
service: swif-mdm
middlewares:
- apple-well-known-rewrite

middlewares:
apple-well-known-rewrite:
replacePath:
path: "/api/v1/sso/well-known/{{IDENTIFIER}}"

services:
swif-mdm:
loadBalancer:
servers:
- url: "https://mdm.swifteam.com"

Enrollment flow on the device

  1. Open System Settings (Mac) or Settings (iPhone or iPad), then General > Device Management (or VPN & Device Management).

  2. Click or tap Sign in to Work or School Account.

  3. Enter the employee's Managed Apple Account. Apple reads the JSON, or the proxy's response, from the account's domain.

  4. Complete enrollment:

    • Host by JSON: enrollment completes automatically, with no separate Swif sign-in. If the .well-known file isn't available, Apple checks ABM for the default MDM server, and sends the device to Swif.

    • Host by Proxy: the user sees a sign-in page, then closes the window and starts again. The second attempt completes enrollment with the right type.


Apple Business Manager service discovery

Starting with iOS 18.2, iPadOS 18.2, and macOS 15.2, devices can get Swif's enrollment address directly from Apple Business Manager or Apple School Manager. You don't need to host .well-known/com.apple.remotemanagement on your domain.

Prerequisites

  • Devices running iOS 18.2, iPadOS 18.2, or macOS 15.2 or later

  • Swif's MDM server added under Management Services in ABM or ASM

  • Managed Apple Accounts for your employees in ABM or ASM

Set it up

  1. Sign in to Apple Business Manager as an Administrator or Device Enrollment Manager.

  2. Go to Devices > Management Services.

  3. On the Services tab, select Default Device Assignment.

  4. For each device type you want to support, such as iPhone, iPad, or Mac, choose your Swif MDM Server from the menu.

  5. Save your changes.

Enrollment flow on the device

  1. Open Settings (iPhone or iPad) or System Settings (Mac), then General > VPN & Device Management (or Device Management).

  2. Tap or click Sign in to Work or School Account.

  3. Enter the employee's Managed Apple Account.

  4. Apple finds Swif as the default MDM server in ABM, and sends the device to Swif to enroll.


Add Managed Apple Accounts

Each employee who uses Enrollment SSO needs a Managed Apple Account in ABM or ASM.

You can skip this step by setting up federated Managed Apple Accounts with Google Workspace or Microsoft Entra ID. See Set up ABM Managed ID federation by Google Workspace.

  1. Add a managed domain to ABM, such as applesso.yourdomain.com, under Managed Apple Accounts. To verify it, add the TXT record ABM gives you to your DNS.

  2. Create a Managed Apple Account for each employee in ABM.

  3. Ask each employee to finish signing in to ABM, using the email ABM sends them.


    ​


Test enrollment

To enroll a device with Enrollment SSO, follow Enrollment SSO with Managed Apple ID: Device-side experience.


Troubleshooting & FAQ

Is Enrollment SSO the same as Apple's User Enrollment?

Partly. Enrollment SSO is Apple's account-driven enrollment. For BYOD, it's account-driven User Enrollment. For company-owned devices, it's account-driven Device Enrollment. See BYOD and company-owned enrollments.

A policy or app doesn't work on a BYOD device enrolled with Enrollment SSO

The device uses account-driven User Enrollment, where the Swif agent can't be installed, and Apple doesn't allow many device-wide settings. For full management, enroll the device with Swif's standard BYOD enrollment instead.

How do I support both BYOD and company-owned devices?

  • Host by JSON: use a separate domain for each.

  • Host by Proxy: use one domain. Swif chooses the right type for each user.

Can I host the JSON on Webflow?

Yes. See Webflow's guide to uploading a well-known file.

Can I use a domain with a 301 redirect?

Yes. Apple follows redirects for the .well-known file. To check where it ends up:

curl -L https://yourdomain.com/.well-known/com.apple.remotemanagement

Without -L, you'll see the redirect itself.

Do employees need to sign in to Swif separately?

No. Enrollment SSO uses the Managed Apple Account, so there's no separate Swif sign-in.

Sign-in fails with "Enrollment failed. Please try again."

On an iPhone or iPad, a leftover enrollment record on the device may be blocking the new enrollment. To fix it:

  1. Back up any data you need. Erasing the device deletes all content and settings.

  2. On the device, go to Settings > General > Transfer or Reset iPhone (or iPad), and tap Erase All Content and Settings.

  3. After the device restarts, set it up, and enroll again with Enrollment SSO.


Related resources

Did this answer your question?