Specifications ############## This page details which specifications are implemented in Canaille, and compares Canaille with other well-known identity providers. State of the specs in Canaille ============================== OAuth2 ------ - ✅ `RFC6749: OAuth 2.0 Framework `_ - ✅ `RFC6750: OAuth 2.0 Bearer Tokens `_ - ✅ `RFC7009: OAuth 2.0 Token Revocation `_ - ❌ `RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants `_ - ✅ `RFC7591: OAuth 2.0 Dynamic Client Registration Protocol `_ - ✅ `RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol `_ - ✅ `RFC7636: Proof Key for Code Exchange by OAuth Public Clients `_ - ✅ `RFC7662: OAuth 2.0 Token Introspection `_ - ✅ `RFC8414: OAuth 2.0 Authorization Server Metadata `_ - ❌ `RFC8428: OAuth 2.0 Device Authorization Grant `_ - ❌ `RFC8693: OAuth 2.0 Token Exchange `_ - ❌ `RFC8705: OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens `_ - ❌ `RFC8707: Resource Indicators for OAuth 2.0 `_ - ❌ `RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens `_ - ❌ `RFC9101: OAuth 2.0 JWT-Secured Authorization Request (JAR) `_ - ❌ `RFC9126: OAuth 2.0 Pushed Authorization Requests `_ - ❌ `RFC9207: OAuth 2.0 Authorization Server Issuer Identification `_ - ❌ `RFC9394: OAuth 2.0 Rich Authorization Requests `_ - ❌ `OAuth2 Multiple Response Types `_ - ❌ `OAuth2 Form Post Response Mode `_ OpenID Connect -------------- - ✅ `OpenID Connect Core `_ - ✅ `OpenID Connect Discovery `_ - ✅ `OpenID Connect Dynamic Client Registration `_ - ✅ `OpenID Connect RP Initiated Logout `_ - ❌ `OpenID Connect Session Management `_ - ❌ `OpenID Connect Front Channel Logout `_ - ❌ `OpenID Connect Back Channel Logout `_ - ❌ `OpenID Connect Back Channel Authentication Flow `_ - ❌ `OpenID Connect Core Error Code unmet_authentication_requirements `_ - ✅ `Initiating User Registration via OpenID Connect 1.0 `_ - ❌ `OpenID Connect Profile for SCIM Services `_ SCIM ---- Canaille provides a basic SCIM server implementation. - 🟠 `RFC7642: System for Cross-domain Identity Management: Definitions, Overview, Concepts, and Requirements `_ - 🟠 `RFC7643: System for Cross-domain Identity Management: Core Schema `_ - 🟠 `RFC7644: System for Cross-domain Identity Management: Protocol `_ Client-side implementation (i.e. broadcasting changes on users and groups among clients) and advanced features will be implemented in the future. What's implemented ~~~~~~~~~~~~~~~~~~ Endpoints: - /Users (GET, POST) - /Users/ (GET, PUT, DELETE) - /Groups (GET, POST) - /Groups/ (GET, PUT, DELETE) - /ServiceProviderConfig (GET) - /Schemas (GET) - /Schemas/ (GET) - /ResourceTypes (GET) - /ResourceTypes/ (GET) Features: - :rfc:`pagination <7644#section-3.4.2.4>` .. _scim_unimplemented: What is not implemented yet ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Endpoints: - /Users (PATCH) - /Groups (PATCH) - :rfc:`/Me <7644#section-3.11>` (GET, POST, PUT, PATCH, DELETE) - :rfc:`/Bulk <7644#section-3.11>` (POST) - :rfc:`/.search <7644#section-3.4.3>` (POST) Features - :rfc:`filtering <7644#section-3.4.2.2>` - :rfc:`sorting <7644#section-3.4.2.3>` - :rfc:`attributes selection <7644#section-3.4.2.5>` - :rfc:`ETags <7644#section-3.14>` Comparison with other providers =============================== Here is a feature comparison with other OpenID Connect server software. Canaille voluntarily only implements the OpenID Connect protocol to keep its codebase simple. +---------------+-------+-----------+------+---------------------------+--------------+ | Software | Project | Protocols implementations | Backends | | +-------+-----------+------+------+------+------+------+------+-------+ | | FLOSS | Language | LOC | OIDC | SAML | CAS | SCIM | LDAP | SQL | +===============+=======+===========+======+======+======+======+======+======+=======+ | Canaille | ✅  | Python | 10k | ✅ | ❌ | ❌ | 🟠 | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Auth0`_ | ❌  | ❔ | ❔ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Authelia`_ | ✅  | Go | 50k | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Authentic2`_ | ✅  | Python | 65k | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Authentik`_ | ✅  | Go | 55k | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `CAS`_ | ✅  | Java | 360k | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Connect2id`_ | ❌  | ❔ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Gluu`_ | ✅  | Java | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Hydra`_ | ✅  | Go | 50k | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Keycloak`_ | ✅  | Java | 600k | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `LemonLDAP`_ | ✅  | Perl | 130k | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ | `Okta`_ | ❌  | ❔ | ❔ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +---------------+-------+-----------+------+------+------+------+------+------+-------+ .. _Auth0: https://auth0.com .. _Authelia: https://authelia.com .. _Authentic2: https://dev.entrouvert.org/projects/authentic .. _Authentik: https://goauthentik.io .. _CAS: https://apereo.github.io/cas .. _Connect2id: https://connect2id.com .. _Gluu: https://gluu.org .. _Hydra: https://ory.sh .. _Keycloak: https://keycloak.org .. _LemonLDAP: https://lemonldap-ng.org .. _Okta: https://okta.com