Skip to main content

JumpCloud SAML Integration

Use a JumpCloud custom SAML application as an upstream identity provider. The canonical Caddyfile serves the portal at /auth/ and protects /app. It uses driver generic, the released SAML mapper and a separately pinned signing certificate.

Configure the custom SAML application​

Create a custom SAML connector using JumpCloud's current connector-field reference. Use these values consistently:

FieldExample value
SP Entity IDurn:authcrunch:jumpcloud
ACS URLhttps://auth.example.com/auth/saml/jumpcloud
Login URL / bookmark targethttps://auth.example.com/auth/saml/jumpcloud
IdP URLYour connector's JumpCloud SSO URL, copied into JUMPCLOUD_SAML_LOGIN_URL
NameID formatEmail-address format if appropriate to your connector; additional mapped attributes are still required

Set the SP identifier independently of the IdP identifier. Use a signed response/assertion with the downloaded IdP certificate. Retain the SP's original RelayState; do not replace it with a static redirect URL.

Configure these attribute names with populated values:

Attribute nameAuthCrunch claimRequirement
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displaynamenameRequired, nonempty display name
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressemailRequired, nonempty email
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/namesubSend a stable application identity
http://claims.example.com/SAML/Attributes/RolerolesOptional, one value per application role

Map display name to full name, email to email and name to a stable user identity. To authorize the example app, emit App.Access as a value of the custom Attributes/Role attribute for an administrator-managed app group/assignment. Do not make authorization attributes user-editable. Arbitrary JumpCloud group attributes are not automatically mapped into roles by the released SAML parser.

Install trust and start the portal​

Download the connector metadata XML and signing certificate. Set SAML_METADATA_PATH, SAML_CERT_PATH, JUMPCLOUD_SAML_LOGIN_URL and a private JWT_SHARED_KEY. The certificate must be a local PEM file; metadata can be local XML or an HTTP(S) URL. The first three values expand at Caddyfile adaptation.

Start with the canonical example after replacing its hostname. Its transforms clear reserved roles, grant authp/user to the JumpCloud realm and grant app/member only when the same realm supplies App.Access. A valid SAML login alone does not grant the protected app.

JumpCloud SAML returns a signed response to the bound browserJumpCloud SAML returns a signed response to the bound browser

JumpCloud SAML returns a signed response to the bound browser. The portal acts as the service provider. A fresh SP-initiated transaction binds the browser to the callback; pinned IdP signing trust and assertion checks establish the identity. The portal then maps attributes and issues its own credential. This is upstream SAML login, separate from the partial downstream AWS SSO app feature.

Scroll horizontally when needed, or open the diagram for a larger view. Download Mermaid source.

Verify the browser flow​

Open /app, follow the portal login and select JumpCloud. The browser must first GET /auth/saml/jumpcloud so AuthCrunch can create state before the IdP's POST callback. An unsolicited POST from the JumpCloud user-portal tile is rejected; a bookmark tile can point to that GET entry URL.

Test assigned member and portal-only accounts, inspect /auth/whoami, and verify direct /app access. Replaying a response or opening its callback in a different browser must fail. See SAML troubleshooting for cookie, claim and signing errors. On certificate rollover, verify and update the separate pin and reprovision; metadata does not override it.

Complete Caddyfile​

