<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.3) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY OASIS.saml-core-2.0-os SYSTEM "https://bib.ietf.org/public/rfc/bibxml2/reference.OASIS.saml-core-2.0-os.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC6749 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml">
<!ENTITY RFC6750 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6750.xml">
<!ENTITY RFC7159 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7159.xml">
<!ENTITY RFC7517 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7517.xml">
<!ENTITY RFC7519 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8414 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml">
<!ENTITY RFC8417 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8417.xml">
<!ENTITY RFC8615 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml">
<!ENTITY RFC8935 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8935.xml">
<!ENTITY RFC8936 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8936.xml">
<!ENTITY RFC9110 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
<!ENTITY RFC9493 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9493.xml">
]>

<?rfc private="yes"?>

<rfc ipr="none" docName="openid-sharedsignals-framework-1_0" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SharedSignals">OpenID Shared Signals Framework Specification 1.0 - draft 03</title>

    <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale">
      <organization>SGNL</organization>
      <address>
        <email>atul@sgnl.ai</email>
      </address>
    </author>
    <author initials="T." surname="Cappalli" fullname="Tim Cappalli">
      <organization>Microsoft</organization>
      <address>
        <email>tim.cappalli@microsoft.com</email>
      </address>
    </author>
    <author initials="M." surname="Scurtescu" fullname="Marius Scurtescu">
      <organization>Coinbase</organization>
      <address>
        <email>marius.scurtescu@coinbase.com</email>
      </address>
    </author>
    <author initials="A." surname="Backman" fullname="Annabelle Backman">
      <organization>Amazon</organization>
      <address>
        <email>richanna@amazon.com</email>
      </address>
    </author>
    <author initials="J." surname="Bradley" fullname="John Bradley">
      <organization>Yubico</organization>
      <address>
        <email>secevemt@ve7jtb.com</email>
      </address>
    </author>
    <author initials="S." surname="Miel" fullname="Shayne Miel">
      <organization>Cisco</organization>
      <address>
        <email>smiel@cisco.com</email>
      </address>
    </author>

    <date year="2024" month="June" day="25"/>

    
    <workgroup>Shared Signals</workgroup>
    

    <abstract>


<?line 167?>

<t>This Shared Signals Framework (SSF) enables sharing of signals and events
between cooperating peers. It enables multiple applications such as Risk Incident Sharing
and Coordination (RISC) and the Continuous Access Evaluation Profile (<xref target="CAEP"/>)</t>

<t>This specification defines:</t>

<t><list style="symbols">
  <t>A profile for Security Events Tokens <xref target="RFC8417"/></t>
  <t>Subject principals</t>
  <t>Subject claims in SSF events</t>
  <t>Event types</t>
  <t>Event properties</t>
  <t>Transmitter Configuration Metadata and its discovery method for Receivers</t>
  <t>A management API for Event Streams</t>
</list></t>

<t>This specification also directly profiles several IETF Security Events specifications:</t>

<t><list style="symbols">
  <t>Security Event Token (SET) <xref target="RFC8417"/></t>
  <t>Subject Identifiers for Security Event Tokens <xref target="RFC9493"/></t>
  <t>Push-Based SET Token Delivery Using HTTP <xref target="RFC8935"/></t>
  <t>Poll-Based SET Token Delivery Using HTTP <xref target="RFC8936"/></t>
</list></t>



    </abstract>



  </front>

  <middle>


<?line 190?>

<section anchor="introduction"><name>Introduction</name>

<section anchor="notational-conventions"><name>Notational Conventions</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL
NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;,
&quot;MAY&quot;, and &quot;OPTIONAL&quot; 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>

</section>
</section>
<section anchor="subject-principals"><name>Subject Principals</name>

<t>This Shared Signals Framework specification defines a Subject Principal to be
the entities about which an event can be sent by Transmitters and received by
Receivers using the Shared Signals Framework.</t>

<t>Subject Principals are the managed entities in an SSF Transmitter or Receiver.
These include human or robotic principals, devices, customer tenants in a
multi-tenanted service, organizational units within a tenant, groups of subject
principals, or other entities that are managed by Transmitters and Receivers.
There may be other actors or resources that can be treated as Subject
Principals, and event-type definitions SHOULD specify the range of principals
addressed by the event.</t>

<t>Subject Principals are identified by Subject Members defined below.</t>

</section>
<section anchor="subject-ids"><name>Subject Members in SSF Events</name>

<section anchor="subject-members"><name>Subject Members</name>
<t>A Subject Member of an SSF event describes a subject of the event. A top-level claim named <spanx style="verb">sub_id</spanx> MUST be used to describe the primary subject of the event.</t>

<section anchor="existing-caep-and-risc-events"><name>Existing CAEP and RISC Events</name>
<t>Event types already defined in the CAEP (<xref target="CAEP"/>) and RISC (<xref target="RISC"/>) specifications MAY use a <spanx style="verb">subject</spanx> field within the <spanx style="verb">events</spanx> claim of the SSF event to describe the primary Subject Principal of the event. SSF Transmitters MUST include the top-level <spanx style="verb">sub_id</spanx> claim even for these existing event types.</t>

</section>
<section anchor="new-event-types"><name>New Event Types</name>
<t>New event types MUST use the top-level <spanx style="verb">sub_id</spanx> claim and MUST NOT use the <spanx style="verb">subject</spanx> field in the <spanx style="verb">events</spanx> claim to describe the primary Subject Principal.</t>

</section>
<section anchor="additional-subject-members"><name>Additional Subject Members</name>
<t>Specific event types MAY define additional Subject Members if required to describe additional subjects of that event type (e.g. a Transferee). These additional subject fields MAY have any field name.</t>

</section>
<section anchor="subject-member-values"><name>Subject Member Values</name>
<t>Each Subject Member MUST refer to exactly one Subject Principal. The value of a Subject Member MAY be a &quot;simple subject&quot; or a &quot;complex subject&quot;.</t>

</section>
</section>
<section anchor="simple-subjects"><name>Simple Subject Members</name>

<t>A Simple Subject Member has a claim name and a value that is a &quot;Subject
Identifier&quot; as defined in the Subject Identifiers for Security Event Tokens
<xref target="RFC9493"/>. Below is a non-normative example of a Simple Subject Member in an SSF
event.</t>

<figure title="Example: Simple Subject" anchor="simple-subject-ex"><sourcecode type="json"><![CDATA[
"sub_id": {
  "format": "email",
  "email": "foo@example.com"
}
]]></sourcecode></figure>

</section>
<section anchor="complex-subjects"><name>Complex Subject Members</name>

<t>A Complex Subject Member has a name and a value that is a JSON <xref target="RFC7159"/>
object that has a format field, and one or more Simple Subject Members. The name
of the format field is &quot;format&quot;, and its value is &quot;complex&quot;. The name of each
Simple Subject Member in this value MAY be one of the following:</t>

<t>user</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies a user.</t>
</li></ul>

<t>device</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies a device.</t>
</li></ul>

<t>session</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies a session.</t>
</li></ul>

<t>application</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies an application.</t>
</li></ul>

<t>tenant</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies a tenant.</t>
</li></ul>

<t>org_unit</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies an organizational unit.</t>
</li></ul>

<t>group</t>

<ul empty="true"><li>
  <t>OPTIONAL. A Subject Identifier that identifies a group.</t>
</li></ul>

<t>Additional Subject Member names MAY be used in Complex Subjects. Each member name MAY
appear at most once in the Complex Subject value.</t>

<t>Below is a non-normative example of a Complex Subject claim in an SSF event.</t>

<figure title="Example: Complex Subject" anchor="complex-subject-ex"><sourcecode type="json"><![CDATA[
"sub_id": {
  "format": "complex",
  "user" : {
    "format": "email",
    "email": "bar@example.com"
  },
  "tenant" : {
    "format": "iss_sub",
    "iss" : "https://example.com/idp1",
    "sub" : "1234"
  }
}
]]></sourcecode></figure>

<section anchor="complex-subject-interpretation"><name>Complex Subject Interpretation</name>

<t>All members within a Complex Subject MUST represent attributes of the same
Subject Principal. As a whole, the Complex Subject MUST refer to exactly one
Subject Principal.</t>

</section>
</section>
<section anchor="subject-ids-in-ssf"><name>Subject Identifiers in SSF Events</name>

<t>A Subject Identifier in an SSF event MUST have an identifier format that is any
one of:</t>

<t><list style="symbols">
  <t>Defined in the IANA Registry defined in Subject Identifiers for Security
Event Tokens <xref target="RFC9493"/></t>
  <t>An identifier format defined in the Additional Subject Identifier Formats
(<xref target="additional-subject-id-formats"/>) section below, OR</t>
  <t>A proprietary subject identifier format that is agreed to between parties.
Members within a subject identifier that has a proprietary subject identifier
format are agreed to between the parties and such agreement is outside the
scope of this specification.</t>
</list></t>

</section>
<section anchor="additional-subject-id-formats"><name>Additional Subject Identifier Formats</name>

<t>The following new subject identifier formats are defined:</t>

<section anchor="sub-id-jwt-id"><name>JWT ID Subject Identifier Format</name>

<t>The &quot;JWT ID&quot; Subject Identifier Format specifies a JSON Web Token (JWT)
identifier, defined in <xref target="RFC7519"/>. Subject Identifiers of this type MUST
contain the following members:</t>

<t>iss</t>

<ul empty="true"><li>
  <t>REQUIRED. The &quot;iss&quot; (issuer) claim of the JWT being identified, defined in
  <xref target="RFC7519"/></t>
</li></ul>

<t>jti</t>

<ul empty="true"><li>
  <t>REQUIRED. The &quot;jti&quot; (JWT token ID) claim of the JWT being identified, defined
  in <xref target="RFC7519"/></t>
</li></ul>

<t>The &quot;JWT ID&quot; Subject Identifier Format is identified by the name &quot;jwt_id&quot;.</t>

<t>Below is a non-normative example of Subject Identifier for the &quot;jwt_id&quot; Subject
Identifier Format.</t>

<figure title="Example: 'jwt_id' Subject Identifier" anchor="sub-id-jwtid"><sourcecode type="json"><![CDATA[
{
    "format": "jwt_id",
    "iss": "https://idp.example.com/123456789/",
    "jti": "B70BA622-9515-4353-A866-823539EECBC8"
}
]]></sourcecode></figure>

</section>
<section anchor="sub-id-saml-assertion-id"><name>SAML Assertion ID Subject Identifier Format</name>

<t>The &quot;SAML Assertion ID&quot; Subject Identifier Format specifies a SAML 2.0
<xref target="OASIS.saml-core-2.0-os"/> assertion identifier. Subject Identifiers of this
format MUST contain the following members:</t>

<t>issuer</t>

<ul empty="true"><li>
  <t>REQUIRED. The &quot;Issuer&quot; value of the SAML assertion being identified, defined
  in <xref target="OASIS.saml-core-2.0-os"/></t>
</li></ul>

<t>assertion_id</t>

<ul empty="true"><li>
  <t>REQUIRED. The &quot;ID&quot; value of the SAML assertion being identified, defined in
  <xref target="OASIS.saml-core-2.0-os"/></t>
</li></ul>

<t>The &quot;SAML Assertion ID&quot; Subject Identifier Format is identified by the name
&quot;saml_assertion_id&quot;.</t>

<t>Below is a non-normative example of Subject Identifier for the &quot;saml_assertion_id&quot;
Subject Identifier Format.</t>

<figure title="Example: 'saml_assertion_id' Subject Identifier" anchor="sub-id-samlassertionid"><sourcecode type="json"><![CDATA[
{
    "format": "saml_assertion_id",
    "issuer": "https://idp.example.com/123456789/",
    "assertion_id": "_8e8dc5f69a98cc4c1ff3427e5ce34606fd672f91e6"
}

]]></sourcecode></figure>

</section>
</section>
<section anchor="receiver-subject-processing"><name>Receiver Subject Processing</name>

<t>A SSF Receiver MUST make a best effort to process all members from a Subject in
an SSF event. The Transmitter Configuration Metadata (<xref target="discovery-meta"/>) defined
below MAY define certain members within a Complex Subject to be Critical. A SSF
Receiver MUST discard any event that contains a Subject with a Critical member
that it is unable to process.</t>

