<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-deshpande-secevent-http-multi-set-push-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Push-multi-SET">Push-Based Delivery For Multiple Security Event Tokens (SET) Using HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-deshpande-secevent-http-multi-set-push-04"/>
    <author fullname="Apoorva Deshpande">
      <organization>Okta</organization>
      <address>
        <email>apoorva.deshpande@okta.com</email>
      </address>
    </author>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="28"/>
    <area>Security</area>
    <workgroup>Security Events</workgroup>
    <keyword>security event</keyword>
    <keyword>secevent</keyword>
    <abstract>
      <?line 48?>

<t>This specification defines how multiple Security Event Tokens (SETs) can be
delivered to an intended recipient using HTTP POST over TLS.  The SETs
are transmitted in the body of an HTTP POST request to an endpoint
operated by the recipient, and the recipient indicates successful or
failed transmission via the HTTP response.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://appsdesh.github.io/draft-deshpande-secevent-http-multi-set-push/draft-deshpande-secevent-http-multi-set-push.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-deshpande-secevent-http-multi-set-push/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Security Events Working Group mailing list (<eref target="mailto:id-event@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/id-event/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/id-event/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/appsdesh/draft-deshpande-secevent-http-multi-set-push"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This specification defines a mechanism by which a Transmitter of a Security Event Token (SET) <xref target="RFC8417"/> can deliver multiple SETs to an intended SET Recipient via HTTP POST <xref target="RFC9110"/> over TLS in a single POST request. <xref target="RFC8935"/> focuses on the delivery of the single SET to the Recipient. When sending a large number of SETs, sending them one by one is inefficient. This specification defines a way to send batches of SETs in a single POST request for more efficient transport.</t>
      <t>Push-Based delivery for multiple SETs is intended to help in the following scenarios:</t>
      <ul spacing="normal">
        <li>
          <t>The Transmitter of the SET has multiple outstanding SETs to be communicated to the Recipient</t>
        </li>
        <li>
          <t>The Transmitter wants to reduce the number of outbound requests to the same Recipient to optimize performance and avoid being rate-limited when the number of SETs to be communicated is high</t>
        </li>
        <li>
          <t>The Recipient wants to optimize processing multiple SETs</t>
        </li>
        <li>
          <t>The Recipient wants to acknowledge or provide error responses to previously received SETs, but wants to do so asynchronously, rather than within the response to the same HTTP POST in which it received the SET</t>
        </li>
      </ul>
      <t>This specification will handle all the use cases and scenarios for the <xref target="RFC8935"/> and make it more extensible to support multiple SETs per one outbound POST request.</t>
      <t>Similar to <xref target="RFC8935"/>, this specification does not define how the Transmitter and Recipient exchange configuration metadata, such as endpoint URLs, cryptographic keys, and implementation constraints like buffer size limitations.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="push-endpoint-to-receive-multiple-sets">
      <name>Push endpoint to receive multiple SETs</name>
      <t>Each Recipient that supports this specification <bcp14>MUST</bcp14> support a new push endpoint that receives multiple SETs in a single request. This endpoint <bcp14>MUST</bcp14> be capable of serving HTTP POST <xref target="RFC9110"/> requests. This endpoint <bcp14>MUST</bcp14> be TLS <xref target="RFC9846"/> enabled and <bcp14>MUST</bcp14> reject any communication not using TLS.
How the Transmitter obtains this endpoint from the Recipient is outside the scope of this specification.</t>
    </section>
    <section anchor="set-delivery-semantics">
      <name>SET Delivery Semantics</name>
      <t>In this SET delivery using HTTP over TLS, a Transmitter delivers zero or more SETs in a JavaScript Object Notation (JSON) <xref target="RFC8259"/> document
