| caep-interop | May 2026 | |
| Tulshibagwale, et al. | Standards Track | [Page] |
This document defines an interoperability profile for implementations of the Shared Signals Framework ([SSF]) and the Continuous Access Evaluation Profile ([CAEP]). It specifies required attributes for SSF endpoints, how to use OAuth 2.0 [RFC6749] for their authorization, and the core use cases to improve security of authenticated sessions. When implemented, the profile enables seamless interoperability between SSF Transmitters and Receivers.¶
The Shared Signals Framework enables sharing of Security Event Tokens (SETs) [RFC8417] between cooperating peers. When combined with Continuous Access Evaluation Profile ([CAEP]) to share events such as Session Revocation and Credential Change, implementations can greatly improve their session and security outcomes.¶
The CAEP Interoperability Profile outlines the minimum required features that implementations must offer in order to be considered compliant and to achieve interoperability. It describes specific use cases with CAEP session-revoked, credential-change, and device-compliance-change events. Support for all use cases listed herein is not required in order to be considered compliant with this profile. An implementation can choose specific use cases to support.¶
The following specifications are profiled in this document:¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The following requirements are common across all use cases defined in this document.¶
The SSF Transmitter MUST offer TLS protected endpoints and MUST establish connections to other servers using TLS. TLS connections MUST be set up to use TLS version 1.2 or later.¶
The SSF Transmitter MUST follow the recommendations for Secure Use of Transport Layer Security in [RFC9325].¶
The SSF Receiver MUST perform TLS server certificate signature checks, chain of trust validations, expiry and revocation status checks before calling the SSF Transmitter APIs, as per [RFC6125].¶
This specification supports CAEP [CAEP] events from OpenID Continuous Access Evaluation Profile 1.0.¶
Transmitters MUST implement the following features.¶
The Transmitter Configuration Metadata MUST include a spec_version field, and
its value MUST be 1_0 or greater.¶
The Transmitter Configuration Metadata MUST include the
delivery_methods_supported field.¶
The Transmitter Configuration Metadata MUST include the jwks_uri field, and
upon resolution, its value MUST provide the current signing key(s) of the
Transmitter.¶
The Transmitter Configuration Metadata MUST include the configuration_endpoint
field as defined in [SSF] Section 7.1.¶
The endpoint identified by configuration_endpoint is used to perform the
Create Stream operation as defined in [SSF] Section 8.1.1.¶
The Transmitter Configuration Metadata MUST include the status_endpoint field.¶
The endpoint identified by status_endpoint MUST support the Read Stream Status
(HTTP GET) operation as defined in [SSF] Section 8.1.2.1.¶
The Transmitter Configuration Metadata MUST include the verification_endpoint
field.¶
The endpoint identified by verification_endpoint MUST support Stream
Verification as defined in [SSF] Section 8.1.4.¶
Transmitters MUST support all required properties and API contracts defined by [SSF] Stream Management API operations, in addition to the requirements specified in this section.¶
For all Stream Management API requests received by the Transmitter, the following MUST be true.¶
The Transmitter MUST support Create Stream requests whose delivery.method is
set to one of the following values:¶
When a Receiver makes a Create Stream request as defined in [SSF] Section 8.1.1.1 with valid authorization, the Transmitter MUST process the request as specified in [SSF].¶
Upon successful creation of a Stream, the Transmitter MUST include a delivery
field in the resulting Stream Configuration, and its method value MUST be one
of the delivery methods listed above.¶
The Transmitter MUST support the Create Stream operation as defined in [SSF] Section 8.1.1.1 when invoked by a Receiver with valid authorization.¶
The Transmitter MUST support the Read Stream Configuration operation as defined in [SSF] Section 8.1.1.2 when invoked by a Receiver with valid authorization.¶
The Transmitter MUST support the Read Stream Status operation as defined in [SSF] Section 8.1.2.1 when invoked by a Receiver with valid authorization.¶
The Transmitter MUST support Stream Verification as defined in [SSF] Section 8.1.4.2 and MUST generate a Verification Event as defined in [SSF] Section 8.1.4.1 when requested by a Receiver with valid authorization.¶
The Transmitter MUST support the Delete Stream operation as defined in [SSF] Section 8.1.1.5 when invoked by a Receiver with valid authorization.¶
Receivers MUST implement the following features.¶
Receivers MUST be able to accept events using any one of the two delivery methods:¶
The Receiver MUST obtain the Transmitter's signing key(s) using the jwks_uri
from the Transmitter Configuration Metadata, as defined in [SSF] Section 7.1.¶
The Receiver MUST assume that all subjects are implicitly included in a Stream, without any Add Subject method invocations.¶
Receivers MUST support all required properties and API contracts defined by [SSF] Stream Management API operations, in addition to the requirements specified in this section.¶
For Stream Management API requests initiated by the Receiver, and for Streams created by the Receiver, the following MUST be true.¶
When creating a Stream using the Create Stream operation defined in [SSF]
Section 8.1.1.1, the Receiver MUST include a delivery object whose method
value is one of the following, or omit the delivery object.¶
If the Create Stream request does not include the delivery property, it is
assumed to have a delivery method of urn:ietf:rfc:8936 (Poll), as
defined in [SSF].¶
The following Stream Management operations MUST be supported by the Receiver.¶
The Receiver MUST be able to invoke the Create Stream operation as defined in [SSF] Section 8.1.1.1 using valid authorization.¶
The Receiver MUST be able to invoke the Read Stream Configuration operation as defined in [SSF] Section 8.1.1.2 using valid authorization.¶
The Receiver MUST be able to invoke the Read Stream Status operation as defined in [SSF] Section 8.1.2.1 using valid authorization.¶
The Receiver MUST be able to initiate Stream Verification as defined in [SSF] Section 8.1.4.2 using valid authorization, and MUST be able to process the resulting Verification Event as defined in [SSF] Section 8.1.4.1.¶
The Receiver MUST be able to invoke the Delete Stream operation as defined in [SSF] Section 8.1.1.5 using valid authorization.¶
The following subject identifier formats from "Subject Identifiers for Security Event Tokens" [RFC9493] MUST be supported:¶
Receivers MUST be prepared to accept events with any of the subject identifier formats specified in this section. Transmitters MUST be able to send events with at least one of the subject identifier formats specified in this section.¶
All events MUST be signed using the RS256 algorithm with a minimum of
2048-bit keys.¶
Implementations MUST support OAuth 2.0 [RFC6749]. In this context, the OAuth 2.0 roles map to SSF roles as follows:¶
The Resource Server is the SSF Transmitter.¶
The Client is the SSF Receiver.¶
The Authorization Server is an entity trusted by the SSF Transmitter to issue access tokens.¶
The following scopes MUST be supported:¶
An OAuth [RFC6749] Authorization Server that is used to issue tokens to
SSF Receivers MUST reserve the scopes for the SSF endpoints with the prefix
of ssf¶
All the SSF stream configuration management API operations MUST accept
ssf.manage scope¶
All the SSF stream configuration Read API operations MUST accept ssf.read
scope¶
MUST accept access tokens in the HTTP header as in Section 2.1 of OAuth 2.0 Bearer Token Usage [RFC6750]¶
MUST NOT accept access tokens via the URI query parameter mechanism described in Section 2.3 of OAuth 2.0 Bearer Token Usage [RFC6750]¶
MUST verify the validity, integrity, expiration and revocation status of access tokens¶
MUST verify that the authorization represented by the access token is sufficient for the requested resource access¶
If the access token is not sufficient for the requested action, the Resource Server MUST return errors as per Section 3.1 of [RFC6750]¶
The "events" claim of the SET MUST contain only one event.¶
An implementation conforming to this profile MUST support at least one of the following use cases.¶
In order to support session revocation or logout, implementations MUST support
the CAEP event type session-revoked. The reason_admin field of the event
MUST be populated with a non-empty object.¶
In order to support notifying and responding to credential changes,
implementations MUST support the CAEP event type credential-change.
Within the credential-change event, implementations MUST support the following
field values:¶
change_typeReceivers MUST interpret all allowable values of this field. Transmitters MAY generate any allowable value of this field¶
credential_typeReceivers MUST interpret all allowable values of this field. Transmitters MAY generate any allowable value of this field¶
reason_adminTransmitters MUST populate this value with a non-empty object¶
In order to support notifying and responding to changes in device compliance
status, implementations MUST support the CAEP event type
device-compliance-change.
This event is used to signal that a device's adherence to a set of security or
organizational compliance policies has changed. Implementations MUST support
the following field values:¶
previous_statusReceivers MUST interpret all allowable values of this field. Transmitters MAY generate any allowable value of this field¶
current_statusReceivers MUST interpret all allowable values of this field. Transmitters MAY generate any allowable value of this field¶
reason_adminTransmitters MUST populate this value with a non-empty object¶
There are no additional security considerations that arise from this document. Security considerations applicable to this profile are covered in the "Security Considerations" sections of [SSF] and [CAEP].¶
The authors wish to thank all members of the OpenID Foundation Shared Signals Working Group who contributed to the development of this specification.¶
Copyright (c) 2025 The OpenID Foundation.¶
The OpenID Foundation (OIDF) grants to any Contributor, developer, implementer, or other interested party a non-exclusive, royalty free, worldwide copyright license to reproduce, prepare derivative works from, distribute, perform and display, this Implementers Draft or Final Specification solely for the purposes of (i) developing specifications, and (ii) implementing Implementers Drafts and Final Specifications based on such documents, provided that attribution be made to the OIDF as the source of the material, but that such attribution does not indicate an endorsement by the OIDF.¶
The technology described in this specification was made available from contributions from various sources, including members of the OpenID Foundation and others. Although the OpenID Foundation has taken steps to help ensure that the technology is available for distribution, it takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this specification or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any independent effort to identify any such rights. The OpenID Foundation and the contributors to this specification make no (and hereby expressly disclaim any) warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to this specification, and the entire risk as to implementing this specification is assumed by the implementer. The OpenID Intellectual Property Rights policy requires contributors to offer a patent promise not to assert certain patent claims against other contributors and against implementers. The OpenID Foundation invites any interested party to bring to its attention any copyrights, patents, patent applications, or other proprietary rights that may cover technology that may be required to practice this specification.¶
[[ To be removed from the final specification ]]¶
-02¶
Updated OAuth section with clarifications (#325)¶
Minor fixes for publishing (#324)¶
Added Receiver requirements (#315)¶
Formatting fixes and device compliance change (#313)¶
Reworked introduction to remove normative language (#302)¶
Updated spec references (#291)¶
Clarify relationship between Transmitter and AS (#245)¶
Non-normative changes (#196)¶
Added security considerations (#190)¶
Added notational conventions (#190)¶
Updated network layer protection guidance (#213)¶
Updated out of date links (#227)¶
Updated required SSF spec version to 1_0¶
-01¶
Added document history (#189)¶
Specify one event per "events" claim of SET (#179)¶
Include OAuth specifics (#134)¶
Cleaned up markdown (#91)¶
-00¶