Caddyfile
# Set metadata/certificate paths and the provider SSO URL before adaptation.
{
admin off
persist_config off
security {
saml identity provider jumpcloud {
realm jumpcloud
driver generic
entity_id urn:authcrunch:jumpcloud
acs_url https://auth.example.com/auth/saml/jumpcloud
idp_login_url {$JUMPCLOUD_SAML_LOGIN_URL}
idp_metadata_location {$SAML_METADATA_PATH}
idp_sign_cert_location {$SAML_CERT_PATH}
}
authentication portal myportal {
enable identity provider jumpcloud
crypto default token lifetime 900
crypto key sign-verify {env.JWT_SHARED_KEY}
cookie path /
ui {
links {
"Example app" /app icon "las la-external-link-alt"
"My identity" /auth/whoami icon "las la-user"
}
}
transform user {
regex match role "^(authp/.*|app/member)$"
action drop matched role
}
transform user {
match realm jumpcloud
action add role authp/user
}
transform user {
match realm jumpcloud
match role App.Access
action add role app/member
}
}
authorization policy apppolicy {
set auth url https://auth.example.com/auth/
crypto key verify {env.JWT_SHARED_KEY}
allow roles app/member
}
}
}
auth.example.com {
route {
redir /auth /auth/ 308
authenticate /auth/* with myportal
@app path /app /app/*
route @app {
authorize with apppolicy
respond "You reached the SAML-protected app." 200
}
respond "Open /app to begin." 200
}
}

Historical connector walkthrough​

These preserved images show connector creation, identifiers, attributes, certificate export and user-portal placement. Their hostname lacks the new /auth/ mount, and the old user tile must not be used as an unsolicited-login recipe. Follow the current values above.

Jumpcloud SAML App Registration - New Application

Historical console: Jumpcloud SAML App Registration - New Application. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - SSO connector

Historical console: Jumpcloud SAML App Registration - SSO connector. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - App Name

Historical console: Jumpcloud SAML App Registration - App Name. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - SSO Configuration

Historical console: Jumpcloud SAML App Registration - SSO Configuration. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - SSO Configuration

Historical console: Jumpcloud SAML App Registration - SSO Configuration. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - SSO Configuration

Historical console: Jumpcloud SAML App Registration - SSO Configuration. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - User Attributes

Historical console: Jumpcloud SAML App Registration - User Attributes. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - IDP Certificate

Historical console: Jumpcloud SAML App Registration - IDP Certificate. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App Registration - Complete

Historical console: Jumpcloud SAML App Registration - Complete. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Jumpcloud SAML App User Portal

Historical console: Jumpcloud SAML App User Portal. Use the current values and flow described above; the displayed IDs, hosts and ports belong to the old example.

Agentic Prompts​

Copy a prompt into your LLM to explore this topic. Each prompt prioritizes upstream repository guidance and code over this page, and asks for version-aware reasoning.

Read the custom connector
Help me understand JumpCloud SAML integration.

Primary authorities (take precedence over website documentation):
https://github.com/greenpau/caddy-security/blob/main/AGENTS.md
https://github.com/greenpau/caddy-security/tree/main/.codex/skills
https://github.com/greenpau/go-authcrunch/blob/main/AGENTS.md
https://github.com/greenpau/go-authcrunch/tree/main/.codex/skills
Read each repository's root AGENTS.md first, then any scoped AGENTS.md that
applies to inspected paths. Read the relevant SKILL.md files and follow their
implementation and test references.

Relevant skills to locate: configuration-saml-providers,
saml-identity-provider.

Secondary reference:
https://docs.authcrunch.com/docs/authenticate/saml/jumpcloud

If a source is inaccessible, ask me to paste its relevant text. Identify the
versions your answer applies to; main may be newer than my release. Resolve
disagreements using code and tests, and flag unverified claims. Use synthetic
credentials and redacted examples; explain proposed checks before any changes.

Explain JumpCloud SP identifier, ACS, IdP URL, sign-on bookmark, and
downloaded trust material. Distinguish SP and IdP entity IDs and NameID from
required mapped attributes. Consult current official connector fields rather
than copying historical screenshots.
Trace a browser-bound login
Help me understand JumpCloud SAML integration.

Primary authorities (take precedence over website documentation):
https://github.com/greenpau/caddy-security/blob/main/AGENTS.md
https://github.com/greenpau/caddy-security/tree/main/.codex/skills
https://github.com/greenpau/go-authcrunch/blob/main/AGENTS.md
https://github.com/greenpau/go-authcrunch/tree/main/.codex/skills
Read each repository's root AGENTS.md first, then any scoped AGENTS.md that
applies to inspected paths. Read the relevant SKILL.md files and follow their
implementation and test references.

Relevant skills to locate: configuration-saml-providers,
saml-identity-provider.

Secondary reference:
https://docs.authcrunch.com/docs/authenticate/saml/jumpcloud

If a source is inaccessible, ask me to paste its relevant text. Identify the
versions your answer applies to; main may be newer than my release. Resolve
disagreements using code and tests, and flag unverified claims. Use synthetic
credentials and redacted examples; explain proposed checks before any changes.

Walk through the portal’s initiating GET and JumpCloud POST retaining
RelayState. Explain signed-response and same-browser validation. Compare a
bookmark tile with an unsolicited IdP-initiated assertion and do not assume
both are supported.
Review controlled app membership
Help me understand JumpCloud SAML integration.

Primary authorities (take precedence over website documentation):
https://github.com/greenpau/caddy-security/blob/main/AGENTS.md
https://github.com/greenpau/caddy-security/tree/main/.codex/skills
https://github.com/greenpau/go-authcrunch/blob/main/AGENTS.md
https://github.com/greenpau/go-authcrunch/tree/main/.codex/skills
Read each repository's root AGENTS.md first, then any scoped AGENTS.md that
applies to inspected paths. Read the relevant SKILL.md files and follow their
implementation and test references.

Relevant skills to locate: configuration-saml-providers,
saml-identity-provider.

Secondary reference:
https://docs.authcrunch.com/docs/authenticate/saml/jumpcloud

If a source is inaccessible, ask me to paste its relevant text. Identify the
versions your answer applies to; main may be newer than my release. Resolve
disagreements using code and tests, and flag unverified claims. Use synthetic
credentials and redacted examples; explain proposed checks before any changes.

Compare configured displayname/email/name/Role attribute names with arbitrary
group attributes. Trace an administrator-managed App.Access value through
reserved-role removal and a realm-scoped transform. Explain why
account-editable attributes cannot safely grant app/member.
Diagnose trust and claim mismatch
Help me understand JumpCloud SAML integration.

Primary authorities (take precedence over website documentation):
https://github.com/greenpau/caddy-security/blob/main/AGENTS.md
https://github.com/greenpau/caddy-security/tree/main/.codex/skills
https://github.com/greenpau/go-authcrunch/blob/main/AGENTS.md
https://github.com/greenpau/go-authcrunch/tree/main/.codex/skills
Read each repository's root AGENTS.md first, then any scoped AGENTS.md that
applies to inspected paths. Read the relevant SKILL.md files and follow their
implementation and test references.

Relevant skills to locate: configuration-saml-providers,
saml-identity-provider.

Secondary reference:
https://docs.authcrunch.com/docs/authenticate/saml/jumpcloud

If a source is inaccessible, ask me to paste its relevant text. Identify the
versions your answer applies to; main may be newer than my release. Resolve
disagreements using code and tests, and flag unverified claims. Use synthetic
credentials and redacted examples; explain proposed checks before any changes.

Help me inspect redacted attribute names/types, ACS, mount, binding-cookie
metadata, and public certificate fingerprint. Separate missing required
values, wrong pin, state failure, and app 403. Never ask for a full live
SAMLResponse.
Verify callback and certificate lifecycle
Help me understand JumpCloud SAML integration.

Primary authorities (take precedence over website documentation):
https://github.com/greenpau/caddy-security/blob/main/AGENTS.md
https://github.com/greenpau/caddy-security/tree/main/.codex/skills
https://github.com/greenpau/go-authcrunch/blob/main/AGENTS.md
https://github.com/greenpau/go-authcrunch/tree/main/.codex/skills
Read each repository's root AGENTS.md first, then any scoped AGENTS.md that
applies to inspected paths. Read the relevant SKILL.md files and follow their
implementation and test references.

Relevant skills to locate: configuration-saml-providers,
saml-identity-provider.

Secondary reference:
https://docs.authcrunch.com/docs/authenticate/saml/jumpcloud

If a source is inaccessible, ask me to paste its relevant text. Identify the
versions your answer applies to; main may be newer than my release. Resolve
disagreements using code and tests, and flag unverified claims. Use synthetic
credentials and redacted examples; explain proposed checks before any changes.

Design assigned member, portal-only, wrong browser, replayed response, and
verified pin rollover tests. Explain which updates require reprovisioning and
why metadata alone does not change the trusted signing certificate. Use fresh
logins when retesting role mappings.

Source Code References​

Start with the code search, then follow the parser, runtime, and tests relevant to this topic. These links target main; use GitHub's branch/tag selector to compare them with your installed release.

  1. Search this topic in both repositories — searches topic-specific symbols and paths across both codebases.
  2. caddy-security: caddyfile_identity_provider.go — adapts SAML identity-provider settings and certificate/metadata locations.
  3. go-authcrunch: pkg/idp/saml/config.go — validates SAML endpoints, drivers, and pinned trust settings.
  4. go-authcrunch: pkg/idp/saml/provider.go — loads IdP metadata and constructs the service provider with pinned signing trust.
  5. go-authcrunch: pkg/idp/saml/authenticate.go — validates browser-bound SAML responses and maps accepted attributes.
  6. go-authcrunch: pkg/idp/saml/state.go — tracks SP-initiated SAML transactions and single-use completion.
  7. go-authcrunch: pkg/authn/saml_state_e2e_test.go — tests signed SAML callbacks, browser state, and rejection boundaries.