</section>
</section>
<section anchor="properties"><name>Event Properties</name>

<t>Additional members about an event may be included in the &quot;events&quot; claim. Some
of these members are required and specified as such in the respective event
types specs. If a Transmitter determines that it needs to include additional
members that are not specified in the event types spec, then the name of such
members MUST be a URI. The discoverability of all additional members is
specified in the Discovery section (<xref target="discovery"/>).</t>

</section>
<section anchor="events-examples"><name>Example SETs that conform to the Shared Signals Framework</name>

<t>The following are hypothetical examples of SETs that conform to the Shared Signals Framework.</t>

<figure title="Example: SET Containing an SSF Event with a Simple Subject Member" anchor="subject-ids-ex-simple"><sourcecode type="json"><![CDATA[
{
  "iss": "https://idp.example.com/",
  "jti": "756E69717565206964656E746966696572",
  "iat": 1520364019,
  "txn": 8675309,
  "aud": "636C69656E745F6964",
  "sub_id": {
    "format": "email",
    "email": "foo@example.com"
  },
  "events": {
    "https://schemas.openid.net/secevent/risc/event-type/account-enabled": {}
  }
}
]]></sourcecode></figure>

<figure title="Example: SET Containing an SSF Event with a Complex Subject Member" anchor="subject-ids-ex-complex"><sourcecode type="json"><![CDATA[
{
  "iss": "https://idp.example.com/",
  "jti": "756E69717565206964656E746966696572",
  "iat": 1520364019,
  "txn": 8675309,
  "aud": "636C69656E745F6964",
  "sub_id": {
      "format": "complex",
      "user": {
          "format": "iss_sub",
          "iss": "https://idp.example.com/3957ea72-1b66-44d6-a044-d805712b9288/",
          "sub": "jane.smith@example.com"
      },
      "device": {
          "format": "iss_sub",
          "iss": "https://idp.example.com/3957ea72-1b66-44d6-a044-d805712b9288/",
          "sub": "e9297990-14d2-42ec-a4a9-4036db86509a"
      }
  },
  "events": {
    "https://schemas.openid.net/secevent/caep/event-type/session-revoked": {
      "initiating_entity": "policy",
      "reason_admin": "Policy Violation: C076E82F",
      "reason_user": "Landspeed violation.",
      "event_timestamp": 1600975810
    }
  }
}
]]></sourcecode></figure>

<figure title="Example: SET Containing an SSF Event with a Simple Subject and a Property Member" anchor="subject-properties-ex"><sourcecode type="json"><![CDATA[
{
  "iss": "https://sp.example2.com/",
  "jti": "756E69717565206964656E746966696572",
  "iat": 1520364019,
  "txn": 8675309,
  "aud": "636C69656E745F6964",
  "sub_id": {
    "format": "email",
    "email": "foo@example2.com"
  },
  "events": {
    "https://schemas.openid.net/secevent/caep/event-type/token-claims-change": {
      "event_timestamp": 1600975810,
      "claims": {
         "role": "ro-admin"
      }
    }
  }
}
]]></sourcecode></figure>