to the SET Recipient. The Recipient either acknowledges the successful receipt of the SETs or indicates failure in processing of one or more SETs in a JSON document to the Transmitter.</t>
      <t>The Transmitter <bcp14>SHOULD</bcp14> periodically send a request with zero SETs to allow the Recipient to respond back with an ack or err for previously transmitted SETs that have not yet been acknowledged.</t>
      <t>After successful (acknowledged) SET delivery, SET Transmitters are not required to retain or record SETs for retransmission. Once a SET is acknowledged, the SET Recipient <bcp14>SHALL</bcp14> be responsible for retention, if needed. Transmitters may also discard undelivered SETs under deployment-specific conditions, such as if they have not been acknowledged (success or failure) for too long a period of time or if an excessive amount of storage is needed to retain them. If a Transmitter receives an acknowledgement or error for a SET it has no record of, the Transmitter <bcp14>MUST</bcp14> ignore that acknowledgement or error.</t>
      <t>Upon receiving a SET, the SET Recipient reads the SET and validates it in the manner described in <xref section="2" sectionFormat="of" target="RFC8935"/>. The SET Recipient <bcp14>MUST</bcp14> acknowledge receipt to the SET Transmitter, and <bcp14>SHOULD</bcp14> do so in a timely fashion (e.g., milliseconds). The SET Recipient <bcp14>SHALL NOT</bcp14> use the event acknowledgement mechanism to report event errors other than those relating to the parsing and validation of the SET.</t>
      <section anchor="acknowledgement-for-all-sets">
        <name>Acknowledgement for all SETs</name>
        <t>A Recipient <bcp14>MUST</bcp14> ensure that it includes the <tt>jti</tt> value of each SET it receives, either in an ack or a setErrs value, to the Transmitter from which it received the SETs. A Transmitter <bcp14>SHOULD</bcp14> retry sending the same SET again if it was never responded to either in an ack value or in a setErrs value by a Recipient in a reasonable time period. A Transmitter <bcp14>MAY</bcp14> limit the number of times it retries sending a SET. A Transmitter <bcp14>MAY</bcp14> publish the retry time period and maximum number of retries to its peers, but such publication is outside the scope of this specification.</t>
      </section>
      <section anchor="uniqueness-of-sets">
        <name>Uniqueness of SETs</name>
        <t>A Transmitter <bcp14>MUST NOT</bcp14> send two SETs with the same <tt>jti</tt> value if the SET has been either acknowledged through ack value or produced an error indicated by a setErrs value. If a Transmitter wishes to re-send an event after it has received an error response through a setErrs value, then it <bcp14>MUST</bcp14> generate a new SET that has a new (and unique) jti value.</t>
        <t>This specification does not mandate replay protection on the Recipient. However, if a Recipient receives a SET with a <tt>jti</tt> value that it has already acknowledged or reported an error for, it <bcp14>MAY</bcp14> silently drop the duplicate rather than reprocessing it.</t>
      </section>
      <section anchor="transmitting-sets">
        <name>Transmitting SETs</name>
        <t>To transmit a SET to a SET Recipient, the SET Transmitter makes an HTTP POST request to a TLS-enabled HTTP endpoint provided by the SET Recipient. The body of this request is of the content type <tt>"application/secevents+json"</tt> (see <xref target="media-type-registration"/>) and the Accept header field <bcp14>MUST</bcp14> be <tt>"application/json"</tt>.</t>
        <t>A Transmitter may initiate communication with the Recipient in order to:</t>
        <ul spacing="normal">
          <li>
            <t>Send SETs to the Recipient</t>
          </li>
          <li>
            <t>Receive acknowledgement of SETs in response</t>
          </li>
        </ul>
        <t>The body of this request <bcp14>MUST</bcp14> contain the following fields:</t>
        <section anchor="sets">
          <name>The <tt>sets</tt> Field</name>
          <t><bcp14>REQUIRED</bcp14>. A JSON object containing key-value pairs in which the key of a field is a string that contains the <tt>jti</tt> claim of the SET that is specified in the value of the field. This field <bcp14>MAY</bcp14> be an empty object to indicate that no SETs are being delivered by the initiator in this communication. The maximum number of SETs in a push <bcp14>MAY</bcp14> be set by the Transmitter for itself and <bcp14>SHOULD</bcp14> be communicated offline to the Recipients.</t>
          <t>The following is a non-normative example of a request.</t>
          <artwork><![CDATA[
  POST /push HTTP/1.1
  Host: recipient.example.com
  Content-Type: application/secevents+json
  Accept: application/json

  {
    "sets": {
      "4d3559ec67504aaba65d40b0363faad8":
      "eyJhbGciOiJub25lIn0.
      eyJqdGkiOiI0ZDM1NTllYzY3NTA0YWFiYTY1ZDQwYjAzNjNmYWFkOCIsImlhdC
      I6MTQ1ODQ5NjQwNCwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwi
      YXVkIjpbImh0dHBzOi8vc2NpbS5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MW
      ZhNWJiYzg3OTU5M2I3NzU0IiwiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tL0Zl
      ZWRzLzVkNzYwNDUxNmIxZDA4NjQxZDc2NzZlZTciXSwiZXZlbnRzIjp7InVybj
      ppZXRmOnBhcmFtczpzY2ltOmV2ZW50OmNyZWF0ZSI6eyJyZWYiOiJodHRwczov
      L3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZhYjYxZTc1Mj
      FkOSIsImF0dHJpYnV0ZXMiOlsiaWQiLCJuYW1lIiwidXNlck5hbWUiLCJwYXNz
      d29yZCIsImVtYWlscyJdfX19.",
      "3d0c3cf797584bd193bd0fb1bd4e7d30":
      "eyJhbGciOiJub25lIn0.
      eyJqdGkiOiIzZDBjM2NmNzk3NTg0YmQxOTNiZDBmYjFiZDRlN2QzMCIsImlhdC
      I6MTQ1ODQ5NjAyNSwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwi
      YXVkIjpbImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MW
      ZhNWJiYzg3OTU5M2I3NzU0IiwiaHR0cHM6Ly9qaHViLmV4YW1wbGUuY29tL0Zl
      ZWRzLzVkNzYwNDUxNmIxZDA4NjQxZDc2NzZlZTciXSwic3ViIjoiaHR0cHM6Ly
      9zY2ltLmV4YW1wbGUuY29tL1VzZXJzLzQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIx
      ZDkiLCJldmVudHMiOnsidXJuOmlldGY6cGFyYW1zOnNjaW06ZXZlbnQ6cGFzc3
      dvcmRSZXNldCI6eyJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkifSwi
      aHR0cHM6Ly9leGFtcGxlLmNvbS9zY2ltL2V2ZW50L3Bhc3N3b3JkUmVzZXRFeH
      QiOnsicmVzZXRBdHRlbXB0cyI6NX19fQ."
    }
  }
]]></artwork>
          <t><em>Figure 1: Example of SET Transmission</em></t>
          <t>In the above example, the Transmitter is sending 2 SETs to the Recipient.</t>
          <artwork><![CDATA[
  POST /push HTTP/1.1
  Host: recipient.example.com
  Content-Type: application/secevents+json
  Accept: application/json

  {
    "sets": {}
  }
]]></artwork>
          <t><em>Figure 2: Example of empty SET transmission</em></t>
          <t>In the above example, the Transmitter is sending zero SETs to the Recipient. This placeholder/empty request allows the Recipient to respond back with ack/err for previously transmitted SETs.</t>
          <t>The SET Transmitter <bcp14>MAY</bcp14> include in the request an Accept-Language header field to indicate to the SET Recipient the preferred language(s) in which to receive error message descriptions.</t>
        </section>
      </section>
      <section anchor="response-communication">
        <name>Response Communication</name>
        <t>A Recipient <bcp14>MUST</bcp14> respond to the communication by sending an HTTP response. The body of this response is of the content type <tt>"application/json"</tt>. It contains the following fields:</t>
        <t><tt>ack</tt>
          <bcp14>REQUIRED</bcp14>. An array of strings, in which each string is the <tt>jti</tt> value of a previously received SET that is acknowledged in this object. This array <bcp14>MAY</bcp14> be empty to indicate that no previously received SETs are being acknowledged in this communication.</t>
        <t><tt>setErrs</tt>
          <bcp14>OPTIONAL</bcp14>. A JSON object containing key-value pairs in which the key of a field is a string that contains the <tt>jti</tt> value of a previously received SET that the sender of the communication object was unable to process. The value of the field is a JSON object that has the following fields:</t>
        <t><tt>err</tt>
          <bcp14>REQUIRED</bcp14>. The short reason why the specified SET failed to be processed. Error codes are described in Section 2.4 of <xref target="RFC8935"/>. Note that the <tt>authentication_failed</tt> and <tt>access_denied</tt> codes described therein apply to the SET Transmission Request as a whole rather than to an individual SET, and therefore <bcp14>MUST NOT</bcp14> be used in a setErrs value; such failures <bcp14>MUST</bcp14> instead be reported using the <tt>err</tt> field described in <xref target="failure-response"/>.</t>
        <t><tt>description</tt>
          <bcp14>OPTIONAL</bcp14>. An explanation of why the SET failed to be processed.</t>
        <t>If the response contains a <tt>description</tt>, then the response <bcp14>MUST</bcp14> include a Content-Language header field whose value indicates the language of the error descriptions included in the response body. If the SET Recipient can provide error descriptions in multiple languages, they <bcp14>SHOULD</bcp14> choose the language to use according to the value of the Accept-Language header field sent by the SET Transmitter in the transmission request, as described in <xref section="12.5.4" sectionFormat="of" target="RFC9110"/>. If the SET Transmitter did not send an Accept-Language header field, or if the SET Recipient does not support any of the languages included in the header field, the SET Recipient <bcp14>MUST</bcp14> respond with messages that are understandable by an English-speaking person, as described in Section 4.5 of <xref target="RFC2277"/>.</t>
        <section anchor="success-response">
          <name>Success Response</name>
          <t>If the Recipient is successful in accepting the request, it <bcp14>MUST</bcp14> return the HTTP status code 202 (Accepted). The response <bcp14>MUST</bcp14> have the content-type <tt>"application/json"</tt>.</t>
          <artwork><![CDATA[
  HTTP/1.1 202 Accepted
  Content-type: application/json

  {
    "ack": [
      "3d0c3cf797584bd193bd0fb1bd4e7d30"
    ]
  }
]]></artwork>
          <t><em>Figure 3: Example of SET Transmission response with ack</em></t>
          <t>In the above example, the Recipient acknowledges one of the SETs it previously received. There are no errors reported by the Recipient.</t>
          <artwork><![CDATA[
  HTTP/1.1 202 Accepted
  Content-type: application/json

  {
     "ack": [
      "f52901c499611ef94540242ac12000322",
      "0636e274399711ef9454-0242ac120002",
      "d563c72479a04ff0ba415657fa5e2cb11"
     ],
     "setErrs": {
      "4d3559ec67504aaba65d40b0363faad8" : {
        "err": "invalid_key",
        "description": "Failed validation"
      }
     }
  }
]]></artwork>
          <t><em>Figure 4: Example of SET Transmission response, ack and errors</em></t>
          <t>In the above example, the Recipient acknowledges three of the SETs it previously received. There are errors reported by the Recipient for acknowledging one SET.</t>
        </section>
        <section anchor="failure-response">
          <name>Failure Response</name>
          <t>In the event of a general HTTP error condition that is not specific to an individual SET, the SET Recipient responds with the applicable HTTP status code, as defined in <xref section="15" sectionFormat="of" target="RFC9110"/>.</t>
          <t>When the SET Recipient rejects the request as a whole (for example, because the request is malformed, or the Transmitter is not authenticated or authorized), the SET Recipient <bcp14>SHOULD</bcp14> describe the failure using the problem details format defined in <xref target="RFC9457"/>. The Content-Type header field of such a response <bcp14>MUST</bcp14> be <tt>"application/problem+json"</tt>. In addition to the members defined in <xref target="RFC9457"/>, the response <bcp14>MAY</bcp14> include the following extension member:</t>
          <t><tt>err</tt>
            <bcp14>OPTIONAL</bcp14>. A short, machine-readable code identifying the reason the request failed. This code is not specific to any individual SET; it indicates a request-level or service-level failure.</t>
          <t>Note that failure responses in this specification are not specific to failures related to any individual SET. SET-specific errors are communicated in a success response payload as defined in the <xref target="success-response"/> Section.</t>
          <t>Example values for the <tt>err</tt> extension member that can indicate request-level failures include, but are not limited to:</t>
          <ul spacing="normal">
            <li>
              <t><tt>invalid_request</tt> (request is malformed)</t>
            </li>
            <li>
              <t><tt>authentication_failed</tt> (authentication token provided by the Transmitter is expired, revoked or invalid)</t>
            </li>
            <li>
              <t><tt>access_denied</tt> (the Transmitter does not have adequate permissions to invoke this API)</t>
            </li>
            <li>
              <t><tt>too_many_sets</tt> (the Transmitter included too many SETs in a single request; this is an indication for the Transmitter to make a request with a lower number of SETs or to comply with the maximum SET count that the Recipient published outside of this specification)  </t>
              <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Language: en-US
