<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-secevent-http-push-01" ipr="trust200902">
    <front>
        <title abbrev="draft-ietf-secevent-http-push">Push-Based SET Token Delivery Using HTTP</title>

    <author fullname="Annabelle Backman" initials="A." surname="Backman" role="editor">
        <organization abbrev="Amazon">Amazon</organization>
        <address>
            <email>richanna@amazon.com</email>
        </address>
    </author>

    <author fullname="Michael B. Jones" initials="M." surname="Jones" role="editor">
        <organization abbrev="Microsoft">Microsoft</organization>
        <address>
            <email>mbj@microsoft.com</email>
            <uri>http://self-issued.info/</uri>
        </address>
    </author>

    <author fullname="Marius Scurtescu" initials="M.S." surname="Scurtescu">
      <organization abbrev="Google">Google</organization>

      <address>
        <email>mscurtescu@google.com</email>
      </address>
    </author>

    <author fullname="Morteza Ansari" initials="M." surname="Ansari">
      <organization abbrev="Cisco">Cisco</organization>

      <address>
        <email>morteza.ansari@cisco.com</email>
      </address>
    </author>
    
    <author fullname="Anthony Nadalin" initials="A." surname="Nadalin">
      <organization abbrev="Microsoft">Microsoft</organization>

      <address>
        <email>tonynad@microsoft.com</email>
      </address>
    </author>
    
		<date year="2018" />

                <area>Security</area>
                <workgroup>Security Events Working Group</workgroup>
		<keyword>Internet-Draft</keyword>

		<abstract>
			<t>
				This specification defines how a series of security event tokens 
        (SETs) may be delivered to a previously registered receiver 
        using HTTP POST over TLS initiated as a push to the receiver.
        </t>
		</abstract>
	</front>

	<middle>
		<section anchor="intro" title="Introduction and Overview" toc="default">
			
      <t>
        This specification defines how SETs (see <xref target="RFC8417"/>)
        can be transmitted to a previously registered 
        SET Receiver using HTTP <xref target="RFC7231"/>
        over TLS. The specification defines a method to push SETs via 
        HTTP POST. 
      			</t>


			<section anchor="notat" title="Notational Conventions" toc="default">
				<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
                                  NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
                                  "MAY", and "OPTIONAL" in this document are to be interpreted as
                                  described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
				  when, and only when, they appear in all capitals, as shown here.
			        </t>

				<t>Throughout this documents all figures may contain spaces and
					extra
					line-wrapping for readability and space limitations.
				</t>
			</section>

			<section anchor="defs" title="Definitions" toc="default">
        <t>This specification assumes terminology defined in the Security
        Event Token specification<xref target="RFC8417"/>, as well as the terms defined below:
        </t>
				<t>
					<list style="hanging">
          
            <t hangText="SET Transmitter"><vspace/>
              A service provider that delivers SETs to other providers known
              as SET Receivers.
            </t>
            
            <t hangText="SET Receiver"><vspace/>
              A service provider that registers to receive SETs from 
              a SET Transmitter and provides an endpoint to receive
              SETs via HTTP POST.
            </t>

					</list>
				</t>
			</section>
		</section>
   
  <section title="Event Delivery">
    <section anchor="process" title="Event Delivery Process">
      <t>In Push-Based SET Delivery Using HTTP, SETs are delivered
        one at a time using HTTP POST requests by a SET Transmitter 
        to a SET Receiver, as described below in <xref target="httpPost"/>.
        Upon receipt, the
        SET Receiver acknowledges receipt or indicates an error via the HTTP
        response, as described below in <xref target="requestHandling"/>.
      </t>

			<t>After successful (acknowledged) SET delivery, SET
      Transmitters SHOULD NOT be required to maintain or record SETs for 
      recovery. Once a SET is acknowledged, the SET Receiver SHALL be 
      responsible for retention and recovery.</t>
      
      <t>Transmitted SETs SHOULD be self-validating (e.g. signed)
      if there is a requirement to verify they were issued by the SET
      Transmitter at a later date when de-coupled from the original 
      delivery where authenticity could be checked via the HTTP or 
      TLS mutual authentication.
			</t>

			<t>
			Upon receiving a SET, the SET Receiver reads the SET and validates 
      it. The SET Receiver MUST acknowledge receipt to the SET Transmitter, using the 
      defined acknowledgement or error method.</t>
      
      <t>The SET Receiver SHALL NOT use the Event acknowledgement mechanism
      to report Event errors other than relating to the parsing and validation
      of the SET.</t>
  </section>
  
    
  
  <section anchor="httpPost" title="Transmitting a SET">
        
     <t>This method allows a SET Transmitter to use HTTP POST 
     (<xref target="RFC7231">Section 4.3.3</xref>) to deliver
     SETs to a previously registered web callback URI supplied by the
     SET Receiver as part of a configuration process 
     (not defined by this document).</t>
          
     <t>The SET to be delivered MAY be signed 
     and/or encrypted as defined in <xref target="RFC8417" />.</t>
           
     <t>The HTTP Content-Type (see 
     <xref target="RFC7231">Section 3.1.1.5</xref>) for the HTTP POST is 
     <spanx style="verb">application/secevent+jwt</spanx> and the request body SHALL consist of 
     a single SET (see <xref target="RFC8417" />).
     As per <xref target="RFC7231">Section 5.3.2</xref>, the
     value of the <spanx style="verb">Accept</spanx> header is
     <spanx style="verb">application/json</spanx>.</t>
     
     <figure align="left" anchor="postSet" title="Example SET Transmission Request">
         <preamble>
            The following is a non-normative example of a SET transmission HTTP POST request:
         </preamble>