<figure title="Example: SET Containing an SSF Event with a Proprietary Subject Identifier Format" anchor="subject-custom-type-ex"><sourcecode type="json"><![CDATA[
{
  "iss": "https://myservice.example3.com/",
  "jti": "756E69717565206964656E746966696534",
  "iat": 15203800012,
  "txn": 8675309,
  "aud": "636C69656E745F6324",
  "sub_id": {
    "format": "catalog_item",
    "catalog_id": "c0384/winter/2354122"
  },
  "events": {
    "https://schemas.openid.net/secevent/caep/event-type/token-claims-change": {
      "event_timestamp": 1600975810,
      "claims": {
         "role": "ro-admin"
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="discovery"><name>Transmitter Configuration Discovery</name>

<t>This section defines a mechanism for Receivers to obtain the Transmitter
Configuration Metadata.</t>

<section anchor="discovery-meta"><name>Transmitter Configuration Metadata</name>

<t>Transmitters have metadata describing their configuration:</t>

<t>spec_version</t>

<ul empty="true"><li>
  <t>OPTIONAL. A version identifying the implementer&#39;s draft or final specification implemented by the Transmitter. This includes the numerical portion of the spec version as described in the document <xref target="NAMINGCONVENTION"/>. If absent, the Transmitter is assumed to conform to &quot;1_0-ID1&quot; version of the specification (this document).</t>
</li></ul>

<ul empty="true"><li>
  <t>The following is a non-normative example of a Transmitter that implements the third implementer&#39;s draft of the Shared Signals Framework specification 1_0.</t>
</li></ul>

<figure title="Example spec_version referring to the 2nd implementer's draft of the 1_0 spec" anchor="figspecversionid2"><sourcecode type="json"><![CDATA[
   {
        "spec_version": "1_0-ID3"
   }
]]></sourcecode></figure>

<ul empty="true"><li>
  <t>The following is a non-normative example of a Transmitter that implements the final specification of the Shared Signals Framework 1_0.</t>
</li></ul>

<figure title="Example: spec_version referring to the final 1_0 spec" anchor="figspecversionfinal"><sourcecode type="json"><![CDATA[
   {
        "spec_version": "1_0"
   }
]]></sourcecode></figure>

<t>issuer</t>

<ul empty="true"><li>
  <t>REQUIRED. URL using the https scheme with no query or fragment component
  that the Transmitter asserts as its Issuer Identifier. This MUST be identical
  to the iss claim value in Security Event Tokens issued from this Transmitter.</t>
</li></ul>

<t>jwks_uri</t>

<ul empty="true"><li>
  <t>OPTIONAL. URL of the Transmitter&#39;s JSON Web Key Set <xref target="RFC7517"/> document.
  This contains the signing key(s) the Receiver uses to validate signatures from
  the Transmitter. This value MUST be specified if the Transmitter intends to
  generate signed JWTs. If present, this URL MUST use HTTP over TLS <xref target="RFC9110"/>.</t>
</li></ul>

<t>delivery_methods_supported</t>

<ul empty="true"><li>
  <t>RECOMMENDED. List of supported delivery method URIs.</t>
</li></ul>

<t>configuration_endpoint</t>

<ul empty="true"><li>
  <t>OPTIONAL. The URL of the Configuration Endpoint. If present, this URL MUST use HTTP over TLS <xref target="RFC9110"/>.</t>
</li></ul>

<t>status_endpoint</t>

<ul empty="true"><li>
  <t>OPTIONAL. The URL of the Status Endpoint. If present, this URL MUST use HTTP over TLS <xref target="RFC9110"/>.</t>
</li></ul>

<t>add_subject_endpoint</t>

<ul empty="true"><li>
  <t>OPTIONAL. The URL of the Add Subject Endpoint. If present, this URL MUST use HTTP over TLS <xref target="RFC9110"/>.</t>
</li></ul>

<t>remove_subject_endpoint</t>

<ul empty="true"><li>
  <t>OPTIONAL. The URL of the Remove Subject Endpoint. If present, this URL MUST use HTTP over TLS <xref target="RFC9110"/>.</t>
</li></ul>

<t>verification_endpoint</t>

<ul empty="true"><li>
  <t>OPTIONAL. The URL of the Verification Endpoint. If present, this URL MUST use HTTP over TLS <xref target="RFC9110"/>.</t>
</li></ul>

<t>critical_subject_members</t>

<ul empty="true"><li>
  <t>OPTIONAL. An array of member names in a Complex Subject which, if present in
  a Subject Member in an event, MUST be interpreted by a Receiver.</t>
</li></ul>

<t>authorization_schemes</t>

<ul empty="true"><li>
  <t>OPTIONAL. An array of JSON objects that specify the supported
  authorization scheme properties defined in <xref target="authorization-scheme"/>. To enable seamless discovery of
  configurations, the service provider SHOULD, with the appropriate
  security considerations, make the authorization_schemes attribute
  publicly accessible without prior authentication.</t>
</li></ul>

<t>default_subjects</t>

<ul empty="true"><li>
  <t>OPTIONAL. A string indicating the default behavior of newly created streams. If present,
  the value MUST be either &quot;ALL&quot; or &quot;NONE&quot;. If not provided, the Transmitter behavior in
  this regard is unspecified.
 - &quot;ALL&quot; indicates that any subjects that are appropriate for the stream are added to
    the stream by default. The Receiver MAY remove subjects from the stream via the
    <spanx style="verb">remove_subject_endpoint</spanx>, causing events for those subjects to <em>not</em> be transmitted.
    The Receiver MAY re-add any subjects removed this way via the <spanx style="verb">add_subject_endpoint</spanx>.
 - &quot;NONE&quot; indicates that no subjects are added by default. The Receiver MAY add subjects
    to the stream via the <spanx style="verb">add_subject_endpoint</spanx>, causing only events for those subjects
    to be transmitted. The Receiver MAY remove subjects added this way via the
    <spanx style="verb">remove_subject_endpoint</spanx>.</t>
</li></ul>

<t>TODO: consider adding a IANA Registry for metadata, similar to Section 7.1.1 of
<xref target="RFC8414"/>. This would allow other specs to add to the metadata.</t>

<section anchor="authorization-scheme"><name>Authorization scheme</name>
<t>SSF is an HTTP based signals sharing framework and is agnostic to the authentication and authorization schemes used to secure stream configuration APIs. It does not provide any SSF-specific authentication and authorization schemes but relies on the cooperating parties&#39; mutual security considerations. The authorization scheme section of the metadata provides discovery information related to the Transmitter&#39;s stream management APIs.</t>

<t>spec_urn</t>

<ul empty="true"><li>
  <t>REQUIRED. A URN that describes the specification of the protocol being used.</t>
</li></ul>

<t>The Receiver will call the Transmitter APIs by providing appropriate credentials as per the <spanx style="verb">spec_urn</spanx>.</t>

<t>The following is a non-normative example of the <spanx style="verb">spec_urn</spanx></t>

<figure title="Example: `spec_urn` specifying the OAuth protocol for authorization" anchor="figspecurn"><sourcecode type="json"><![CDATA[
   {
        "spec_urn": "urn:ietf:rfc:6749"
   }
]]></sourcecode></figure>

<t>In this case, the Receiver may obtain an access token using the Client
Credentials Grant <xref target="CLIENTCRED"/>, or any other method suitable for the Receiver and the
Transmitter.</t>

</section>
</section>
<section anchor="obtaining-transmitter-configuration-metadata"><name>Obtaining Transmitter Configuration Metadata</name>

<t>Using the Issuer URL as documented by the Transmitter, the Transmitter Configuration
Metadata can be retrieved. Receivers SHOULD ensure that the Issuer URL comes from a
trusted source and uses the <spanx style="verb">https</spanx> scheme.</t>

<t>Transmitters supporting Discovery MUST make a JSON document available at the
path formed by inserting the string &quot;/.well-known/ssf-configuration&quot; into the
Issuer between the host component and the path component, if any. The syntax
and semantics of &quot;.well-known&quot; are defined in <xref target="RFC8615"/>.  &quot;ssf-configuration&quot;
MUST point to a JSON document compliant with this specification, and that document MUST be
returned using the &quot;application/json&quot; content type.</t>

<section anchor="transmitter-configuration-request"><name>Transmitter Configuration Request</name>

<t>A Transmitter Configuration Document MUST be queried using an HTTP &quot;GET&quot; request
at the previously specified path.</t>

<t>The Receiver would make the following request to the Issuer
&quot;https://tr.example.com&quot; to obtain its Transmitter Configuration Metadata, since the
Issuer contains no path component:</t>

<figure title="Example: Transmitter Configuration Request (without path)" anchor="figdiscoveryrequest"><sourcecode type="http"><![CDATA[
GET /.well-known/ssf-configuration HTTP/1.1
Host: tr.example.com
]]></sourcecode></figure>

<t>If the  Issuer value contains a path component, any terminating &quot;/&quot; MUST be
removed before inserting &quot;/.well-known/ssf-configuration&quot; between the host
component and the path component. The Receiver would make the following request
to the Issuer &quot;https://tr.example.com/issuer1&quot; to obtain its Transmitter Configuration
Metadata, since the Issuer contains a path component:</t>

<figure title="Example: Transmitter Configuration Request (with path)" anchor="figdiscoveryrequestpath"><sourcecode type="http"><![CDATA[
GET /.well-known/ssf-configuration/issuer1 HTTP/1.1
Host: tr.example.com
]]></sourcecode></figure>

<t>Using path components enables supporting multiple issuers per host. This is
required in some multi-tenant hosting configurations. This use of &quot;.well-known&quot;
is for supporting multiple issuers per host; unlike its use in <xref target="RFC8615"/>, it
does not provide general information about the host.</t>

</section>
<section anchor="backward-compatibility-for-risc-transmitters"><name>Backward Compatibility for RISC Transmitters</name>
<t>Existing RISC Transmitters MAY continue to use the path component
&quot;/risc-configuration&quot; instead of the path component &quot;/ssf-configuration&quot; in the
path for the Transmitter Configuration Metadata. New services supporting the
Shared Signals Framework SHOULD NOT use this location for publishing the
Transmitter Configuration Metadata. For example, the Transmitter Configuration
Metadata for the Transmitter &quot;https://risc-tr.example.com&quot; MAY be obtained by
making the following request:</t>

<figure title="Example: Transmitter Configuration Request for RISC Transmitters" anchor="figolddiscoveryrequest"><sourcecode type="http"><![CDATA[
GET /.well-known/risc-configuration HTTP/1.1
Host: risc-tr.example.com
]]></sourcecode></figure>

</section>
<section anchor="transmitter-configuration-response"><name>Transmitter Configuration Response</name>
<t>The response is a set of Claims about the Transmitter&#39;s configuration, including
all necessary endpoints and public key location information. A successful
response MUST use the 200 OK HTTP status code and return a JSON object using the
&quot;application/json&quot; content type that contains a set of Claims as its members
that are a subset of the Metadata values defined in <xref target="discovery-meta"/>. Other
Claims MAY also be returned.</t>

<t>Claims that return multiple values are represented as JSON arrays. Claims with
zero elements MUST be omitted from the response.</t>

<t>An error response uses the applicable HTTP status code value.</t>

<t>The following is a non-normative example of a Transmitter Configuration Response</t>

<figure title="Example: Transmitter Configuration Response" anchor="figdiscoveryresponse"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json

{
  "spec_version": "1_0-ID3",
  "issuer":
    "https://tr.example.com",
  "jwks_uri":
    "https://tr.example.com/jwks.json",
  "delivery_methods_supported": [
    "urn:ietf:rfc:8935",
    "urn:ietf:rfc:8936"],
  "configuration_endpoint":
    "https://tr.example.com/ssf/mgmt/stream",
  "status_endpoint":
    "https://tr.example.com/ssf/mgmt/status",
  "add_subject_endpoint":
    "https://tr.example.com/ssf/mgmt/subject:add",
  "remove_subject_endpoint":
    "https://tr.example.com/ssf/mgmt/subject:remove",
  "verification_endpoint":
    "https://tr.example.com/ssf/mgmt/verification",
  "critical_subject_members": [ "tenant", "user" ],
  "authorization_schemes":[
      {
        "spec_urn": "urn:ietf:rfc:6749"
      },
      {
        "spec_urn": "urn:ietf:rfc:8705"
      }
    ],
  "default_subjects": "NONE"
}
]]></sourcecode></figure>

</section>
<section anchor="transmitter-configuration-validation"><name>Transmitter Configuration Validation</name>
<t>If any of the validation procedures defined in this specification fail, any
operations requiring the information that failed to correctly validate MUST be
aborted and the information that failed to validate MUST NOT be used.</t>

<t>The &quot;issuer&quot; value returned MUST be identical to the Issuer URL that was
directly used to retrieve the configuration information. This MUST also be
identical to the &quot;iss&quot; Claim value in Security Event Tokens issued from this
Transmitter.</t>

</section>
</section>
</section>
<section anchor="management"><name>Management API for SET Event Streams</name>
<t>An Event Stream is an abstraction for how events are communicated from a
Transmitter to a Receiver. The Event Stream&#39;s configuration, which is jointly
managed by the Transmitter and Receiver, holds information about
what types of events will be sent from the Transmitter, as well as the mechanism by
which the Receiver can expect to receive the events. The Event Stream also keeps
track of what Subjects are of interest to the Receiver, and only events with those
Subjects are transmitted on the stream.</t>

<t>This section defines an HTTP API to be implemented by Event Transmitters
which can be used by Event Receivers to create and delete one or more Event Streams.
The API can also be used to query and update the Event Stream&#39;s configuration and status,
add and remove Subjects, and trigger verification for those streams.</t>

<t>Unless there exists some other method of establishing trust between a Transmitter and
Receiver, all Stream Management API endpoints MUST use standard HTTP
authentication and authorization schemes, as per <xref target="RFC9110"/>.
This authorization MUST associate a Receiver with one or more stream IDs and &quot;aud&quot; values,
such that only authorized Receivers are able to access or modify the details of the
associated Event Streams.</t>

<figure title="Event Stream Management API" anchor="figintro"><artwork><![CDATA[
+------------+                +------------+
|            | Stream Config  |            |
| Event      <----------------+ Event      |
| Stream     |                | Receiver   |
| Management | Stream Status  |            |
| API        <----------------+            |
|            |                |            |
|            | Add Subject    |            |
|            <----------------+            |
|            |                |            |
|            | Remove Subject |            |
|            <----------------+            |
|            |                |            |
|            | Stream Updated |            |
|            +---------------->            |
|            |                |            |
|            | Verification   |            |
|            <----------------+            |
|            |                |            |
+------------+                +------------+
]]></artwork></figure>

<t>It is OPTIONAL for Transmitters to implement a Management API, but it is
RECOMMENDED that they implement it, especially the endpoints for querying the
Stream Status and for triggering Verification.</t>

<section anchor="management-api"><name>Event Stream Management</name>
<t>Event Receivers manage how they receive events and the subjects about which
they want to receive events over an Event Stream by making HTTP requests to
endpoints in the Event Stream Management API.</t>

<t>A Transmitter and Receiver MAY use the same Event Stream for updates about
multiple Subject Principals. The status of the Event Stream MAY be queried
and managed independently for each Subject Principal by Transmitters and
Receivers.</t>

<t>The Event Stream Management API is implemented by the Event Transmitter and
consists of the following endpoints:</t>

<t>Configuration Endpoint</t>

<ul empty="true"><li>
  <t>An endpoint used to create and delete Event Streams, as well as read and
  update an Event Stream&#39;s current configuration.</t>
</li></ul>

<t>Status Endpoint</t>

<ul empty="true"><li>
  <t>An endpoint used to read and update an Event Stream&#39;s current status.</t>
</li></ul>

<t>Add Subject Endpoint</t>

<ul empty="true"><li>
  <t>An endpoint used to add subjects to an Event Stream.</t>
</li></ul>

<t>Remove Subject Endpoint</t>

<ul empty="true"><li>
  <t>An endpoint used to remove subjects from an Event Stream.</t>
</li></ul>

<t>Verification Endpoint</t>

<ul empty="true"><li>
  <t>An endpoint used to request the Event Transmitter to transmit a Verification
  Event over an Event Stream.</t>
</li></ul>

<t>An Event Transmitter MAY use the same URLs as endpoints for multiple Event
Receivers, provided that the Event Transmitter has some mechanism through which
they can identify the applicable set of Event Streams for any given request,
e.g. from authentication credentials. The definition of such mechanisms is
outside the scope of this specification.</t>

<section anchor="stream-config"><name>Stream Configuration</name>
<t>An Event Stream&#39;s configuration is a collection of data, provided by both the
Transmitter and the Receiver, that describes the information being sent over
the Event Stream. It is represented as a JSON <xref target="RFC7159"/> object with the
following properties:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t><strong>Transmitter-Supplied</strong>, REQUIRED. A string that uniquely identifies the stream. A
  Transmitter MUST generate a unique ID for each of its non-deleted streams
  at the time of stream creation.</t>
</li></ul>

<t>iss</t>

<ul empty="true"><li>
  <t><strong>Transmitter-Supplied</strong>, REQUIRED. A URL using the https scheme with no query or
  fragment component that the Transmitter asserts as its Issuer Identifier. This
  MUST be identical to the &quot;iss&quot; Claim value in Security Event Tokens issued
  from this Transmitter.</t>
</li></ul>

<t>aud</t>

<ul empty="true"><li>
  <t><strong>Transmitter-Supplied</strong>, REQUIRED. A string or an array of strings containing an
  audience claim as defined in JSON Web Token (JWT)<xref target="RFC7519"/> that identifies
  the Event Receiver(s) for the Event Stream. This property cannot be updated.
  If multiple Receivers are specified then the Transmitter SHOULD know that
  these Receivers are the same entity.</t>
</li></ul>

<t>events_supported</t>

<ul empty="true"><li>
  <t><strong>Transmitter-Supplied</strong>, OPTIONAL. An array of URIs identifying the set of events
  supported by the Transmitter for this Receiver. If omitted, Event Transmitters
  SHOULD make this set available to the Event Receiver via some other means
  (e.g. publishing it in online documentation).</t>
</li></ul>

<t>events_requested</t>

<ul empty="true"><li>
  <t><strong>Receiver-Supplied</strong>, OPTIONAL. An array of URIs identifying the set of events that
  the Receiver requested. A Receiver SHOULD request only the events that it
  understands and it can act on. This is configurable by the Receiver. A
  Transmitter MUST ignore any array values that it does not understand. This
  array SHOULD NOT be empty.</t>
</li></ul>

<t>events_delivered</t>

<ul empty="true"><li>
  <t><strong>Transmitter-Supplied</strong>, REQUIRED. An array of URIs identifying the set of events that
  the Transmitter MUST include in the stream. This is a subset (not necessarily
  a proper subset) of the intersection of &quot;events_supported&quot; and
  &quot;events_requested&quot;. A Receiver MUST rely on the values received in this field
  to understand which event types it can expect from the Transmitter.</t>
</li></ul>

<t>delivery</t>

<ul empty="true"><li>
  <t>REQUIRED. A JSON object containing a set of name/value pairs specifying configuration
  parameters for the SET delivery method. The actual delivery method is
  identified by the special key &quot;method&quot; with the value being a URI as defined
  in <xref target="delivery-meta"/>. The value of the &quot;delivery&quot; field contains two
  sub-fields:</t>
</li></ul>

<ul empty="true"><li>
  <t>method</t>
</li></ul>

<ul empty="true"><li>
  <ul empty="true"><li>
    <t><strong>Receiver-Supplied</strong>, REQUIRED. The specific delivery method to be used. This can be
    any one of &quot;urn:ietf:rfc:8935&quot; (push) or &quot;urn:ietf:rfc:8936&quot; (poll), but
    not both.</t>
  </li></ul>
</li></ul>

<ul empty="true"><li>
  <t>endpoint_url</t>
</li></ul>

<ul empty="true"><li>
  <ul empty="true"><li>
    <t>REQUIRED. The location at which the push or poll delivery will take place. If the
    <spanx style="verb">method</spanx> value is &quot;urn:ietf:rfc:8935&quot; (push), then this value MUST
    be supplied by the Receiver.  If the <spanx style="verb">method</spanx> value is
    &quot;urn:ietf:rfc:8936&quot; (poll), then this value MUST be supplied by the
    Transmitter.</t>
  </li></ul>
</li></ul>

<t>min_verification_interval</t>

<ul empty="true"><li>
  <t><strong>Transmitter-Supplied</strong>, OPTIONAL. An integer indicating the minimum amount of time in
  seconds that must pass in between verification requests. If an Event Receiver
  submits verification requests more frequently than this, the Event Transmitter
  MAY respond with a 429 status code. An Event Transmitter SHOULD NOT respond
  with a 429 status code if an Event Receiver is not exceeding this frequency.</t>
</li></ul>

<t>description</t>

<ul empty="true"><li>
  <t><strong>Receiver-Supplied</strong>, OPTIONAL. A string that describes the properties of the stream.
  This is useful in multi-stream systems to identify the stream for human actors. The
  transmitter MAY truncate the string beyond an allowed max length.</t>
</li></ul>

<t>TODO: consider adding a IANA Registry for stream configuration metadata, similar
to Section 7.1.1 of <xref target="RFC8414"/>. This would allow other specs to add to
the stream configuration.</t>

<section anchor="creating-a-stream"><name>Creating a Stream</name>
<t>In order to communicate events from a Transmitter to a Receiver, a Receiver
MUST first create an Event Stream. An Event Receiver creates a stream by making
an HTTP POST request to the Configuration Endpoint. On receiving a valid request
the Event Transmitter responds with a &quot;201 Created&quot; response containing a
<xref target="RFC7159">JSON</xref> representation of the stream&#39;s configuration in the body. The Receiver
MUST check the response and confirm that the <spanx style="verb">iss</spanx> value matches the Issuer from
which it received the Transmitter Configuration data.</t>

<t>If a stream already exists, and the Transmitter allows multiple streams with the
same Receiver, the Event Transmitter MUST respond with a new stream ID. If the
Transmitter does not allow multiple streams with the same Receiver, it MUST respond
respond with HTTP status code &quot;409 Conflict&quot;. The Receiver MAY then GET the
existing stream configuration and, if desired, use PATCH or PUT to update or
replace the existing stream configuration.</t>

<t>The HTTP POST request MAY contain the Receiver-Supplied values of the Stream
Configuration (<xref target="stream-config"/>) object:</t>

<t><list style="symbols">
  <t><spanx style="verb">events_requested</spanx></t>
  <t><spanx style="verb">delivery</spanx> : Note that in the case of the poll method, the <spanx style="verb">endpoint_url</spanx> value is
supplied by the Transmitter.</t>
</list></t>

<t>If the request does not contain the <spanx style="verb">delivery</spanx> property, then the Transmitter
MUST assume that the <spanx style="verb">method</spanx> is &quot;urn:ietf:rfc:8936&quot; (poll). The
Transmitter MUST include a <spanx style="verb">delivery</spanx> property in the response with this
<spanx style="verb">method</spanx> property and an <spanx style="verb">endpoint_url</spanx> property.</t>

<t>The following is a non-normative example request to create an Event Stream:</t>

<figure title="Example: Create Event Stream Request" anchor="figcreatestreamreq"><sourcecode type="http"><![CDATA[
POST /ssf/stream HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "delivery": {
    "method": "urn:ietf:rfc:8935",
    "endpoint_url": "https://receiver.example.com/events"
  },
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "description" : "Stream for Receiver A using events type_2, type_3, type_4"
}
]]></sourcecode></figure>

<t>The following is a non-normative example response:</t>

<figure title="Example: Create Stream Response" anchor="figcreatestreamresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/json

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "iss": "https://tr.example.com",
  "aud": [
      "https://receiver.example.com/web",
      "https://receiver.example.com/mobile"
    ],
  "delivery": {
    "method": "urn:ietf:rfc:8935",
    "endpoint_url": "https://receiver.example.com/events"
  },
  "events_supported": [
    "urn:example:secevent:events:type_1",
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "events_delivered": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "description" : "Stream for Receiver A using events type_2, type_3, type_4"
}
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Create Stream Errors" anchor="tablecreatestream">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>400</c>
      <c>if the request cannot be parsed</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to create a stream</c>
      <c>409</c>
      <c>if the Transmitter does not support multiple streams per Receiver</c>
</texttable>

</section>
<section anchor="reading-a-streams-configuration"><name>Reading a Stream&#39;s Configuration</name>
<t>An Event Receiver gets the current configuration of a stream by making an HTTP
GET request to the Configuration Endpoint. On receiving a valid request, the
Event Transmitter responds with a &quot;200 OK&quot; response containing a <xref target="RFC7159">JSON</xref>
representation of the stream&#39;s configuration in the body.  The Receiver
MUST check the response and confirm that the <spanx style="verb">iss</spanx> value matches the Issuer from
which it received the Transmitter Configuration data.</t>

<t>The GET request MAY include the &quot;stream_id&quot; as a query parameter in order to
identify the correct Event Stream. If the &quot;stream_id&quot; parameter is missing,
then the Transmitter MUST return a list of the stream configurations available
to this Receiver. In the event that there are no Event Streams configured, the
Transmitter MUST return an empty list.</t>

<t>The following is a non-normative example request to read an Event Stream&#39;s
configuration:</t>

<figure title="Example: Read Stream Configuration Request" anchor="figreadconfigreq"><sourcecode type="http"><![CDATA[
GET /ssf/stream?stream_id=f67e39a0a4d34d56b3aa1bc4cff0069f HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
]]></sourcecode></figure>

<t>The following is a non-normative example response:</t>

<figure title="Example: Read Stream Configuration Response" anchor="figreadconfigresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "iss": "https://tr.example.com",
  "aud": [
      "https://receiver.example.com/web",
      "https://receiver.example.com/mobile"
    ],
  "delivery": {
    "method": "urn:ietf:rfc:8935",
    "endpoint_url": "https://receiver.example.com/events"
  },
  "events_supported": [
    "urn:example:secevent:events:type_1",
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "events_delivered": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "description" : "Stream for Receiver A using events type_2, type_3, type_4"
}
]]></sourcecode></figure>

<t>The following is a non-normative example request to read an Event Stream&#39;s
configuration, with no &quot;stream_id&quot; indicated:</t>

<figure title="Example: Read Stream Configuration Request" anchor="figreadconfigreqnostreamid"><sourcecode type="http"><![CDATA[
GET /ssf/stream HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
]]></sourcecode></figure>

<t>The following is a non-normative example response to a request with no &quot;stream_id&quot;:</t>

<figure title="Example: Read Stream Configuration Response" anchor="figreadconfigrespnostreamidmanystreams"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

[
  {
    "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
    "iss": "https://tr.example.com",
    "aud": [
        "https://receiver.example.com/web",
        "https://receiver.example.com/mobile"
      ],
    "delivery": {
      "method": "urn:ietf:rfc:8935",
      "endpoint_url": "https://receiver.example.com/events"
    },
    "events_supported": [
      "urn:example:secevent:events:type_1",
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3"
    ],
    "events_requested": [
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3",
      "urn:example:secevent:events:type_4"
    ],
    "events_delivered": [
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3"
    ]
  },
  {
    "stream_id": "50b2d39934264897902c0581ba7c21a3",
    "iss": "https://tr.example.com",
    "aud": [
        "https://receiver.example.com/web",
        "https://receiver.example.com/mobile"
      ],
    "delivery": {
      "method": "urn:ietf:rfc:8935",
      "endpoint_url": "https://receiver.example.com/events"
    },
    "events_supported": [
      "urn:example:secevent:events:type_1",
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3"
    ],
    "events_requested": [
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3",
      "urn:example:secevent:events:type_4"
    ],
    "events_delivered": [
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3"
    ],
    "description" : "Stream for Receiver A using events type_2, type_3, type_4"
  }
]
]]></sourcecode></figure>