Content-Type: application/problem+json

{
  "type": "https://example.com/probs/authentication-failed",
  "title": "Authentication failed",
  "status": 400,
  "detail": "Access token has expired.",
  "err": "authentication_failed"
}
]]></artwork>
            </li>
          </ul>
          <t><em>Figure 5: Example Error Response (authentication_failed)</em></t>
          <t>The non-normative example above indicates that the access token included in the request is expired.</t>
          <section anchor="out-of-order-delivery">
            <name>Out of order delivery</name>
            <t>A Response may contain <tt>jti</tt> values in its ack or setErrs that do not correspond to the SETs received in the same Request to which the Response is being sent. They <bcp14>MAY</bcp14> consist of values received in previous Requests.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="authn-and-authz">
      <name>Authentication and Authorization</name>
      <t>The Transmitter <bcp14>MUST</bcp14> verify the identity of the Recipient by validating
the TLS certificate presented by the Recipient during the TLS handshake, and verifying that
it is the intended recipient of the request, before sending the SETs.</t>
      <t>How the Transmitter and Recipient agree on authorization of the request is out of scope of this document.</t>
      <t>This section describes server-side authentication of the Recipient by the Transmitter. Authentication of the Transmitter by the Recipient (e.g., via OAuth tokens, mutual TLS, or other mechanisms) is out of scope of this document and is expected to be defined by profiles of this specification.</t>
    </section>
    <section anchor="delivery-reliability">
      <name>Delivery Reliability</name>
      <t>A Transmitter <bcp14>MUST</bcp14> attempt to deliver any SETs it has previously attempted to deliver to a Recipient until:</t>
      <ul spacing="normal">
        <li>
          <t>It receives an acknowledgement through the ack value for that SET in a subsequent communication with the Recipient</t>
        </li>
        <li>
          <t>It receives a setErrs object for that SET in a subsequent communication with the Recipient</t>
        </li>
        <li>
          <t>It has attempted to deliver the SET a maximum number of times and has failed to communicate either due to communication errors or lack of inclusion in ack or setErrs in subsequent communications that were conducted for the maximum number of times. The maximum number of attempts <bcp14>MAY</bcp14> be set by the Transmitter for itself and <bcp14>SHOULD</bcp14> be communicated offline to the Recipients</t>
        </li>
      </ul>
      <t>Additionally consider Delivery Reliability aspects discussed in <xref section="4" sectionFormat="of" target="RFC8935"/>.</t>
      <section anchor="event-ordering-and-processing-guarantees">
        <name>Event Ordering and Processing Guarantees</name>
        <t>This specification is a transport efficiency mechanism and it does not address transactional aspects of the request. Every SET is an independent event in the request to the Recipient. The event ordering in the request does not imply any chronological dependence. For chronological dependence, the Recipient should look at the time-related event claims.</t>
        <t>A Transmitter should not assume the ordered processing of the SETs by the Recipient sub-systems. This specification does not add any transactional requirements on the Recipient.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The Security Considerations of <xref target="RFC8935"/>, <xref target="RFC9846"/>, and <xref section="17" sectionFormat="of" target="RFC9110"/> apply to this specification.</t>
      <section anchor="too-many-sets-in-the-request">
        <name>Too many SETs in the request</name>
        <t>This mechanism allows a Transmitter to send a large number of SETs in a single request. A malicious or misconfigured Transmitter could send an extremely large payload, attempting to exhaust memory or CPU resources on the Recipient during JSON parsing or SET validation.</t>
        <t>Recipients <bcp14>MUST</bcp14> protect themselves against such attacks. It is <bcp14>RECOMMENDED</bcp14> that Recipients establish and document a reasonable upper limit on both the number of SETs and the total size, in bytes, of the request body they will process in a single request. Limiting the number of SETs alone is insufficient, since a request containing few but excessively large SETs can still exhaust memory or CPU resources. The Transmitter <bcp14>MUST</bcp14> obey the maximum number of SETs and maximum request body size communicated by the Recipient. This will avoid any potential truncations/loss of information at the Recipient.</t>
        <t>If a Recipient receives a request exceeding either limit, it <bcp14>SHOULD</bcp14> reject the entire request with a <tt>413 Payload Too Large</tt> HTTP status code.</t>
        <t>How the Recipient conveys these upper limits to Transmitters is outside the scope of this specification (see <xref target="sets"/> for the <tt>sets</tt> field definition).</t>
      </section>
      <section anchor="authentication-and-authorization">
        <name>Authentication and Authorization</name>
        <t>The Transmitter <bcp14>MUST</bcp14> follow the procedures described in section <xref target="authn-and-authz"/> in order to securely authenticate and authorize the Recipient.</t>
      </section>
      <section anchor="http-and-tls">
        <name>HTTP and TLS</name>
        <t>The Transmitter <bcp14>MUST</bcp14> use TLS <xref target="RFC9846"/> to communicate with the Recipient and is subject to the security considerations of HTTP <xref section="17" sectionFormat="of" target="RFC9110"/>.</t>
        <t>Failure to properly validate the Recipient's TLS certificate could allow a Transmitter to send SETs to an impersonating endpoint, resulting in the disclosure of sensitive security event information to an unauthorized party.</t>
      </section>
      <section anchor="event-delivery-latency">
        <name>Event Delivery Latency</name>
        <t>The primary purpose of security event tokens is the timely communication of security-sensitive information. While this specification enables batching for efficiency, Transmitters <bcp14>MUST NOT</bcp14> unduly delay the transmission of events in an attempt to create larger batches.</t>
        <t>Delaying the transmission of a time-sensitive event, such as a credential compromise or session revocation, defeats the purpose of the protocol and provides an adversary with a larger window of opportunity to act.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> that Transmitters implement a batching policy that sends a pending batch of SETs when either of the following conditions is met:</t>
        <ul spacing="normal">
          <li>
            <t>The number of SETs in the batch reaches a configured size limit.</t>
          </li>
          <li>
            <t>A configured amount of time (e.g., 1-2 seconds) has elapsed since the oldest SET in the batch was generated.</t>
          </li>
        </ul>
        <t>This ensures a balance between network efficiency and the real-time nature of the communication.</t>
      </section>
      <section anchor="information-disclosure-in-error-responses">
        <name>Information Disclosure in Error Responses</name>
        <t>The <tt>setErrs</tt> is designed for debugging and provides valuable feedback. However, if implemented incorrectly, it can become a source of information leakage, disclosing internal details or enabling enumeration type attacks.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> that <tt>setErrs</tt> information be designed to be helpful without revealing sensitive information about internal architecture. For example, a <tt>description</tt> <bcp14>SHOULD NOT</bcp14> echo back tenant identifiers, internal user identifiers, or other values that could enable an attacker to enumerate valid accounts or infer details of the Recipient's internal architecture, such as stack traces or database identifiers.</t>
        <t>Additional security considerations in <xref section="5" sectionFormat="of" target="RFC8935"/>.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Privacy Considerations from <xref section="6" sectionFormat="of" target="RFC8935"/> apply.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the <tt>application/secevents+json</tt> media type in the "Media Types" registry <xref target="IANA.media-types"/>.</t>
      <section anchor="media-type-registration">
        <name>Media Type Registration</name>
        <section anchor="registry-contents">
          <name>Registry Contents</name>
          <t>This section registers the <tt>application/secevents+json</tt> media type <xref target="RFC6838"/> in the "Media Types" registry <xref target="IANA.media-types"/> in the manner described in <xref target="RFC6838"/>. This media type is used to indicate that the content is a JSON <xref target="RFC8259"/> object carrying a batch of Security Event Tokens (SETs), as described in <xref target="sets"/>.</t>
          <ul spacing="normal">
            <li>
              <t>Type name: application</t>
            </li>
            <li>
              <t>Subtype name: secevents+json</t>
            </li>
            <li>
              <t>Required parameters: N/A</t>
            </li>
            <li>
              <t>Optional parameters: N/A</t>
            </li>
            <li>
              <t>Encoding considerations: 8bit; the content is a JSON object as defined in <xref target="RFC8259"/> and is always encoded using UTF-8</t>
            </li>
            <li>
              <t>Security considerations: See <xref target="security-considerations"/> of this document and <xref section="5" sectionFormat="of" target="RFC8935"/></t>
            </li>
            <li>
              <t>Interoperability considerations: N/A</t>
            </li>
            <li>
              <t>Published specification: <xref target="sets"/> of this document</t>
            </li>
            <li>
              <t>Applications that use this media type: Applications that deliver batches of Security Event Tokens (SETs) over HTTP</t>
            </li>
            <li>
              <t>Fragment identifier considerations: N/A</t>
            </li>
            <li>
              <t>Additional information:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Magic number(s): N/A</t>
                </li>
                <li>
                  <t>File extension(s): N/A</t>
                </li>
                <li>
                  <t>Macintosh file type code(s): N/A</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Person &amp; email address to contact for further information: Apoorva Deshpande, apoorva.deshpande@okta.com</t>
            </li>
            <li>
              <t>Intended usage: COMMON</t>
            </li>
            <li>
              <t>Restrictions on usage: none</t>
            </li>
            <li>
              <t>Author: Apoorva Deshpande, apoorva.deshpande@okta.com</t>
            </li>
            <li>
              <t>Change controller: IETF</t>
            </li>
            <li>
              <t>Provisional registration? No</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8417">
          <front>
            <title>Security Event Token (SET)</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="M. Ansari" initials="M." surname="Ansari"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This specification defines the Security Event Token (SET) data structure. A SET describes statements of fact from the perspective of an issuer about a subject. These statements of fact represent an event that occurred directly to or about a security subject, for example, a statement about the issuance or revocation of a token on behalf of a subject. This specification is intended to enable representing security- and identity-related events. A SET is a JSON Web Token (JWT), which can be optionally signed and/or encrypted. SETs can be distributed via protocols such as HTTP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8417"/>
          <seriesInfo name="DOI" value="10.17487/RFC8417"/>
        </reference>
        <reference anchor="RFC8935">
          <front>
            <title>Push-Based Security Event Token (SET) Delivery Using HTTP</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="M. Jones" initials="M." role="editor" surname="Jones"/>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu"/>
            <author fullname="M. Ansari" initials="M." surname="Ansari"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>This specification defines how a Security Event Token (SET) can be delivered to an intended recipient using HTTP POST over TLS. The SET is transmitted in the body of an HTTP POST request to an endpoint operated by the recipient, and the recipient indicates successful or failed transmission via the HTTP response.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8935"/>
          <seriesInfo name="DOI" value="10.17487/RFC8935"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9457">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="S. Dalal" initials="S." surname="Dalal"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
              <t>This document obsoletes RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9457"/>
          <seriesInfo name="DOI" value="10.17487/RFC9457"/>
        </reference>
        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC2277">
          <front>
            <title>IETF Policy on Character Sets and Languages</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="January" year="1998"/>
            <abstract>
              <t>This document is the current policies being applied by the Internet Engineering Steering Group (IESG) towards the standardization efforts in the Internet Engineering Task Force (IETF) in order to help Internet protocols fulfill these requirements. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="18"/>
          <seriesInfo name="RFC" value="2277"/>
          <seriesInfo name="DOI" value="10.17487/RFC2277"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
    </references>
    <?line 394?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to acknowledge the following individuals
who contributed ideas, feedback, and wording that shaped and formed the final specification:</t>
      <t>Atul Tulshibagwale, Yair Sarig, Yaron Sheffer.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
4/OZxCsNwar9D0bKrhUGXAAA

-->

</rfc>