<artwork align="left">POST /Events  HTTP/1.1

Host: notify.examplerp.com
Accept: application/json
Content-Type: application/secevent+jwt

eyJhbGciOiJub25lIn0
.
eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV
kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj
FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ
WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6
WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ
hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG
VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX
SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk
b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF
tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW
1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ
.</artwork>
     </figure>
 </section>

 <section anchor="requestHandling" title="Handling a SET Transmission Request">
     <t>Upon receipt of the request, the SET Receiver SHALL 
     validate the JWT structure of the SET as defined in 
     <xref target="RFC7519">Section 7.2</xref>. The SET Receiver 
     SHALL also validate the SET information as described
     in <xref target="RFC8417">Section 2</xref>.</t>

    <section anchor="successResponse" title="Success Response">
     <t>If the SET is determined to be valid, the SET Receiver SHALL
     "acknowledge" successful submission by responding with HTTP Status
     202 as <spanx style="verb">Accepted</spanx> 
     (see <xref target="RFC7231">Section 6.3.3</xref>).</t>
     
     <t>In order
     to maintain compatibility with other methods of transmission, the 
     SET Receiver SHOULD NOT include an HTTP response body representation
     of the submitted SET or what the SET's pending status is when 
     acknowledging success. In the case of an error (e.g. HTTP Status 400),
     the purpose of the HTTP response body is to indicate any SET parsing, 
     validation, or cryptographic errors.</t>
     
     <figure anchor="goodPostResponse" title="Example Successful Delivery Response">
        <preamble>The following is a non-normative example of a successful
        receipt of a SET.</preamble>
        <artwork>HTTP/1.1 202 Accepted</artwork>
     </figure> 
     
     <t>Note that the purpose of the "acknowledgement" response is to let the 
       SET Transmitter know that a SET has been delivered and the 
       information no longer needs to be retained by the SET Transmitter. 
       Before acknowledgement, SET Receivers SHOULD ensure they have 
       validated received SETs and retained them in a manner appropriate 
       to information retention requirements appropriate to the SET 
       event types signaled. The level and method of retention of SETs
       by SET Receivers is out-of-scope of this specification.</t>
    </section>
    <section anchor="failureResponse" title="Failure Response">
     <t>In the Event of a general HTTP error condition, the SET Receiver
     MAY respond with an appropriate HTTP Status code as defined in 
     <xref target="RFC7231">Section 6</xref>.</t>
     <t>When the SET Receiver detects an error parsing or 
     validating a received SET (as defined by <xref target="RFC8417"/>), 
     the SET Receiver SHALL indicate an HTTP Status 400 error with an 
     error response as described in <xref target="errorResponse"/>.
     </t>
     
     <figure anchor="badPostResponse" title="Example Error Response">
        <preamble>The following is an example non-normative error 
        response.</preamble>
        <artwork>HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  "err":"dup",
  "description":"SET already received. Ignored."

}</artwork>
     </figure>    
    </section>

     <section anchor="error_codes" title="Security Event Token Delivery Error Codes">
         <t>Security Event Token Delivery Error Codes are strings that identify a
            specific type of error that may occur when parsing or validating a SET.
            Every Security Event Token Delivery Error Code MUST have a unique name
            registered in the IANA "Security Event Token Delivery Error Codes"
            registry established by <xref target="iana_set_errors"/>.</t>

        <t>The following table presents the initial set of Error Codes that are registered
           in the IANA "Security Event Token Delivery Error Codes" registry:</t>
        <texttable anchor="reqErrors" title="SET Delivery Error Codes">
          <ttcol>Error Code</ttcol><ttcol>Description</ttcol>
          <c>json</c><c>Invalid JSON object.</c>
          <c>jwtParse</c><c>Invalid or unparsable JWT or JSON structure.</c>
          <c>jwtHdr</c><c>In invalid JWT header was detected.</c>
          <c>jwtCrypto</c><c>Unable to parse due to unsupported algorithm.</c>
          <c>jws</c><c>Signature was not validated.</c>
          <c>jwe</c><c>Unable to decrypt JWE encoded data.</c>
          <c>jwtAud</c><c>Invalid audience value.</c>
          <c>jwtIss</c><c>Issuer not recognized.</c>
          <c>setType</c><c>An unexpected Event type was received.</c>
          <c>setParse</c><c>Invalid structure was encountered such as an 
          inability to parse or an incomplete set of Event claims.</c>
          <c>setData</c><c>SET event claims incomplete or invalid.</c>
          <c>dup</c><c>A duplicate SET was received and has been ignored.</c>
        </texttable>
    </section>

        <section anchor="errorResponse" title="Error Responses">
            <t>An error response SHALL include a JSON
            object which provides details about the error. The JSON object
            includes the JSON attributes: <list style="hanging">
              <t hangText="err"><vspace />A value which is a keyword that 
              describes the error (see <xref target="reqErrors" />).</t>
              <t hangText="description"><vspace />A human-readable text that provides
              additional diagnostic information.</t>
            </list>
            When included as part of an HTTP Status 400 response, the above
            JSON is the HTTP response body (see <xref target="badPostResponse"/>).</t>
        </section>
   </section>