<t>The following is a non-normative example response to a request with no
&quot;stream_id&quot; when there is only one Event Stream configured:</t>

<figure title="Example: Read Stream Configuration Response" anchor="figreadconfigrespnostreamidonestream"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

[
  {
    "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
    "iss": "https://tr.example.com",
    "aud": [
        "https://receiver.example.com/web",
        "https://receiver.example.com/mobile"
      ],
    "delivery": {
      "method": "urn:ietf:rfc:8935",
      "endpoint_url": "https://receiver.example.com/events"
    },
    "events_supported": [
      "urn:example:secevent:events:type_1",
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3"
    ],
    "events_requested": [
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3",
      "urn:example:secevent:events:type_4"
    ],
    "events_delivered": [
      "urn:example:secevent:events:type_2",
      "urn:example:secevent:events:type_3"
    ]
  }
]
]]></sourcecode></figure>

<t>The following is a non-normative example response to a request with no &quot;stream_id&quot;
when there are no Event Streams configured:</t>

<figure title="Example: Read Stream Configuration Response" anchor="figreadconfigrespnostreamidnostreams"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

[]
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Read Stream Configuration Errors" anchor="tabreadconfig">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to read the stream configuration</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
</texttable>

</section>
<section anchor="updating-a-streams-configuration"><name>Updating a Stream&#39;s Configuration</name>
<t>An Event Receiver updates the current configuration of a stream by making an
HTTP PATCH request to the Configuration Endpoint. The PATCH body contains a
<xref target="RFC7159">JSON</xref> representation of the stream configuration properties to change. On
receiving a valid request, the Event Transmitter responds with a &quot;200 OK&quot;
response containing a <xref target="RFC7159">JSON</xref> representation of the entire updated stream
configuration in the body. The Receiver MUST check the response and confirm that the
<spanx style="verb">iss</spanx> value matches the Issuer from which it received the Transmitter Configuration data.</t>

<t>The stream_id property MUST be present in the request. Other properties
MAY be present in the request. Any Receiver-Supplied property present in the
request MUST be updated by the Transmitter. Any properties missing in the
request MUST NOT be changed by the Transmitter. If <spanx style="verb">events_requested</spanx> property is
included in the request, it SHOULD NOT be an empty array.</t>

<t>Transmitter-Supplied properties besides the stream_id MAY be present,
but they MUST match the expected value. Missing Transmitter-Supplied
properties MUST be ignored by the Transmitter. The <spanx style="verb">events_delivered</spanx> property,
if present, MUST match the Transmitter&#39;s expected value before any updates are applied.</t>

<t>The following is a non-normative example request to replace an Event Stream&#39;s
configuration:</t>

<figure title="Example: Update Stream Configuration Request" anchor="figupdateconfigreq"><sourcecode type="http"><![CDATA[
PATCH /ssf/stream HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "description" : "Stream for Receiver B using events type_2, type_3, type_4"
}
]]></sourcecode></figure>

<t>The following is a non-normative example response:</t>

<figure title="Example: Update Stream Configuration Response" anchor="figupdateconfigresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "iss": "https://tr.example.com",
  "aud": [
    "https://receiver.example.com/web",
    "https://receiver.example.com/mobile"
  ],
  "delivery": {
    "method": "urn:ietf:rfc:8935",
    "endpoint_url": "https://receiver.example.com/events"
  },
  "events_supported": [
    "urn:example:secevent:events:type_1",
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "events_delivered": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "description" : "Stream for Receiver B using events type_2, type_3, type_4"
}
]]></sourcecode></figure>

<t>Pending conditions or errors are signaled with HTTP status codes as follows:</t>

<texttable title="Update Stream Configuration Errors" anchor="tabupdateconfig">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>202</c>
      <c>if the update request has been accepted, but not processed. Receiver MAY try the same request later to get processing result.</c>
      <c>400</c>
      <c>if the request body cannot be parsed, a Transmitter-Supplied property is incorrect, or if the request is otherwise invalid</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to update the stream configuration</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
</texttable>

</section>
<section anchor="replacing-a-streams-configuration"><name>Replacing a Stream&#39;s Configuration</name>
<t>An Event Receiver replaces the current configuration of a stream by making an
HTTP PUT request to the Configuration Endpoint. The PUT body contains a JSON
<xref target="RFC7159"/> representation of the new configuration. On receiving a valid
request, the Event Transmitter responds with a &quot;200 OK&quot; response containing a
JSON <xref target="RFC7159"/> representation of the updated stream configuration in the body.
The Receiver MUST check the response and confirm that the <spanx style="verb">iss</spanx> value matches the
Issuer from which it received the Transmitter Configuration data.</t>

<t>The stream_id and the full set of Receiver-Supplied properties MUST be present
in the PUT body, not only those specifically intended to be changed.
Missing Receiver-Supplied properties MUST be interpreted as requested to be
deleted. Event Receivers MAY read the configuration first, modify the JSON
<xref target="RFC7159"/> representation, then make a replacement request. If <spanx style="verb">events_requested</spanx>
property is included in the request, it SHOULD NOT be an empty array.</t>

<t>Transmitter-Supplied properties besides the stream_id MAY be present,
but they MUST match the expected value. Missing Transmitter-Supplied
properties MUST be ignored by the Transmitter. The <spanx style="verb">events_delivered</spanx> property,
if present, MUST match the Transmitter&#39;s expected value <em>before</em> any updates are applied.</t>

<t>The following is a non-normative example request to replace an Event Stream&#39;s
configuration:</t>

<figure title="Example: Replace Stream Configuration Request" anchor="figreplaceconfigreq"><sourcecode type="http"><![CDATA[
PUT /ssf/stream HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "delivery": {
    "method": "urn:ietf:rfc:8935",
    "endpoint_url": "https://receiver.example.com/events"
  },
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "description" : "Stream for Receiver C"
}
]]></sourcecode></figure>

