<?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-05" 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-05"/>
    <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="October" day="09"/>
    <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 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 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. Likewise, Recipients <bcp14>SHOULD</bcp14> respond with an <tt>ack</tt> or <tt>setErrs</tt> for each SET as soon as possible, without unduly delaying the response.</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, Martin Duke, Scott Kelly, Deb Cooley.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
XjEjMZSVpAX0UiK4MGepswwzaSigSWqBkZ42Aq6qaW43WX/KO6jV6V6Exx0T
BVATC9x10samfxtwrckmk/6YbkNlbDR4kZxQ4ALU7BZ3T4wmrpv9CvWnOzAw
a7cAMyQmTco0eyeTkxCzBNj+27cXNue8B3AEvN0U2IJmNZRRYOOb6iDcdbeu
swiiKIOA3KhGOVZvK3YQMAQyLKVcIgQgiYGmy6lA/IMiyyU4UeZGjSox7m6k
Ia0HySeWMpu0YExrPkNRQa8FeqhuvUMixNMz/Otbq2UieLSyFAGkHMnoTrGn
e7nosMDPRJipMi+W66QKZc2ZwIhrAbpl7IWE7cd1nH4kwtjNrbIeWWUudyGs
i6Wl4QA6YNXcBA0aSdKseJYvzNTRwGtzx10n2toieudcaAmGtdBqPrPHIxJX
GM5ivOxTyuiJ4nk9IYXBx2LZs2PvuZLR2IVa9XRrOh5TVqIuNJjkIkEoWUzE
TtKkY3e9AEmLeMYZABuDwYce/UdavU4zRRVe73f7+s27FHcd7S5NV3fD23T0
3z7raOeCNlVXq6huzspXbUiv9fsn/a/nraEgru06T+DZZrCxtbUj/e2XW71N
IUZieyvY7I16G9sbYyGCV2u7bmu5eD8dvfXD0/B9MRpsRUdJr+u8h9e/BW/v
4fVR7+bgpD+8iKLrx+uN4cVe7/rqMLy+uO7fHHycX9/tPQ7vhjE8uz/dP1JH
cTQN9p2OjrZPLj72Tw8+bg3vPs6H+/NQfB4+Ht2loXh31vPfnWwfL3YerwdR
fhx/2ry+6s9Hby+L68FOfhTOQ6ej68+f7o/uZqOjeNoL3r1+PA1fPfiD4Wx0
vhXJt4e5//ZrdBwPH0bnO29vrj7d+4tXW6dvP/ZP7j4OTq6cjm6mw6v34fXj
ZOP04nLrZHC0MXy87OFoP5rRce8mcju6Ons8fvx0P3y8ng8PLr8O46OvNwd7
m7BQ+Bfm9ngT3Vz44efzeXjz+SYaJWew8NnLo+TTYnTndDSb3Xw+i0+T11M/
hoU8zmj00/jT4OZqq3caDxc3V4e9m/OjbWAL/L5GrqXBu7O5/5g+OB0dbwzv
xFWvuPk8nY4+v1Y351t3o0Hv4dPnYeQnJw/Dg7N4ePemdxLDcBc34c3BzfT6
7vorzBLo5HQEzDxHZh4Cqd/PrpNPvZvPJ+FppEJx9TE83n9fAF0ipFmAXd9v
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

-->

</rfc>
