Single sign-on
Your identity provider signs your people into Authpermit. Here Authpermit is the relying party, and the assurance the assertion carries is recorded rather than assumed.
Setting it up
- In Settings → Enterprise, add a connection and choose OpenID Connect or SAML 2.0.
- Give the email domains it covers. People with those domains are sent to your provider.
- Enter the issuer, client id and client secret. The secret is encrypted under your organization's credential key and never shown again.
- Map your groups to Authpermit roles. A group you do not map grants nothing, so renaming a group in your directory cannot silently widen access.
- Set the assurance level your provider gives. Level 3 or above is treated as a second factor.
- Activate. A connection that is missing what it needs cannot be activated.
Just-in-time provisioning
By default, someone signing in for the first time from a covered domain gets an account and a membership. Turn it off and only people who already exist can sign in.
OpenID Connect
Authpermit reads your provider's discovery document ({issuer}/.well-known/openid-configuration, or the URL you give) and refuses one that names another issuer. Each sign-in carries a fresh state, nonce and PKCE (S256) challenge; all three are kept server-side and work once, for ten minutes, in the browser that started. The ID token must be signed with an asymmetric key from your provider's JWKS (RS/PS/ES 256–512 or EdDSA; none and HMAC are refused), name your issuer, your client id as audience, carry the nonce, be unexpired, and not say email_verified: false. The JWKS is cached for an hour; a token signed with a new key id fetches it again once, so key rotation needs no action. Redirect URI: /auth/sso/callback.
SAML 2.0
Give your provider the service-provider metadata at /auth/sso/{connection id}/metadata: the entity id is that URL, the assertion consumer service is /auth/sso/saml/acs (HTTP-POST). Paste your provider's signing certificate into the connection (two certificates side by side during a rotation). Authpermit sends a signed-request-free AuthnRequest and accepts only a response that:
- is signed with that certificate — the assertion itself or the whole response (RSA or ECDSA with SHA-256 or stronger, exclusive canonicalization). An unsigned or wrongly signed assertion is refused; SHA-1 is refused;
- answers the request this browser sent (
InResponseTo); unsolicited, IdP-initiated responses are refused; - names this service provider as audience and this ACS URL as recipient, within its validity window;
- contains exactly one plain assertion (encrypted assertions are not supported yet) and no DOCTYPE.
The email comes from the NameID (email format) or an email/mail attribute; groups from groups/memberOf.
Single sign-on is on the Enterprise and Sovereign plans.