<t>The following is a non-normative example response:</t>

<figure title="Example: Replace Stream Configuration Response" anchor="figreplaceconfigresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "iss": "https://tr.example.com",
  "aud": [
    "https://receiver.example.com/web",
    "https://receiver.example.com/mobile"
  ],
  "delivery": {
    "method": "urn:ietf:rfc:8935",
    "endpoint_url": "https://receiver.example.com/events"
  },
  "events_supported": [
    "urn:example:secevent:events:type_1",
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "events_requested": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3",
    "urn:example:secevent:events:type_4"
  ],
  "events_delivered": [
    "urn:example:secevent:events:type_2",
    "urn:example:secevent:events:type_3"
  ],
  "description" : "Stream for Receiver C"
}
]]></sourcecode></figure>

<t>Pending conditions or errors are signaled with HTTP status codes as follows:</t>

<texttable title="Replace Stream Configuration Errors" anchor="tabreplaceconfig">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>202</c>
      <c>if the replace request has been accepted, but not processed. Receiver MAY try the same request later in order to get processing result.</c>
      <c>400</c>
      <c>if the request body cannot be parsed, a Transmitter-Supplied property is incorrect, or if the request is otherwise invalid</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to replace the stream configuration</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
</texttable>

</section>
<section anchor="deleting-a-stream"><name>Deleting a Stream</name>
<t>An Event Receiver deletes a stream by making an HTTP DELETE request to the
Configuration Endpoint. On receiving a request, the Event Transmitter responds
with an empty &quot;204 No Content&quot; response if the configuration was successfully removed.</t>

<t>The DELETE request MUST include the &quot;stream_id&quot; as a query parameter in order to
identify the correct Event Stream.</t>

<t>The following is a non-normative example request to delete an Event Stream:</t>

<figure title="Example: Delete Stream Request" anchor="figdeletestreamreq"><sourcecode type="http"><![CDATA[
DELETE /ssf/stream?stream_id=f67e39a0a4d34d56b3aa1bc4cff0069f HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
]]></sourcecode></figure>

<t>The following is a non-normative example response of a successful request:</t>

<figure title="Example: Delete Stream Response" anchor="figdeletestreamresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 204 No Content
Cache-Control: no-store
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Delete Stream Errors">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to delete the stream</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
</texttable>

</section>
</section>
<section anchor="status"><name>Stream Status</name>
<t>Event Streams are managed independently. A Receiver MAY request that events from a
stream be interrupted by Updating the Stream Status (<xref target="updating-a-streams-status"/>).
If a Transmitter decides to enable, pause or disable updates from a stream
independently of an update request from a Receiver, it MUST send a Stream Updated Event
(<xref target="stream-updated-event"/>) to the Receiver.</t>

<section anchor="reading-a-streams-status"><name>Reading a Stream&#39;s Status</name>
<t>An Event Receiver checks the current status of an Event Stream by making an HTTP
GET request to the stream&#39;s Status Endpoint.</t>

<t>The Stream Status method takes the following parameters:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t>REQUIRED. A string identifying the stream whose status is being queried.</t>
</li></ul>

<t>On receiving a valid request, the Event Transmitter responds with a 200 OK
response containing a <xref target="RFC7159">JSON</xref> object with the following attributes:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t>REQUIRED. A string identifying the stream whose status is being queried.</t>
</li></ul>

<t>status</t>

<ul empty="true"><li>
  <t>REQUIRED. A string whose value MUST be one of the values described below.</t>
</li></ul>

<t>reason</t>

<ul empty="true"><li>
  <t>An OPTIONAL string whose value SHOULD express why the stream&#39;s status is set to
the current value.</t>
</li></ul>

<t>The allowable &quot;status&quot; values are:</t>

<t>enabled</t>

<ul empty="true"><li>
  <t>The Transmitter MUST transmit events over the stream, according to the
  stream&#39;s configured delivery method.</t>
</li></ul>

<t>paused</t>

<ul empty="true"><li>
  <t>The Transmitter MUST NOT transmit events over the stream. The Transmitter
  will hold any events it would have transmitted while paused, and SHOULD
  transmit them when the stream&#39;s status becomes &quot;enabled&quot;. If a Transmitter
  holds successive events that affect the same Subject Principal, then the
  Transmitter MUST make sure that those events are transmitted in the order of
  time that they were generated OR the Transmitter MUST send only the last events
  that do not require the previous events affecting the same Subject Principal to
  be processed by the Receiver, because the previous events are either cancelled
  by the later events or the previous events are outdated.</t>
</li></ul>

<t>disabled</t>

<ul empty="true"><li>
  <t>The Transmitter MUST NOT transmit events over the stream and will not hold
  any events for later transmission.</t>
</li></ul>

<t>The following is a non-normative example request to check an Event Stream&#39;s
status:</t>

<figure title="Example: Check Stream Status Request" anchor="figstatusreq"><sourcecode type="http"><![CDATA[
GET /ssf/status?stream_id=f67e39a0a4d34d56b3aa1bc4cff0069f HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer zzzz
]]></sourcecode></figure>

<t>The following is a non-normative example response:</t>

<figure title="Example: Check Stream Status Response" anchor="figstatusresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "status": "paused",
  "reason": "SYSTEM_DOWN_FOR_MAINTENANCE"
}
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Read Stream Status Errors" anchor="tabreadstatus">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to read the stream status</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
</texttable>

<t>Examples:</t>

<t><list style="numbers" type="1">
  <t>If a Receiver makes an unauthorized request, then the
Transmitter MUST respond with a 401 error status.</t>
  <t>If a Receiver makes an authorized request, but the Transmitter policy
does not permit the Receiver from obtaining the status, then the Transmitter
MAY respond with a 403 error status.</t>
  <t>If the Receiver requests the status for a stream that does not exist then the
Transmitter MUST respond with a 404 error status.</t>
</list></t>

</section>
<section anchor="updating-a-streams-status"><name>Updating a Stream&#39;s Status</name>
<t>An Event Receiver updates the current status of a stream by making an HTTP POST
request to the Status Endpoint. The POST body contains a <xref target="RFC7159">JSON</xref> object
with the following fields:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t>REQUIRED. A string identifying the stream whose status is being updated.</t>
</li></ul>

<t>status</t>

<ul empty="true"><li>
  <t>REQUIRED. The new status of the Event Stream.</t>
</li></ul>

<t>reason</t>

<ul empty="true"><li>
  <t>OPTIONAL. A short text description that explains the reason for the change.</t>
</li></ul>

<t>On receiving a valid request, the Event Transmitter responds with a &quot;200 OK&quot;
response containing a <xref target="RFC7159">JSON</xref> representation of the updated stream
status in the body, using the same fields as described in the request.</t>

<t>The following is a non-normative example request to update an Event Stream&#39;s
status:</t>

<figure title="Example: Update Stream Status Request Without Optional Fields" anchor="figupdatestatusreq"><sourcecode type="http"><![CDATA[
POST /ssf/status HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "status": "paused"
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an Update Stream Status request with an
optional reason:</t>

<figure title="Example: Update Stream Status Request With Optional Reason" anchor="figupdatestatuswithreasonreq"><sourcecode type="http"><![CDATA[
POST /ssf/status HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "status": "paused",
  "reason": "Disabled by administrator action."
}
]]></sourcecode></figure>

<t>The following is a non-normative example response:</t>

<figure title="Example: Update Stream Status Response" anchor="figupdatestatusresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "status": "paused",
  "reason": "Disabled by administrator action."
}
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Update Stream Status Errors" anchor="tabupdatestatus">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>202</c>
      <c>if the update request has been accepted, but not processed. Receiver MAY try the same request later in order to get processing result.</c>
      <c>400</c>
      <c>if the request body cannot be parsed or if the request is otherwise invalid</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to update the stream status</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
</texttable>

<t>Examples:</t>

<t><list style="numbers" type="1">
  <t>If a Receiver makes a request to update a stream status, and the Transmitter is
unable to decide whether or not to complete the request, then the Transmitter MUST
respond with a 202 status code.</t>
</list></t>

</section>
</section>
<section anchor="subjects"><name>Subjects</name>
<t>An Event Receiver can indicate to an Event Transmitter whether or not the
Receiver wants to receive events about a particular subject by &quot;adding&quot; or
&quot;removing&quot; that subject to the Event Stream, respectively.</t>

<t>If a Receiver adds a subject to a stream, the Transmitter SHOULD send any events
relating to the subject, which have event_types that the Receiver has subscribed to,
and both the stream and the subject are enabled. In the case of Simple Subjects,
two subjects match if they are exactly identical. For Complex Subjects, two subjects
match if, for all fields in the Complex Subject (i.e. <spanx style="verb">user</spanx>, <spanx style="verb">group</spanx>, <spanx style="verb">device</spanx>, etc.),
at least one of the following statements is true:</t>

<t><list style="numbers" type="1">
  <t>Subject 1&#39;s field is not defined</t>
  <t>Subject 2&#39;s field is not defined</t>
  <t>Subject 1&#39;s field is identical to Subject 2&#39;s field</t>
</list></t>

<section anchor="adding-a-subject-to-a-stream"><name>Adding a Subject to a Stream</name>
<t>To add a subject to an Event Stream, the Event Receiver makes an HTTP POST
request to the Add Subject Endpoint, containing in the body a JSON object the
following claims:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t>REQUIRED. A string identifying the stream to which the subject is being added.</t>
</li></ul>

<t>subject</t>

<ul empty="true"><li>
  <t>REQUIRED. A Subject claim identifying the subject to be added.</t>
</li></ul>

<t>verified</t>

<ul empty="true"><li>
  <t>OPTIONAL. A boolean value; when true, it indicates that the Event Receiver
  has verified the Subject claim. When false, it indicates that the Event
  Receiver has not verified the Subject claim. If omitted, Event Transmitters
  SHOULD assume that the subject has been verified.</t>
</li></ul>

<t>On a successful response, the Event Transmitter responds with an empty &quot;200 OK&quot;
response. The Event Transmitter MAY choose to silently ignore the request, for
example if the subject has previously indicated to the Transmitter that they do
not want events to be transmitted to the Event Receiver. In this case, the
Transmitter MAY return an empty &quot;200 OK&quot; response or an appropriate error code.
See Security Considerations (<xref target="management-sec"/>).</t>

<t>The following is a non-normative example request to add a subject to a stream,
where the subject is identified by an Email Subject Identifier.</t>

<figure title="Example: Add Subject Request" anchor="figaddreq"><sourcecode type="http"><![CDATA[
POST /ssf/subjects:add HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "subject": {
    "format": "email",
    "email": "example.user@example.com"
  },
  "verified": true
}
]]></sourcecode></figure>

<t>The following is a non-normative example response to a successful request:</t>

<figure title="Example: Add Subject Response" anchor="figaddresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Server: transmitter.example.com
Cache-Control: no-store
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Add Subject Errors" anchor="tabadderr">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>400</c>
      <c>if the request body cannot be parsed or if the request is otherwise invalid</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to add this particular subject, or not allowed to add in general</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver, or if the subject is not recognized by the Event Transmitter. The Event Transmitter may choose to stay silent in this second case and respond with &quot;200&quot;</c>
      <c>429</c>
      <c>if the Event Receiver is sending too many requests in a given amount of time</c>
</texttable>

</section>
<section anchor="removing-a-subject"><name>Removing a Subject</name>
<t>To remove a subject from an Event Stream, the Event Receiver makes an HTTP POST
request to the Remove Subject Endpoint, containing in the body a JSON object
with the following claims:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t>REQUIRED. A string identifying the stream from which the subject is being removed.</t>
</li></ul>

<t>subject</t>

<ul empty="true"><li>
  <t>REQUIRED. A Subject claim identifying the subject to be removed.</t>
</li></ul>

<t>On a successful response, the Event Transmitter responds with a &quot;204 No Content&quot;
response.</t>

<t>The following is a non-normative example request where the subject is
identified by a Phone Number Subject Identifier:</t>

<figure title="Example: Remove Subject Request" anchor="figremovereq"><sourcecode type="http"><![CDATA[
POST /ssf/subjects:remove HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "subject": {
    "format": "phone",
    "phone_number": "+12065550123"
  }
}
]]></sourcecode></figure>