</section>
   
   <section anchor="aa" title="Authentication and Authorization" toc="default">
      <t>The SET delivery method described in this specification is
      based upon HTTP and depends on the use of TLS and/or standard 
      HTTP authentication and authorization schemes as per 
      <xref target="RFC7235" />.
      </t>

      <t>Because SET Delivery describes a simple function, authorization
      for the ability to pick-up or deliver SETs can be derived by
      considering the identity of the SET issuer, or via other employed
      authentication methods.  Because SETs are
      not commands (see ), SET Receivers are free to ignore SETs that 
      are not of interest.</t>
  </section>
  <section anchor="Security" title="Security Considerations" toc="default">
      
      <section anchor="payloadAuthentication" title="Authentication Using Signed SETs">
      <t>In scenarios where HTTP authorization or TLS mutual authentication
      are not used or are considered weak, JWS signed SETs SHOULD be 
      used (see <xref target="RFC7515"/> and <xref target="RFC8417">
      Security Considerations</xref>). This enables the SET Receiver
      to validate that the SET issuer is authorized to deliver SETs.
      </t>
      </section>

      <section title="TLS Support Considerations">
        <t>SETs contain sensitive information that is considered PII
        (e.g. subject claims). Therefore, SET Transmitters and
        SET Receivers MUST require the use of a transport-layer 
        security mechanism. Event delivery endpoints MUST support TLS 
        1.2 <xref target="RFC5246"/> and MAY support additional 
        transport-layer mechanisms meeting its security requirements. 
        When using TLS, the client MUST perform a TLS/SSL server
        certificate check, per <xref target="RFC6125"/>. Implementation
        security considerations for TLS can be found in "Recommendations for
        Secure Use of TLS and DTLS" <xref target="RFC7525"/>.</t>
      </section>

      <section title="Denial of Service">
        <t>
            The SET Receiver may be vulnerable to a denial-of-service attack where a
            malicious party makes a high volume of requests containing invalid SETs,
            causing the endpoint to expend significant resources on cryptographic
            operations that are bound to fail. This may be mitigated by authenticating
            SET Transmitters with a mechanism with low runtime overhead, such as mutual
            TLS or statically assigned bearer tokens.
        </t>
      </section>
   </section>
   
   <section title="Privacy Considerations">
   
      <t>If a SET needs to be retained for audit purposes, JWS MAY 
      be used to provide verification of its authenticity.</t>
      
      <t>When sharing personally identifiable information or information
      that is otherwise considered confidential to affected users, SET
      Transmitters and Receivers MUST have the appropriate legal agreements
      and user consent or terms of service in place.</t>
      
      <t>The propagation of subject identifiers can be perceived as personally
      identifiable information. Where possible, SET Transmitters and Receivers
      SHOULD devise approaches that prevent propagation -- for example, the
      passing of a hash value that requires the subscriber to already know
      the subject.</t>

   </section>

    <section anchor="IANA" title="IANA Considerations">
      
        <section anchor="iana_set_errors" title="Security Event Token Delivery Error Codes">
            <t>
                This document defines Security Event Token Delivery Error Codes, for which IANA
                is asked to create and maintain a new registry titled "Security Event Token
                Delivery Error Codes".  Initial values for the Security Event Token Delivery
                Error Codes registry are given in <xref target="reqErrors"/>.  Future assignments
                are to be made through the Expert Review registration policy (<xref target="RFC8126"/>)
                and shall follow the template presented in <xref target="iana_set_errors_template"/>.
            </t>

            <section anchor="iana_set_errors_template" title="Registration Template">
                <t>
                    <list style="hanging">
                        <t hangText="Error Code">
                            <vspace/>
                            The name of the Security Event Token Delivery Error Code, as described
                            in <xref target="error_codes"/>. The name MUST be a case-sensitive ASCII
                            string consisting only of upper-case letters ("A" - "Z"), lower-case
                            letters ("a" - "z"), and digits ("0" - "9").
                        </t>
                        <t hangText="Description">
                            <vspace/>
                            A brief human-readable description of the Security Event Token Delivery
                            Error Code.
                        </t>
                        <t hangText="Change Controller">
                            <vspace/>
                            For error codes registered by the IETF or its working groups, list "IETF
                            Secevent Working Group".  For all other error codes, list the name of the
                            party responsible for the registration.  Contact information such as
                            mailing address, email address, or phone number may also be provided.
                        </t>
                        <t hangText="Defining Document(s)">
                            <vspace/>
                            A reference to the document or documents that define the Security Event
                            Token Delivery Error Code. The definition MUST specify the name and
                            description of the error code, and explain under what circumstances the
                            error code may be used. URIs that can be used to retrieve copies of each
                            document at no cost SHOULD be included.
                        </t>
                    </list>
                </t>
            </section>
            <section title="Initial Registry Contents">
                <t>
                    <!-- [richanna] This needs better formatting. -->
                    <list style="symbols">
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>json</t>
                                <t hangText="Description"><vspace/>Invalid JSON object.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jwtParse</t>
                                <t hangText="Description"><vspace/>Invalid or unparsable JWT or JSON structure.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jwtHdr</t>
                                <t hangText="Description"><vspace/>An invalid JWT header was detected.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jwtCrypto</t>
                                <t hangText="Description"><vspace/>Unable to parse due to unsupported algorithm.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jws</t>
                                <t hangText="Description"><vspace/>Signature was not validated.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jwe</t>
                                <t hangText="Description"><vspace/>Unable to decrypt JWE encoded data.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jwtAud</t>
                                <t hangText="Description"><vspace/>Invalid audience value.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>jwtIss</t>
                                <t hangText="Description"><vspace/>Issuer not recognized.</t>
                                <t hangText="Change Controller"><vspace/></t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>setType</t>
                                <t hangText="Description"><vspace/>An unexpected Event type was received.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>setParse</t>
                                <t hangText="Description">
                                    <vspace/>
                                    Invalid structure was encountered such as an inability to parse or an
                                    incomplete set of Event claims.
                                </t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>setData</t>
                                <t hangText="Description"><vspace/>SET event claims incomplete or invalid.</t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                        <t>
                            <list style="hanging">
                                <t hangText="Error Code"><vspace/>dup</t>
                                <t hangText="Description">
                                    <vspace/> A duplicate SET was received and has been ignored.
                                </t>
                                <t hangText="Change Controller"><vspace/>IETF Secevent Working Group</t>
                                <t hangText="Defining Document(s)">
                                    <vspace/>
                                    <xref target="error_codes"/> of this document.
                                </t>
                            </list>
                        </t>
                    </list>
                </t>
            </section>
        </section>
  
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml' ?>
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml' ?>
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml' ?><!-- TLS 1.2 -->

      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.5988.xml' ?>

      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.6125.xml' ?><!-- TLS Certs -->
      
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7159.xml' ?><!-- JSON -->
      
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7231.xml' ?><!-- HTTP Semantics -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7519.xml' ?><!-- JWT -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7517.xml' ?><!-- JWK -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7525.xml' ?><!-- TLS Recos -->

      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml' ?>
   
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.8417.xml'?>
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.8126.xml' ?>

    </references>

    <references title="Informative References">
      <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml' ?>
    
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.6749.xml' ?><!-- OAuth -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.6750.xml' ?><!-- OAuth Bearer-->
      
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7515.xml' ?><!-- JWS -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7516.xml' ?><!-- JWE -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7521.xml' ?><!-- Client Auth Assertions -->
      
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7230.xml' ?><!-- HTTP Msg -->
      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7235.xml' ?><!-- HTTP Auth -->

      <?rfc include='http://xml.resource.org/public/rfc/bibxml/reference.RFC.7617.xml' ?><!-- Basic Auth Update -->
      
      <reference anchor="openid-connect-core">
        <front>
          <title>OpenID Connect Core 1.0</title>
          <author fullname="Nat Sakimura et al"><organization>NRI</organization></author>
          <date day="8" month="Nov" year="2014"/>
        </front>
        <format type="HTML" target="http://openid.net/specs/openid-connect-core-1_0.html"/>
      </reference>
      <reference anchor="saml-core-2.0">
        <front>
          <title>Assertions and Protocols for the OASIS Security Assertion Markup Language (SAML) V2.0</title>
          <author fullname="Scott Cantor et al"><organization>Internet2</organization></author>
          <date day="15" month="March" year="2005"/>
        </front>
        <format type="PDF" target="http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf"/>
      </reference>

    </references>

    <section title="Other Streaming Specifications">
    <t>[[EDITORS NOTE: This section to be removed prior to publication]]</t>
    
    <t>The following pub/sub, queuing, streaming systems were reviewed 
    as possible solutions or as input to the current draft:</t>
    
    <t>XMPP Events</t>
    <t>The WG considered the XMPP events ands its ability to provide a single
    messaging solution without the need for both polling and push modes.
    The feeling was the size and methodology of XMPP was to far apart from
    the current capabilities of the SECEVENTs community which focuses in
    on HTTP based service delivery and authorization.</t>
    
    <t>Amazon Simple Notification Service</t>
    <t>Simple Notification Service, is a pub/sub messaging product from 
    AWS. SNS supports a variety of subscriber types: HTTP/HTTPS endpoints, 
    AWS Lambda functions, email addresses (as JSON or plain text), phone 
    numbers (via SMS), and AWS SQS standard queues. It doesn’t directly 
    support pull, but subscribers can get the pull model by creating an 
    SQS queue and subscribing it to the topic. Note that this puts the 
    cost of pull support back onto the subscriber, just as it is in the 
    push model. It is not clear that one way is strictly better than the 
    other; larger, sophisticated developers may be happy to own message 
    persistence so they can have their own internal delivery guarantees. 
    The long tail of OIDC clients may not care about that, or may fail 
    to get it right. Regardless, I think we can learn something from the 
    Delivery Policies supported by SNS, as well as the delivery controls 
    that SQS offers (e.g. Visibility Timeout, Dead-Letter Queues). I’m 
    not suggesting that we need all of these things in the spec, but 
    they give an idea of what features people have found useful.</t>
    <t>Other information:<list style="symbols">
     <t>API Reference: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html</t>
     <t>Visibility Timeouts: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html</t>
    </list></t>
    
    <t>Apache Kafka</t>
    <t>Apache Kafka is an Apache open source project based upon TCP for 
    distributed streaming. It prescribes some interesting general 
    purpose features that seem to extend far beyond the simpler 
    streaming model SECEVENTs is after. A comment from MS has been that 
    Kafka does an acknowledge with poll combination event which seems 
    to be a performance advantage. See: https://kafka.apache.org/intro</t>
    
    <t>Google Pub/Sub</t>
    <t>Google Pub Sub system favours a model whereby polling and acknowledgement
    of events is done as separate endpoints as separate functions.</t>
    <t>Information:<list style="symbols">
      <t>Cloud Overview - https://cloud.google.com/pubsub/</t>
      <t>Subscriber Overview - https://cloud.google.com/pubsub/docs/subscriber</t>
      <t>Subscriber Pull(poll) - https://cloud.google.com/pubsub/docs/pull</t>
    </list></t>
    
    
    </section>

    <section title="Acknowledgments">
      <t>The editors would like to thanks the members of the SCIM WG which 
      began discussions of provisioning events starting with: draft-hunt-scim-notify-00 in 2015.</t>

      <t>The editors would like to thank Phil Hunt and the other authors of draft-ietf-secevent-delivery-02,
          on which this draft is based.</t>
      
      <t>The editor would like to thank the participants in the the SECEVENTS
      working group for their support of this specification.</t>
    </section>

    <section title="Change Log">
      <t>Draft 00 - AB - Based on draft-ietf-secevent-delivery-02 with the 
      following changes:<list style="symbols">
        <t>Renamed to "Push-Based SET Token Delivery Using HTTP"</t>
        <t>Removed references to the HTTP Polling delivery method.</t>
        <t>Removed informative reference to RFC6202.</t>
      </list></t>
      <t>
          Draft 01 - AB:
          <list style="symbols">
              <t>Fixed area and workgroup to match secevent.</t>
              <t>Removed unused definitions and definitions already covered by SET.</t>
              <t>Renamed Event Transmitter and Event Receiver to SET Transmitter and SET Receiver, respectively.</t>
              <t>Added IANA registry for SET Delivery Error Codes.</t>
              <t>Removed enumeration of HTTP authentication methods.</t>
              <t>Removed generally applicable guidance for HTTP, authorization tokens, and bearer tokens.</t>
              <t>Moved guidance for using authentication methods as DoS protection to Security Considerations.</t>
              <t>Removed redundant instruction to use WWW-Authenticate header.</t>
              <t>Removed further generally applicable guidance for authorization tokens.</t>
              <t>Removed bearer token from example delivery request, and text referencing it.</t>
              <t>Broke delivery method description into separate request/response sections.</t>
              <t>Added missing empty line between headers and body in example request.</t>
              <t>Removed unapplicable notes about example formatting.</t>
              <t>Removed text about SET creation and handling.</t>
              <t>Removed duplication in protocol description.</t>
              <t>Added "non-normative example" text to example transmission request.</t>
              <t>Fixed inconsistencies in use of Error Code term.</t>
          </list>
      </t>
    </section>
  </back>
</rfc>