<t>The following is a non-normative example response to a successful request:</t>

<figure title="Example: Remove Subject Response" anchor="figremoveresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 204 No Content
Server: transmitter.example.com
Cache-Control: no-store
]]></sourcecode></figure>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Remove Subject Errors" anchor="tabremoveerr">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>400</c>
      <c>if the request body cannot be parsed or if the request is otherwise invalid</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>403</c>
      <c>if the Event Receiver is not allowed to remove this particular subject, or not allowed to remove in general</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver, or if the subject is not recognized by the Event Transmitter. The Event Transmitter may choose to stay silent in this second case and respond with &quot;204&quot;</c>
      <c>429</c>
      <c>if the Event Receiver is sending too many requests in a given amount of time</c>
</texttable>

</section>
</section>
<section anchor="verification"><name>Verification</name>
<t>In some cases, the frequency of event transmission on an Event Stream will be
very low, making it difficult for an Event Receiver to tell the difference
between expected behavior and event transmission failure due to a misconfigured
stream. Event Receivers can request that a Verification Event be transmitted
over the Event Stream, allowing the Receiver to confirm that the stream is
configured correctly upon successful receipt of the event. The acknowledgment of
a Verification Event also confirms to the Event Transmitter that end-to-end
delivery is working, including signature verification and encryption.</t>

<t>A Transmitter MAY send a Verification Event at any time, even if one was
not requested by the Event Receiver.</t>

<t>A Transmitter MAY respond to Verification Event requests even if the event is not present in the <spanx style="verb">events_supported</spanx>, <spanx style="verb">events_requested</spanx> and / or <spanx style="verb">events_delivered</spanx> fields in the Stream Configuration (<xref target="stream-config"/>).</t>

<section anchor="verification-event"><name>Verification Event</name>
<t>The Verification Event is an SSF event with the event type: &quot;https://schemas.openid.net/secevent/ssf/event-type/verification&quot;. The event contains the following attribute:</t>

<t>state</t>

<ul empty="true"><li>
  <t>OPTIONAL An opaque value provided by the Event Receiver when the event is
  triggered.</t>
</li></ul>

<t>As with any SSF event, the Verification Event has a top-level <spanx style="verb">sub_id</spanx> claim:</t>

<t>sub_id</t>

<ul empty="true"><li>
  <t>REQUIRED. The value of the top-level <spanx style="verb">sub_id</spanx> claim in a Verification Event MUST always be set to have a simple value of type <spanx style="verb">opaque</spanx>. The <spanx style="verb">id</spanx> of the value MUST be the <spanx style="verb">stream_id</spanx> of the stream being verified.</t>
</li></ul>

<ul empty="true"><li>
  <t>Note that the subject that identifies a stream itself is always implicitly
  added to the stream and MAY NOT be removed from the stream.</t>
</li></ul>

<t>Upon receiving a Verification Event, the Event Receiver SHALL parse the SET and
validate its claims. In particular, the Event Receiver SHALL confirm that the
value for &quot;state&quot; is as expected. If the value of &quot;state&quot; does not match, an
error response with the &quot;err&quot; field set to &quot;invalid_state&quot; SHOULD be returned (see Section 2.4 of
<xref target="RFC8935"/> or Section 2.4.4 of <xref target="RFC8936"/>).</t>

<t>In many cases, Event Transmitters MAY disable or suspend an Event Stream that
fails to successfully verify based on the acknowledgement or lack of
acknowledgement by the Event Receiver.</t>

</section>
<section anchor="triggering-a-verification-event"><name>Triggering a Verification Event.</name>
<t>To request that a Verification Event be sent over an Event Stream, the Event
Receiver makes an HTTP POST request to the Verification Endpoint, with a <xref target="RFC7159">JSON</xref> object containing the parameters of the verification request, if any.
On a successful request, the Event Transmitter responds with an empty
&quot;204 No Content&quot; response.</t>

<t>Verification requests have the following properties:</t>

<t>stream_id</t>

<ul empty="true"><li>
  <t>REQUIRED. A string identifying the stream that the Verification Event is being requested on.</t>
</li></ul>

<t>state</t>

<ul empty="true"><li>
  <t>OPTIONAL. An arbitrary string that the Event Transmitter MUST echo back to the
  Event Receiver in the Verification Event&#39;s payload. Event Receivers MAY use
  the value of this parameter to correlate a Verification Event with a
  verification request. If the Verification Event is initiated by the Transmitter
  then this parameter MUST not be set.</t>
</li></ul>

<t>A successful response from a POST to the Verification Endpoint does not indicate
that the Verification Event was transmitted successfully, only that the Event
Transmitter has transmitted the event or will do so at some point in the future.
Event Transmitters MAY transmit the event via an asynchronous process, and SHOULD
publish an SLA for Verification Event transmission times. Event Receivers MUST NOT
depend on the Verification Event being transmitted synchronously or in any
particular order relative to the current queue of events.</t>

<t>Errors are signaled with HTTP status codes as follows:</t>

<texttable title="Verification Errors" anchor="taberifyerr">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>400</c>
      <c>if the request body cannot be parsed or if the request is otherwise invalid</c>
      <c>401</c>
      <c>if authorization failed or it is missing</c>
      <c>404</c>
      <c>if there is no Event Stream with the given &quot;stream_id&quot; for this Event Receiver</c>
      <c>429</c>
      <c>if the Event Receiver is sending too many requests in a given amount of time; see related &quot;min_verification_interval&quot; in <xref target="stream-config"/></c>
</texttable>

<t>The following is a non-normative example request to trigger a Verification Event:</t>

<figure title="Example: Trigger Verification Request" anchor="figverifyreq"><sourcecode type="http"><![CDATA[
POST /ssf/verify HTTP/1.1
Host: transmitter.example.com
Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
Content-Type: application/json

{
  "stream_id": "f67e39a0a4d34d56b3aa1bc4cff0069f",
  "state": "VGhpcyBpcyBhbiBleGFtcGxlIHN0YXRlIHZhbHVlLgo="
}
]]></sourcecode></figure>

<t>The following is a non-normative example response to a successful request:</t>

<figure title="Example: Trigger Verification Response" anchor="figverifyresp"><sourcecode type="http"><![CDATA[
HTTP/1.1 204 No Content
Server: transmitter.example.com
Cache-Control: no-store
]]></sourcecode></figure>

<t>And the following is a non-normative example of a Verification Event sent to the
Event Receiver as a result of the above request:</t>

<figure title="Example: Verification SET" anchor="figverifyset"><sourcecode type="json"><![CDATA[
{
  "jti": "123456",
  "iss": "https://transmitter.example.com",
  "aud": "receiver.example.com",
  "iat": 1493856000,
  "sub_id": {
    "format": "opaque",
    "id": "f67e39a0a4d34d56b3aa1bc4cff0069f"
  },
  "events": {
    "https://schemas.openid.net/secevent/ssf/event-type/verification":{
      "state": "VGhpcyBpcyBhbiBleGFtcGxlIHN0YXRlIHZhbHVlLgo="
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="stream-updated-event"><name>Stream Updated Event</name>
<t>A Transmitter MAY change the stream status
without a request from a Receiver. The Transmitter sends an event of type
&quot;https://schemas.openid.net/secevent/ssf/event-type/stream-updated&quot; to indicate
that it has changed the status of the Event Stream.</t>

<t>If a Transmitter decides to change the status of an Event Stream from &quot;enabled&quot;
to either &quot;paused&quot; or &quot;disabled&quot;, then the Transmitter MUST send this event to
the Receiver before stopping the stream.</t>

<t>If the Transmitter changes the status of the stream from either
&quot;paused&quot; or &quot;disabled&quot; to &quot;enabled&quot;, then it MUST send this event to the
Receiver upon re-enabling the stream.</t>

<t>A Transmitter MAY send a Stream Updated event even if the event is not present in the <spanx style="verb">events_supported</spanx>, <spanx style="verb">events_requested</spanx> and / or <spanx style="verb">events_delivered</spanx> fields in the Stream Configuration (<xref target="stream-config"/>).</t>

<t>The &quot;stream-updated&quot; event contains the following claims:</t>

<t>status</t>

<ul empty="true"><li>
  <t>REQUIRED. Defines the new status of the stream.</t>
</li></ul>

<t>reason</t>

<ul empty="true"><li>
  <t>OPTIONAL. Provides a short description of why the Transmitter has updated the
  status.</t>
</li></ul>

<t>As with any SSF event, this event has a top-level <spanx style="verb">sub_id</spanx> claim:</t>

<t>sub_id</t>

<ul empty="true"><li>
  <t>REQUIRED. The top-level <spanx style="verb">sub_id</spanx> claim specifies the Stream Id for which the status has been updated. The value of the <spanx style="verb">sub_id</spanx> field MUST be of format <spanx style="verb">opaque</spanx>, and its <spanx style="verb">id</spanx> value MUST be the unique ID of the stream.</t>
</li></ul>

<ul empty="true"><li>
  <t>Note that the subject that identifies a stream itself is always implicitly
  added to the stream and MAY NOT be removed from the stream.</t>
</li></ul>

<ul empty="true"><li>
  <t>Below is a non-normative example of a Stream Updated event.</t>
</li></ul>

<figure title="Example: Stream Updated SET" anchor="figstreamupdatedset"><sourcecode type="json"><![CDATA[
{
  "jti": "123456",
  "iss": "https://transmitter.example.com",
  "aud": "receiver.example.com",
  "iat": 1493856000,
  "sub_id": {
    "format": "opaque",
    "id" : "f67e39a0a4d34d56b3aa1bc4cff0069f"
  },
  "events": {
    "https://schemas.openid.net/secevent/ssf/event-type/stream-updated": {
      "status": "paused",
      "reason": "Internal error"
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="management-sec"><name>Security Considerations</name>

<section anchor="management-sec-subject-probing"><name>Subject Probing</name>
<t>It may be possible for an Event Transmitter to leak information about subjects
through their responses to add subject requests. A &quot;404&quot; response may indicate
to the Event Receiver that the subject does not exist, which may inadvertently
reveal information about the subject (e.g. that a particular individual does or
does not use the Event Transmitter service).</t>

<t>Event Transmitters SHOULD carefully evaluate the conditions under which they
will return error responses to add subject requests. Event Transmitters MAY
return a &quot;204&quot; response even if they will not actually send any events related
to the subject, and Event Receivers MUST NOT assume that a 204 response means
that they will receive events related to the subject.</t>

</section>
<section anchor="management-sec-information-harvesting"><name>Information Harvesting</name>
<t>SETs may contain personally identifiable information (PII) or other non-public
information about the Event Transmitter, the subject (of an event in the SET),
or the relationship between the two. It is important for Event Transmitters to
understand what information they are revealing to Event Receivers when
transmitting events to them, lest the Event Stream become a vector for
unauthorized access to private information.</t>

<t>Event Transmitters SHOULD interpret add subject requests as statements of
interest in a subject by an Event Receiver, and ARE NOT obligated to transmit
events related to every subject an Event Receiver adds to the stream. Event
Transmitters MAY choose to transmit some, all, or no events related to any
given subject and SHOULD validate that they are permitted to share the
information contained within an event with the Event Receiver before
transmitting the event. The mechanisms by which such validation is performed
are outside the scope of this specification.</t>

</section>
<section anchor="management-sec-malicious-subject-removal"><name>Malicious Subject Removal</name>
<t>A malicious party may find it advantageous to remove a particular subject from a
stream, in order to reduce the Event Receiver&#39;s ability to detect malicious
activity related to the subject, inconvenience the subject, or for other reasons.
Consequently it may be in the best interests of the subject for the Event
Transmitter to continue to send events related to the subject for some time after
the subject has been removed from a stream.</t>

<t>Event Transmitters MAY continue sending events related to a subject for some
amount of time after that subject has been removed from the stream. Event
Receivers MUST tolerate receiving events for subjects that have been removed
from the stream, and MUST NOT report these events as errors to the Event
Transmitter.</t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<section anchor="sub-info-leakage"><name>Subject Information Leakage</name>
<t>Event Transmitters and Receivers SHOULD take precautions to ensure that they do not
leak information about subjects via Subject Identifiers, and choose appropriate
Subject Identifier Types accordingly. Parties SHOULD NOT identify a subject
using a given Subject Identifier Type if doing so will allow the recipient to
correlate different claims about the subject that they are not known to already
have knowledge of. Transmitters and Receivers SHOULD always use the same Subject
Identifier Type and the same claim values to identify a given subject when
communicating with a given party in order to reduce the possibility of
information leakage.</t>

</section>
<section anchor="previously-consented-data"><name>Previously Consented Data</name>
<t>If SSF events contain new values for attributes of Subject Principals that were
previously exchanged between the Transmitter and Receiver, then there are no
additional privacy considerations introduced by providing the updated values in
the SSF events, unless the attribute was exchanged under a one-time consent
obtained from the user.</t>

</section>
<section anchor="new-data"><name>New Data</name>
<t>Data that was not previously exchanged between the Transmitter and the Receiver,
or data whose consent to exchange has expired has the following considerations:</t>

<section anchor="organizational-data"><name>Organizational Data</name>
<t>If a user has previously agreed with a Transmitter that they allow the release of
certain data to third-parties, then the Transmitter MAY send such data in SSF
events without additional consent of the user. Such data MAY include
organizational data about the Subject Principal that was generated by the
Transmitter.</t>

</section>
<section anchor="consentable-data"><name>Consentable Data</name>
<t>If a Transmitter intends to include data in SSF events that is not previously
consented to be released by the user, then the Transmitter MUST obtain consent
to release such data from the user in accordance with the Transmitter&#39;s privacy
policy.</t>

</section>
</section>
</section>
<section anchor="profiles"><name>Profiles</name>
<t>This section is a profile of the following IETF Security Event specifications:</t>

<t><list style="symbols">
  <t>Security Event Token (SET) <xref target="RFC8417"/></t>
  <t>Push-Based SET Token Delivery Using HTTP <xref target="RFC8935"/></t>
  <t>Poll-Based SET Token Delivery Using HTTP <xref target="RFC8936"/></t>
</list></t>

<t>The RISC use cases that set the requirements are described in Security Events
RISC Use Cases <xref target="USECASES"/>.</t>

<t>The CAEP use cases that set the requirements are described in CAEP Use Cases (TODO: Add
        reference when file is added to repository.)</t>

<section anchor="set-profle"><name>Security Event Token Profile</name>
<t>This section provides SSF profiling specifications for the Security Event Token (SET)
<xref target="RFC8417"/> spec.</t>

<section anchor="signature-key-resolution"><name>Signature Key Resolution</name>
<t>The signature key can be obtained through &quot;jwks_uri&quot;, see <xref target="discovery"/>.</t>

</section>
<section anchor="event-subjects"><name>SSF Event Subject</name>
<t>The primary Subject Member of SSF events is described in the &quot;Subject Members&quot; section (<xref target="subject-ids"/>). The JWT &quot;sub&quot; claim MUST NOT be present in any SET containing
an SSF event.</t>

</section>
<section anchor="event-properties"><name>SSF Event Properties</name>
<t>The SSF event MAY contain additional claims within the event payload that are
specific to the event type.</t>

<figure title="Example: SET Containing a RISC Event with a Phone Number Subject" anchor="risc-event-subject-example"><sourcecode type="json"><![CDATA[
{
  "iss": "https://idp.example.com/",
  "jti": "756E69717565206964656E746966696572",
  "iat": 1520364019,
  "txn": 8675309,
  "aud": "636C69656E745F6964",
  "sub_id": {
    "format": "phone",
    "phone_number": "+1 206 555 0123"
  },
  "events": {
    "https://schemas.openid.net/secevent/risc/event-type/account-disabled": {
      "reason": "hijacking"
    }
  }
}
]]></sourcecode></figure>

<figure title="Example: SET Containing a CAEP Event with Properties" anchor="caep-event-properties-example"><sourcecode type="json"><![CDATA[
{
  "iss": "https://idp.example.com/",
  "jti": "756E69717565206964656E746966696572",
  "iat": 1520364019,
  "txn": 8675309,
  "aud": "636C69656E745F6964",
  "sub_id": {
    "format": "email",
    "email": "user@example.com"
  },
  "events": {
    "https://schemas.openid.net/secevent/caep/event-type/token-claims-changed": {
      "claims": {
        "token": "some-token-value"
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="explicit-typing"><name>Explicit Typing of SETs</name>
<t>SSF events MUST use explicit typing as defined in Section 2.3 of <xref target="RFC8417"/>.</t>

<figure title="Explicitly Typed JOSE Header" anchor="explicit-type-header"><sourcecode type="json"><![CDATA[
{
  "typ":"secevent+jwt",
  "alg":"HS256"
}
]]></sourcecode></figure>

<t>The purpose is defense against confusion with other JWTs, as described in
Sections 4.5, 4.6 and 4.7 of <xref target="RFC8417"/>. While current Id Token <xref target="OpenID.Core"/>
validators may not be using the &quot;typ&quot; header parameter, requiring it for SSF
SETs guarantees a distinct value for future validators.</t>

</section>
</section>
<section anchor="iss-claim"><name>The &quot;iss&quot; Claim</name>
<t>The &quot;iss&quot; claim MUST match the &quot;iss&quot; value in the Stream Configuration data for the stream
that the event is sent on. Receivers MUST validate that this claim matches the &quot;iss&quot;
in the Stream Configuration data, as well as the Issuer from which the Receiver requested
the Transmitter Configuration data.</t>

<section anchor="exp-claim"><name>The &quot;exp&quot; Claim</name>
<t>The &quot;exp&quot; claim MUST NOT be used in SSF SETs.</t>

<t>The purpose is defense in depth against confusion with other JWTs, as described
in Sections 4.5 and 4.6 of <xref target="RFC8417"/>.</t>

</section>
<section anchor="aud-claim"><name>The &quot;aud&quot; Claim</name>
<t>The &quot;aud&quot; claim can be a single string or an array of strings. Values that
uniquely identify the Receiver to the Transmitter MAY be used, if the two parties
have agreement on the format.</t>

<t>More than one value can be present if the corresponding Receivers are known to
the Transmitter to be the same entity, for example a web client and a mobile
client of the same application. All the Receivers in this case MUST use the
exact same delivery method.</t>

<t>If multiple Receivers have the exact same delivery configuration but the
Transmitter does not know if they belong to the same entity then the Transmitter
SHOULD issue distinct SETs for each Receiver and deliver them separately. In
this case the multiple Receivers might use the same service to process SETs, and
this service might reroute SETs to respective Receivers, an &quot;aud&quot; claim with
multiple Receivers would lead to unintended data disclosure.</t>

<figure title="Example: SET with array 'aud' claim" anchor="figarrayaud"><sourcecode type="json"><![CDATA[
{
  "jti": "123456",
  "iss": "https://transmitter.example.com",
  "aud": ["receiver.example.com/web", "receiver.example.com/mobile"],
  "iat": 1493856000,
  "txn": 8675309,
  "sub_id": {
    "format": "opaque",
    "id": "72e6991badb44e08a69672960053b342"
  },
  "events": {
    "https://schemas.openid.net/secevent/ssf/event-type/verification": {
      "state": "VGhpcyBpcyBhbiBleGFtcGxlIHN0YXRlIHZhbHVlLgo="
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="txn-claim"><name>The &quot;txn&quot; claim</name>
<t>Transmitters SHOULD set the &quot;txn&quot; claim value in Security Event Tokens (SETs). If the value is present, it MUST be unique to the underlying event that caused the Transmitter to generate the Security Event Token (SET). The Transmitter, however, may use the same value in the &quot;txn&quot; claim across different Security Events Tokens (SETs), such as session revoked and credential change, to indicate that the SETs originated from the same underlying cause or reason.</t>

</section>
<section anchor="events-claim"><name>The &quot;events&quot; claim</name>
<t>The &quot;events&quot; claim SHOULD contain only one event. Multiple event type URIs are
permitted only if they are alternative URIs defining the exact same event type.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="distinguishing-sets-from-other-kinds-of-jwts"><name>Distinguishing SETs from other Kinds of JWTs</name>
<t>Of particular concern is the possibility that SETs are confused for other kinds
of JWTs. The Security Considerations section of <xref target="RFC8417"/> has several sub-sections
on this subject. The Shared Signals Framework requires further restrictions:</t>

<t><list style="symbols">
  <t>The &quot;sub&quot; claim MUST NOT be present, as described in <xref target="event-subjects"/>.</t>
  <t>SSF SETs MUST use explicit typing, as described in <xref target="explicit-typing"/>.</t>
  <t>The &quot;exp&quot; claim MUST NOT be present, as described in <xref target="exp-claim"/>.</t>
</list></t>

</section>
</section>
</section>
<section anchor="set-token-delivery-using-http-profile"><name>SET Token Delivery Using HTTP Profile</name>
<t>This section provides SSF profiling specifications for the <xref target="RFC8935"/> and
<xref target="RFC8936"/> specs.</t>

<section anchor="delivery-meta"><name>Stream Configuration Metadata</name>
<t>Each delivery method is identified by a URI, specified below by the &quot;method&quot;
metadata.</t>

<section anchor="push-delivery-using-http"><name>Push Delivery using HTTP</name>
<t>This section provides SSF profiling specifications for the <xref target="RFC8935"/> spec.</t>

<t>method</t>

<ul empty="true"><li>
  <t>&quot;urn:ietf:rfc:8935&quot;</t>
</li></ul>

<t>endpoint_url</t>

<ul empty="true"><li>
  <t>The URL where events are pushed through HTTP POST. This is set by the
  Receiver. If a Receiver is using multiple streams from a single Transmitter
  and needs to keep the SETs separated, it is RECOMMENDED that the URL for each
  stream be unique.</t>
</li></ul>

<t>authorization_header</t>

<ul empty="true"><li>
  <t>The HTTP Authorization header that the Transmitter MUST set with each event
  delivery, if the configuration is present. The value is optional and it is set
  by the Receiver.</t>
</li></ul>

</section>
<section anchor="polling-delivery-using-http"><name>Polling Delivery using HTTP</name>
<t>This section provides SSF profiling specifications for the <xref target="RFC8936"/> spec.</t>

<t>method</t>

<ul empty="true"><li>
  <t>&quot;urn:ietf:rfc:8936&quot;</t>
</li></ul>

<t>endpoint_url</t>

<ul empty="true"><li>
  <t>The URL where events can be retrieved from. This is specified by the
  Transmitter. These URLs MAY be reused across Receivers, but MUST be unique per
  stream for a given Receiver.</t>
</li></ul>

</section>
</section>
</section>
</section>
<section anchor="iana"><name>IANA Considerations</name>
<t>Subject Identifiers defined in this document will be added to the &quot;Security
Events Subject Identifier Types&quot; registry. This registry is defined in the
Subject Identifiers for Security Event Tokens <xref target="RFC9493"/> specification.</t>

<t>The <spanx style="verb">ssf-configuration</spanx> well-known endpoint is registered in IANA&#39;s Well-Known URIs
registry, as defined by <xref target="RFC8615"/>.</t>

<t>IANA is asked to assign the error code &quot;invalid_state&quot;, as defined in <xref target="verification-event"/>, to the
Security Event Token Error Codes section of the Security Event Token registry, as defined
in Section 7.1 of <xref target="RFC8935"/>. The following information is provided as required by the
registration template:</t>

<t>Error Code</t>

<ul empty="true"><li>
  <t>invalid_state</t>
</li></ul>

<t>Description</t>

<ul empty="true"><li>
  <t>Indicates that a Verification event contained a &quot;state&quot; claim that does not
  match the value expected by the Receiver.</t>
</li></ul>

<t>Change Controller</t>

<ul empty="true"><li>
  <t>OpenID - Shared Signals Working Group</t>
</li></ul>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

<reference anchor="CLIENTCRED" target="https://tools.ietf.org/html/rfc6749#section-4.4">
  <front>
    <title>The OAuth 2.0 Authorization Framework - Client Credentials Grant</title>
    <author initials="D." surname="Hardt" fullname="D. Hardt">
      <organization></organization>
    </author>
    <date year="2012" month="October"/>
  </front>
  <seriesInfo name="DOI" value="10.17487/RFC6749"/>
  <seriesInfo name="RFC" value="6749"/>
</reference>
<reference anchor="OpenID.Core" target="https://openid.net/specs/openid-connect-core-1_0.html#IDToken">
  <front>
    <title>OpenID Connect Core 1.0 - ID Token</title>
    <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
      <organization></organization>
    </author>
    <author initials="J." surname="Bradley" fullname="John Bradley">
      <organization></organization>
    </author>
    <author initials="M. B." surname="Jones" fullname="Michael B. Jones">
      <organization></organization>
    </author>
    <author initials="B." surname="de Medeiros" fullname="Breno de Medeiros">
      <organization></organization>
    </author>
    <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
      <organization></organization>
    </author>
    <date year="2014" month="November"/>
  </front>
</reference>
&OASIS.saml-core-2.0-os;
&RFC2119;
&RFC6749;
&RFC6750;
&RFC7159;
&RFC7517;
&RFC7519;
&RFC8174;
&RFC8414;
&RFC8417;
&RFC8615;
&RFC8935;
&RFC8936;
&RFC9110;
&RFC9493;
<reference anchor="CAEP" target="https://openid.net/specs/openid-caep-specification-1_0.html">
  <front>
    <title>OpenID Continuous Access Evaluation Profile 1.0 - draft 02</title>
    <author initials="T." surname="Cappalli" fullname="Tim Cappalli">
      <organization></organization>
    </author>
    <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale">
      <organization></organization>
    </author>
    <date year="2021" month="August"/>
  </front>
</reference>
<reference anchor="RISC" target="https://openid.net/specs/openid-risc-profile-specification-1_0.html">
  <front>
    <title>OpenID RISC Profile Specification 1.0 - draft 02</title>
    <author initials="M." surname="Scurtescu" fullname="Marius Scurtescu">
      <organization></organization>
    </author>
    <author initials="A." surname="Backman" fullname="Annabelle Backman">
      <organization></organization>
    </author>
    <author initials="P." surname="Hunt" fullname="Phil Hunt">
      <organization></organization>
    </author>
    <author initials="J." surname="Bradley" fullname="John Bradley">
      <organization></organization>
    </author>
    <author initials="S." surname="Bounev" fullname="Stan Bounev">
      <organization></organization>
    </author>
    <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale">
      <organization></organization>
    </author>
    <date year="2022" month="April"/>
  </front>
</reference>
<reference anchor="NAMINGCONVENTION" target="https://openid.net/wg/resources/naming-and-contents-of-specifications/">
  <front>
    <title>OpenID Naming and Content of Specifications</title>
    <author initials="O." surname="Foundation" fullname="OpenID Foundation">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="USECASES" target="https://tools.ietf.org/html/draft-scurtescu-secevent-risc-use-cases-00">
  <front>
    <title>Security Events RISC Use Cases</title>
    <author initials="M." surname="Scurtescu" fullname="Marius Scurtescu">
      <organization></organization>
    </author>
    <date year="2017" month="June"/>
  </front>
</reference>


    </references>


<?line 2260?>

<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors wish to thank all members of the OpenID Foundation SSF
Working Group who contributed to the development of this
specification.</t>

</section>
<section anchor="notices"><name>Notices</name>

<t>Copyright (c) 2024 The OpenID Foundation.</t>

<t>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.</t>

<t>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.</t>

</section>
<section anchor="document-history"><name>Document History</name>

<t>[[ To be removed from the final specification ]]</t>

<t>-03</t>

<figure><artwork><![CDATA[
* Removing transmitter supplied fields from stream config PUT and PATCH examples
* Add OPTIONAL/REQUIRED to the fields in the stream configuration
* Add stream_id to the response when getting stream status
* Update subject/sub_id in examples. Fix CAEP example
* Clarify language around sending Stream Updated events
* Add sentence suggesting that Issuer information should be validated by the Receiver
* Removed cause-time from RISC example
* Fix description of error code for invalid state
* Add SHOULD language about checking the issuer value
* Added language requiring authorization of stream management API
* Added description of `txn` claim
* Added a `default_subjects` field to Transmitter Configuration Metadata indicating expected subject behavior for new streams
* added txn claims to non-normative SET examples and generic txn callout under SET Profile section RFC8417
* Editorial: Standardize terms and casing, fix some typos
]]></artwork></figure>

<t>-02</t>

<figure><artwork><![CDATA[
* added spec version to metadata
* Added description as receiver supplied
* added language to make verification and updated events independent of events_supported
* added top-level sub_id claim. Modified existing language to reflect the use of the sub_id claim
* updated text to reflect sub_id as a top-level field in verification and stream updated events
* #46 add stream exists behavior
* update stream exists to 409
* Add 'format' to normative examples in CAEP
* Remove 'format' from stream config
* Remove subject from stream status (#88)
* Add reason to GET /status response
* Make reason look like an enum in the example to indicate how we expect it to be used
* Fixes #60 - are subjects required
* Added format field to complex subjects and updated examples (#71)
* Switch stray '204 OK' to read '204 No Content' (#73)
* Change 'jwt-id' to 'jwt_id' to match style of other subject formats (#63)
* resolving issue #45 added explanatory text to Stream Configuration (#68)
* #28 update delivery method references to URNs (#49)
* Changed jwks_uri from REQUIRED to OPTIONAL (#47)
* Sse to ssf (#43)
* updated SSE to Shared Signals in all files
* changed source format to md
* renamed files to be called sharedsignals instead of SSE. No change to the content (#41)
* Add stream_id to SSE Framework spec as per Issue 4: https://github.com/openid/sse/issues/4
* Update README with development instructions and fix error in Makefile
* Added note to PUSH/POLL section about uniqueness requirements for the URLs
* Add explanation about what an Event Stream is
* Change terms to Transmitter-Supplied and Receiver-Supplied
* Pragma is an obsolete HTTP header
* It's unnecessary to specify the character as UTF-8 in all examples (#10)
* Fix issue #18 by converting saml-assertion-id to saml_assertion_id to maintain consistent formatting with other subject identifiers (#1)
* updated backward compatibility language
* added section for Transmitter Configuration Metadata RISC compatibility
]]></artwork></figure>

</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="S." surname="Venema" fullname="Steve Venema">
      <organization>ForgeRock</organization>
      <address>
        <email>steve.venema@forgerock.com</email>
      </address>
    </contact>
<t>Steve defined the format field of Complex Subjects</t>

    <contact initials="A." surname="Deshpande" fullname="Apoorva Deshpande">
      <organization>Okta</organization>
      <address>
        <email>apoorva.deshpande@okta.com</email>
      </address>
    </contact>
    <contact initials="S." surname="O'Dell" fullname="Sean O'Dell">
      <organization>The Walt Disney Company</organization>
      <address>
        <email>sean.odentity@disney.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+19aVMbWbbg9/wVGeKD7WpJbAIMPd1TFOAqqm3DM7hqejoq
cEqZgiynMvUyU2A1zYv3NyZi5s+9XzJnu1suQuClq/q5IrotpLuee+7Zz7m9
Xs8r4zKJ9vyTaZQeH/pnV0Eehf5ZfJkGSeG/yINJdJPl7/2zaTSKx/EoKOMs
9df7a37PD/NgXPprm14wHObR9Z70ls5emI1S6L7nZzB2HPYK+rXgX3tjNXRv
/WLNC4MSGm6sbQx6a9u9jS3Pi6f5np9maeTBnHt+UYbezeVeZYGeN8rCOIXv
Z0UvKEZx7E3jPc/3y2y058+jAj4WWV7m0bjQf88n9p/TPL6myfFPL5iVV1mO
I+B/PfnX9+MUOuz3/fNZUlzFw+DyJkgi/Stvc7+cJS0NshyX/v3rl/qbaBLE
yZ4fQJ9vi8s06Qex1zzred8/CKbTIEniyoTn8aT+E031Kh7lWZGNy+p8ZTzp
j6TLtxPVqj/KJi2zv+r7Z6NZXkbFaFaZ/lWQx7Oi4WdawkEWp8OgiKormFCv
fqF6fTuShgsWAYD/Lhi9nwRpFeRpGgyjJIlqv9Ma9ifB37O0uoI8Hl0F0PHb
gH5eMO+PMG8ehEk0r8z7Y3aV1n6iKf86G8ajrDplEY2i62hSfnsd7fxaDhdM
edaHw4uSynyA9fM0cn9hKMdFw2wTaPftCH/imUZZWubxcFa2ojZM+1OUQv/q
xCWsu/oTzfwC/j96k43e12bHLv1r6vLtGFvl0IoWolrq9QAt2fP/ob/3Zb4w
Gscp3PLyKvJhhElQ+mPYUuhnY8CryTSJPvhns+Gv0ags2lHmMCqupkEa1u7p
NMvy66Dhd9rYyfsyqO4p4C79UHX5NoNWi4/x5MkhYGYVnlGQVn+hWc9hqz8H
SekfxkUazWmbQTqvI1KQ9rMwSoFsz78NqS0vIyU4xdcRnvDBy+Oj1+cHb44O
+bxtstbjFR72/R+CPFQUgpfnfMk0+WRUZsMoB9q8vkFfF1EeR0WcjjOFS4cn
x3v++lp/fWfwfGf1zYuD7Z3BrvwGf+35T/CLJ/RNGQBCAD2/Kstpsbe6WmZZ
UvTjqBz3AQ6rV+UkWc3HI+ywArcGMaQ36A+4L7MqBNXJPuzI3wA2tE9bi//O
jMkwrJ5/kMQAJ/8A+AXCC/nZ93mQlnhkzO76B1ketULoNZC+4H08meWBA6TX
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
nDCLwg4FB2v5I+Y47AhzJwN6z/8uCnKASTT/cW24USbD+Hj7ePLT4K8/r98M
v38bj/8t+5MExWplQ5edE7WmFj9oxaPaQLHL9ani204MpZS1q5S5s7RSJ/5V
eu6pCnd73HwPVcyLDTsgdmHLzaVb0mM8KhRSi2T0VI/l9tPUaN93Khfwsrr8
76b8O6jETgofptFg2/W3fRgtHEedRPp3avWSF2IaI/Zec6S05rxLhksrOznV
vtzeiTZ3g7VgEG4Owq3t4WYQrA9Hg9F4vLa2vTvWQdQ2OjRFT3N1RRXxuhhz
biJTYnZxy0k2jJOo44S1/pPwuiWueyEOri+NrQ+5ARqvf7s3rmqh+0wr+8I3
vJi2XXF9uU1A9BFmWIiVnpKuohYpidwrTAfQ8uP9AyQmYHX/8A/NpjBShgNb
/uFE02AAzWBtDSNlYpeFG0fCNMjR/ctN16WpG2oncc1YrIZ8cpOYn13gPpvW
8M3qsNIDLVaoZC0eYtcaolEMldtVF0TRUKqn+weeixyBC3mGdsdfobIB9rHd
Ke3uDQjktnJHOkbVo5pzI63tFW5SmOVj1Yu6jKRgYWOIAifBVPU0FfFKiWif
QE0jQUw9M7ZYT8O8mhYVza+oaN7HqGi/TR0NF2XDHIV8+4ljizuyN5q9ptry
TP4fUf49x7AieQVVH/e4Nqw1lr5p9Gp93X8nqpakwSVS46/NjlEYPxcnWLue
M+dlCgE1emfoDYtK/IMaVwpb1QVytaiUnTK0tkcKzxKaUwtdcEsV1rI3jSz9
PzVw/3SfOPMZxW7hGlUGgVSnOXxDSYLEaBAIvF+AzCeUDZfJojsI4Ib1sFGe
JXswD9C+LI++iotfxcWv4uLS4uJDLr5IibWbX0wfdvUfSEO7OhbI5keqJF64
gMT+PugmVnLDDvpRvwdRULbSK6A2QOpzkFhEcyFMDye0S5HaGrF9CLl9CMGV
y9VEdJciu48nvDpjtp34PoT8PoTsLE14DHRayfCnn3f5toPGNdYJ8ueCjWKf
TXdhC4hHuLm7uznY2B48393ZXdsYrW09Xx8GO6ON9WDz6134ehf+le6CxpxP
JqRgZYBfPq2gYnjtJEjnYiz5ZGzXswWUG1GNc4rsoUBGDFhyzOpGYf3Kpb9S
pq+U6fNx6c9HSOBSa5Ptp5fePYuM3GPz+iwk5LOBTX0qvqzT4bN7EkinbbN1
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

-->

</rfc>

