| rfc8936xml2.original.xml | rfc8936.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="utf-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <?xml-stylesheet type='text/xsl' href='http://xml2rfc.tools.ietf.org/authoring/r | ||||
| fc2629.xslt' ?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
| <?rfc toc="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
| <?rfc tocompact="yes"?> | docName="draft-ietf-secevent-http-poll-12" ipr="trust200902" obsoletes="" | |||
| <?rfc tocdepth="3"?> | updates="" submissionType="IETF" xml:lang="en" tocInclude="true" | |||
| <?rfc tocindent="yes"?> | tocDepth="3" symRefs="true" sortRefs="true" consensus="yes" number="8936" | |||
| <?rfc symrefs="yes"?> | version="3"> | |||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc comments="yes"?> | ||||
| <?rfc inline="yes"?> | ||||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <rfc category="std" docName="draft-ietf-secevent-http-poll-12" | ||||
| ipr="trust200902"> | ||||
| <front> | ||||
| <title abbrev="draft-ietf-secevent-http-poll"> | ||||
| Poll-Based Security Event Token (SET) Delivery Using HTTP | ||||
| </title> | ||||
| <front> | ||||
| <title abbrev="Poll-Based SET Delivery Using HTTP">Poll-Based Security Event | ||||
| Token (SET) Delivery Using HTTP</title> | ||||
| <seriesInfo name="RFC" value="8936"/> | ||||
| <author fullname="Annabelle Backman" initials="A." surname="Backman" role="e ditor"> | <author fullname="Annabelle Backman" initials="A." surname="Backman" role="e ditor"> | |||
| <organization abbrev="Amazon">Amazon</organization> | <organization>Amazon</organization> | |||
| <address> | <address> | |||
| <email>richanna@amazon.com</email> | <email>richanna@amazon.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Michael B. Jones" initials="M." surname="Jones" role="edit or"> | <author fullname="Michael B. Jones" initials="M." surname="Jones" role="edit or"> | |||
| <organization abbrev="Microsoft">Microsoft</organization> | <organization>Microsoft</organization> | |||
| <address> | <address> | |||
| <email>mbj@microsoft.com</email> | <email>mbj@microsoft.com</email> | |||
| <uri>https://self-issued.info/</uri> | <uri>https://self-issued.info/</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Marius Scurtescu" initials="M." surname="Scurtescu"> | ||||
| <author fullname="Marius Scurtescu" initials="M.S." surname="Scurtescu"> | <organization>Coinbase</organization> | |||
| <organization abbrev="Coinbase">Coinbase</organization> | ||||
| <address> | <address> | |||
| <email>marius.scurtescu@coinbase.com</email> | <email>marius.scurtescu@coinbase.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Morteza Ansari" initials="M." surname="Ansari"> | <author fullname="Morteza Ansari" initials="M." surname="Ansari"> | |||
| <organization abbrev="Cisco">Cisco</organization> | <organization>Independent</organization> | |||
| <address> | <address> | |||
| <email>morteza.ansari@cisco.com</email> | <email>morteza@sharppics.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Anthony Nadalin" initials="A." surname="Nadalin"> | <author fullname="Anthony Nadalin" initials="A." surname="Nadalin"> | |||
| <organization abbrev="Microsoft">Microsoft</organization> | <organization>Independent</organization> | |||
| <address> | <address> | |||
| <email>tonynad@microsoft.com</email> | <email>nadalin@prodigy.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2020" month="November"/> | ||||
| <date year="2020" month="June" day="24" /> | ||||
| <area>Security</area> | <area>Security</area> | |||
| <workgroup>Security Events Working Group</workgroup> | <workgroup>Security Events Working Group</workgroup> | |||
| <keyword>Internet-Draft</keyword> | <keyword>JSON Web Token</keyword> | |||
| <keyword>JWT</keyword> | ||||
| <keyword>Security Event Token</keyword> | ||||
| <keyword>SET</keyword> | ||||
| <keyword>Delivery</keyword> | ||||
| <keyword>JavaScript Object Notation</keyword> | ||||
| <keyword>JSON</keyword> | ||||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| This specification defines how a series of Security Event Tokens | This specification defines how a series of Security Event Tokens | |||
| (SETs) can be delivered to an intended recipient | (SETs) can be delivered to an intended recipient | |||
| using HTTP POST over TLS initiated as a poll by the recipient. The | using HTTP POST over TLS initiated as a poll by the recipient. The | |||
| specification also defines how delivery can be assured, subject to | specification also defines how delivery can be assured, subject to | |||
| the SET Recipient's need for assurance. | the SET Recipient's need for assurance. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="intro" title="Introduction and Overview" toc="default"> | ||||
| <section anchor="intro" toc="default" numbered="true"> | ||||
| <name>Introduction and Overview</name> | ||||
| <t> | <t> | |||
| This specification defines how a stream of | This specification defines how a stream of | |||
| Security Event Tokens (SETs) <xref target="RFC8417"/> | Security Event Tokens (SETs) <xref target="RFC8417" format="default"/> | |||
| can be transmitted to an intended | can be transmitted to an intended | |||
| SET Recipient using HTTP <xref target="RFC7231"/> | SET Recipient using HTTP <xref target="RFC7231" format="default"/> | |||
| over TLS. The specification defines a method to poll for SETs | over TLS. The specification defines a method to poll for SETs | |||
| using HTTP POST. | using HTTP POST. | |||
| This is an alternative SET delivery method to the one defined in | This is an alternative SET delivery method to the one defined in | |||
| <xref target="I-D.ietf-secevent-http-push"/>. | <xref target="RFC8935" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Poll-based SET delivery is intended for scenarios where all of | Poll-based SET delivery is intended for scenarios where all of | |||
| the following apply: | the following apply: | |||
| <list style="symbols"> | </t> | |||
| <t>The recipient of the SET is capable of making outbound HTTP requests | <ul spacing="normal"> | |||
| .</t> | <li>The recipient of the SET is capable of making outbound HTTP requests | |||
| <t> | .</li> | |||
| <li> | ||||
| The transmitter is capable of hosting a TLS-enabled HTTP endpoint tha t is accessible | The transmitter is capable of hosting a TLS-enabled HTTP endpoint tha t is accessible | |||
| to the recipient. | to the recipient. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| The transmitter and recipient are willing to exchange data with one a nother. | The transmitter and recipient are willing to exchange data with one a nother. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| <t> | ||||
| In some scenarios, either push-based or poll-based delivery could be used , | In some scenarios, either push-based or poll-based delivery could be used , | |||
| and in others, only one of them would be applicable. | and in others, only one of them would be applicable. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A mechanism for exchanging configuration metadata such as endpoint URLs, | A mechanism for exchanging configuration metadata such as endpoint URLs, | |||
| cryptographic keys, | cryptographic keys, | |||
| and possible implementation constraints such as buffer size limitations | and possible implementation constraints such as buffer size limitations | |||
| between the transmitter and recipient is | between the transmitter and recipient is | |||
| out of scope for this specification. How SETs are defined and the proce ss | out of scope for this specification. How SETs are defined and the proce ss | |||
| by which security events are identified for SET Recipients are specified in | by which security events are identified for SET Recipients are specified in | |||
| <xref target="RFC8417"/>. | <xref target="RFC8417" format="default"/>. | |||
| </t> | </t> | |||
| <section anchor="notat" toc="default" numbered="true"> | ||||
| <section anchor="notat" title="Notational Conventions" toc="default"> | <name>Notational Conventions</name> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <t> | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| when, and only when, they appear in all capitals, as shown here. | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| </t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
| to be interpreted as described in BCP 14 <xref target="RFC2119"/> | ||||
| <t> | <xref target="RFC8174"/> when, and only when, they appear in all capitals, | |||
| as shown here. | ||||
| </t> | ||||
| <t> | ||||
| Throughout this document, all figures may contain spaces and extra | Throughout this document, all figures may contain spaces and extra | |||
| line wrapping for readability and due to space limitations. | line wrapping for readability and due to space limitations. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="defs" toc="default" numbered="true"> | ||||
| <section anchor="defs" title="Definitions" toc="default"> | <name>Definitions</name> | |||
| <t> | <t> | |||
| This specification utilizes terminology defined in <xref target="RFC | This specification utilizes terminology defined in <xref target="RFC | |||
| 8417"/> | 8417" format="default"/> | |||
| and <xref target="I-D.ietf-secevent-http-push"/>. | and <xref target="RFC8935" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="Delivery" numbered="true" toc="default"> | ||||
| <section anchor="Delivery" title="SET Delivery"> | <name>SET Delivery</name> | |||
| <t> | <t> | |||
| When a SET is available for a SET Recipient, the SET Transmitter | When a SET is available for a SET Recipient, the SET Transmitter | |||
| queues the SET in a buffer so that | queues the SET in a buffer so that | |||
| a SET Recipient can poll for SETs using HTTP POST. | a SET Recipient can poll for SETs using HTTP POST. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In poll-based SET delivery using HTTP over TLS, zero or more SETs are | In poll-based SET delivery using HTTP over TLS, zero or more SETs are | |||
| delivered in a JSON <xref target="RFC8259"/> document | delivered in a JSON <xref target="RFC8259" format="default"/> document | |||
| to a SET Recipient in response to an HTTP POST request to the | to a SET Recipient in response to an HTTP POST request to the | |||
| SET Transmitter. Then in a following request, the SET Recipient | SET Transmitter. Then in a following request, the SET Recipient | |||
| acknowledges received SETs and can poll for more. All requests and | acknowledges received SETs and can poll for more. All requests and | |||
| responses are JSON documents and use a | responses are JSON documents and use a | |||
| <spanx style="verb">Content-Type</spanx> of | <tt>Content-Type</tt> of | |||
| <spanx style="verb">application/json</spanx>, as described in | <tt>application/json</tt>, as described in | |||
| <xref target="httpPoll"/>. | <xref target="pollReq" format="default"/>. | |||
| </t> | </t> | |||
| <t>After successful (acknowledged) SET delivery, SET | <t>After successful (acknowledged) SET delivery, SET | |||
| Transmitters are not required to retain or record SETs for | Transmitters are not required to retain or record SETs for | |||
| retransmission. Once a SET is acknowledged, the SET Recipient SHALL be | retransmission. Once a SET is acknowledged, the SET Recipient <bcp14>SHALL </bcp14> be | |||
| responsible for retention, if needed. | responsible for retention, if needed. | |||
| Transmitters may also discard undelivered SETs under deployment-specific c onditions, | Transmitters may also discard undelivered SETs under deployment-specific c onditions, | |||
| such as if they have not been polled for over too long a period of time | such as if they have not been polled for over too long a period of time | |||
| or if an excessive amount of storage is needed to retain them. | or if an excessive amount of storage is needed to retain them. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Upon receiving a SET, the SET Recipient reads the SET and validates | Upon receiving a SET, the SET Recipient reads the SET and validates | |||
| it in the manner described in Section 2 of <xref target="I-D.ietf-seceven | it in the manner described in <xref | |||
| t-http-push"/>. | target="RFC8935" sectionFormat="of" section="2"/>. | |||
| The SET Recipient MUST acknowledge receipt to the SET Transmitter, | The SET Recipient <bcp14>MUST</bcp14> acknowledge receipt to the SET Tran | |||
| and SHOULD do so in a timely fashion, as described in <xref target="pollR | smitter, | |||
| equest"/>. | and <bcp14>SHOULD</bcp14> do so in a timely fashion, as described in <xre | |||
| The SET Recipient SHALL NOT use the event acknowledgement mechanism | f target="pollRequest" format="default"/>. | |||
| The SET Recipient <bcp14>SHALL NOT</bcp14> use the event acknowledgement | ||||
| mechanism | ||||
| to report event errors other than those relating to the parsing and | to report event errors other than those relating to the parsing and | |||
| validation of the SET. | validation of the SET. | |||
| </t> | </t> | |||
| <section anchor="httpPoll" numbered="true" toc="default"> | ||||
| <section anchor="httpPoll" title="Polling Delivery using HTTP"> | <name>Polling Delivery using HTTP</name> | |||
| <t>This method allows a SET Recipient to use HTTP POST | ||||
| <t>This method allows a SET Recipient to use HTTP POST | (<xref target="RFC7231" sectionFormat="of" section="4.3.3"/>) to acknowle | |||
| (Section 4.3.3 of <xref target="RFC7231"/>) to acknowledge | dge | |||
| SETs and to check for and receive zero or more SETs. Requests | SETs and to check for and receive zero or more SETs. Requests | |||
| MAY be made at a periodic interval (short polling) or requests | <bcp14>MAY</bcp14> be made at a periodic interval (short polling) or requ | |||
| MAY wait, pending availability of new SETs using long polling, | ests | |||
| per Section 2 of <xref target="RFC6202"/>. | <bcp14>MAY</bcp14> wait, pending availability of new SETs using long poll | |||
| ing, | ||||
| per <xref target="RFC6202" sectionFormat="of" section="2"/>. | ||||
| Note that short polling will result in retrieving zero or more SETs | Note that short polling will result in retrieving zero or more SETs | |||
| whereas long polling will typically result in retrieving one or more SETs | whereas long polling will typically result in retrieving one or more SETs | |||
| unless a timeout occurs. | unless a timeout occurs. | |||
| </t> | </t> | |||
| <t>The delivery of SETs in this method is facilitated by HTTP | ||||
| <t>The delivery of SETs in this method is facilitated by HTTP | POST requests initiated by the SET Recipient in which:</t> | |||
| POST requests initiated by the SET Recipient in which:<list style="symbol | <ul spacing="normal"> | |||
| s"> | <li>The SET Recipient makes a request for available SETs | |||
| <t>The SET Recipient makes a request for available SETs | ||||
| using an HTTP POST to a pre-arranged endpoint provided by the SET | using an HTTP POST to a pre-arranged endpoint provided by the SET | |||
| Transmitter or,</t> | Transmitter, or</li> | |||
| <t>after validating previously received SETs, the SET Recipient | <li>after validating previously received SETs, the SET Recipient | |||
| initiates another poll request using HTTP POST that includes | initiates another poll request using HTTP POST that includes | |||
| acknowledgement of previous SETs and requests the next batch | acknowledgement of previous SETs and requests the next batch | |||
| of SETs.</t> | of SETs.</li> | |||
| </list></t> | </ul> | |||
| <t>The purpose of the acknowledgement is to inform the | ||||
| <t>The purpose of the acknowledgement is to inform the | ||||
| SET Transmitter that delivery has succeeded and | SET Transmitter that delivery has succeeded and | |||
| redelivery is no longer required. | redelivery is no longer required. | |||
| Before acknowledgement, SET Recipients validate the received SETs | Before acknowledgement, SET Recipients validate the received SETs | |||
| and retain them in a manner appropriate to the recipient's | and retain them in a manner appropriate to the recipient's | |||
| requirements. The level and method of retention of SETs | requirements. The level and method of retention of SETs | |||
| by SET Recipients is out of scope of this specification.</t> | by SET Recipients is out of scope of this specification.</t> | |||
| </section> | </section> | |||
| <section anchor="pollReq" numbered="true" toc="default"> | ||||
| <section anchor="pollReq" title="Polling HTTP Request"> | <name>Polling HTTP Request</name> | |||
| <t>When initiating a poll request, the SET Recipient constructs | ||||
| <t>When initiating a poll request, the SET Recipient constructs | ||||
| a JSON document that consists of polling request parameters | a JSON document that consists of polling request parameters | |||
| and SET acknowledgement parameters in the form of JSON objects. | and SET acknowledgement parameters in the form of JSON objects. | |||
| </t> | </t> | |||
| <t>When making a request, the HTTP <tt>Content-Type</tt> header field | ||||
| <t>When making a request, the HTTP <spanx style="verb">Content-Type</span | is set to <tt>application/json</tt>.</t> | |||
| x> header field | <t>The following JSON object members are used in a polling request: | |||
| is set to <spanx style="verb">application/json</spanx>.</t> | </t> | |||
| <dl newline="true" spacing="normal"> | ||||
| <t>The following JSON object members are used in a polling request: | <dt>Request Processing Parameters</dt> | |||
| <list style="hanging"> | <dd> | |||
| <dl newline="true" spacing="normal"> | ||||
| <t hangText="Request Processing Parameters"><list style="hanging"> | <dt>maxEvents</dt> | |||
| <dd>An <bcp14>OPTIONAL</bcp14> integer value | ||||
| <t hangText="maxEvents"><vspace/>An OPTIONAL integer value | ||||
| indicating the maximum number of unacknowledged SETs to be returned. | indicating the maximum number of unacknowledged SETs to be returned. | |||
| The SET Transmitter SHOULD NOT send more SETs than the specified maxi mum. | The SET Transmitter <bcp14>SHOULD NOT</bcp14> send more SETs than the specified maximum. | |||
| If more than the maximum number of SETs | If more than the maximum number of SETs | |||
| are available, the SET Transmitter determines which to return first; | are available, the SET Transmitter determines which to return first; | |||
| the oldest SETs available MAY returned first, | the oldest SETs available <bcp14>MAY</bcp14> be returned first, | |||
| or another selection algorithm MAY be used, | or another selection algorithm <bcp14>MAY</bcp14> be used, | |||
| such as prioritizing SETs in some manner that makes sense for the use case. | such as prioritizing SETs in some manner that makes sense for the use case. | |||
| first. A value of <spanx style="verb">0</spanx> MAY be used by | A value of <tt>0</tt> <bcp14>MAY</bcp14> be used by | |||
| SET Recipients that would like to perform an acknowledge-only | SET Recipients that would like to perform an acknowledge-only | |||
| request. This enables the Recipient to use separate HTTP requests | request. This enables the Recipient to use separate HTTP requests | |||
| for acknowledgement and reception of SETs. | for acknowledgement and reception of SETs. | |||
| If this parameter is omitted, no limit is placed on | If this parameter is omitted, no limit is placed on | |||
| the number of SETs to be returned. | the number of SETs to be returned. | |||
| </t> | </dd> | |||
| <dt>returnImmediately</dt> | ||||
| <t hangText="returnImmediately"><vspace/>An OPTIONAL JSON | <dd>An <bcp14>OPTIONAL</bcp14> JSON | |||
| boolean value that indicates the SET Transmitter SHOULD return | boolean value that indicates the SET Transmitter <bcp14>SHOULD</bcp14 | |||
| > return | ||||
| an immediate response even if no results are available | an immediate response even if no results are available | |||
| (short polling). The default value is <spanx style="verb">false</span | (short polling). The default value is <tt>false</tt>, | |||
| x>, | which indicates the request is to be treated as an HTTP long poll, | |||
| which indicates the request is to be treated as an HTTP Long Poll, | per <xref target="RFC6202" sectionFormat="of" section="2"/>. The time | |||
| per Section 2 of <xref target="RFC6202"/>. The timeout for the | out for the | |||
| request is part of the configuration between the participants, which is out of | request is part of the configuration between the participants, which is out of | |||
| scope of this specification.</t> | scope of this specification.</dd> | |||
| </dl> | ||||
| </list></t> | </dd> </dl> | |||
| <dl newline="true" spacing="normal"> | ||||
| <t hangText="SET Acknowledgment Parameters"><list style="hanging"> | <dt>SET Acknowledgment Parameters</dt><dd> | |||
| <dl newline="true" spacing="normal"> | ||||
| <t hangText="ack"> | <dt>ack</dt> | |||
| <vspace/> | <dd> | |||
| A JSON array of strings whose values | A JSON array of strings whose values are the <tt>jti</tt> <xref | |||
| are the <spanx style="verb">jti</spanx> <xref target="RFC7519"/> val | target="RFC7519" format="default"/> values of successfully | |||
| ues of | received SETs that are being acknowledged. If there are no | |||
| successfully received SETs that are being acknowledged. | outstanding SETs to acknowledge, this member is omitted or | |||
| If there are no outstanding SETs to acknowledge, this member is omit | contains an empty array. Once a SET has been acknowledged, the | |||
| ted | SET Transmitter is released from any obligation to retain the | |||
| or contains an empty array. | SET. | |||
| Once a SET has been acknowledged, the SET Transmitter is released fr | </dd> | |||
| om | <dt>setErrs</dt> | |||
| any obligation to retain the SET. | <dd> | |||
| </t> | ||||
| <t hangText="setErrs"> | ||||
| <vspace/> | ||||
| A JSON object with one or more members whose keys | A JSON object with one or more members whose keys | |||
| are the <spanx style="verb">jti</spanx> values of | are the <tt>jti</tt> values of | |||
| invalid SETs received. | invalid SETs received. | |||
| The values of these objects are themselves JSON objects that | The values of these objects are themselves JSON objects that | |||
| describe the errors detected using the | describe the errors detected using the | |||
| <spanx style="verb">err</spanx> and | <tt>err</tt> and | |||
| <spanx style="verb">description</spanx> values | <tt>description</tt> values | |||
| specified in <xref target="errorResponse"/>. | specified in <xref target="errorResponse" format="default"/>. | |||
| If there are no outstanding SETs with errors to report, this member is omitted | If there are no outstanding SETs with errors to report, this member is omitted | |||
| or contains an empty JSON object. | or contains an empty JSON object. | |||
| </t> | </dd> | |||
| </dl> | ||||
| </list></t> | </dd> </dl> | |||
| </section> | ||||
| </list> | <section anchor="pollResp" numbered="true" toc="default"> | |||
| </t> | <name>Polling HTTP Response</name> | |||
| </section> | <t>In response to a poll request, the SET Transmitter checks for | |||
| <section anchor="pollResp" title="Polling HTTP Response"> | ||||
| <t>In response to a poll request, the SET Transmitter checks for | ||||
| available SETs and responds with a JSON document containing | available SETs and responds with a JSON document containing | |||
| the following JSON object members: | the following JSON object members: | |||
| <list style="hanging"> | </t> | |||
| <dl newline="true" spacing="normal"> | ||||
| <t hangText="sets"><vspace/>A JSON object containing zero or more SETs | <dt>sets</dt> | |||
| being returned. | <dd>A JSON object containing zero or more SETs being returned. | |||
| Each member name | Each member name | |||
| is the <spanx style="verb">jti</spanx> of a SET to | is the <tt>jti</tt> of a SET to | |||
| be delivered and its value is a JSON string representing the | be delivered, and its value is a JSON string representing the | |||
| corresponding SET. If there are no | corresponding SET. If there are no | |||
| outstanding SETs to be transmitted, the JSON object SHALL be | outstanding SETs to be transmitted, the JSON object <bcp14>SHALL</bcp14 > be | |||
| empty. | empty. | |||
| Note that both SETs being transmitted for the first time and | Note that both SETs being transmitted for the first time and | |||
| SETs that are being re-transmitted after not having been acknowledged | SETs that are being retransmitted after not having been acknowledged | |||
| are communicated here. | are communicated here. | |||
| </t> | </dd> | |||
| <dt>moreAvailable</dt> | ||||
| <t hangText="moreAvailable"><vspace/>A JSON boolean value that | <dd>A JSON boolean value that | |||
| indicates if more unacknowledged SETs are available to be returned. | indicates if more unacknowledged SETs are available to be returned. | |||
| This member MAY be omitted, with the meaning being the same as | This member <bcp14>MAY</bcp14> be omitted, with the meaning being the s | |||
| including it with the boolean value <spanx style="verb">false</spanx>. | ame as | |||
| </t> | including it with the boolean value <tt>false</tt>. | |||
| </list> | </dd> | |||
| </t> | </dl> | |||
| <t>When making a response, the HTTP <tt>Content-Type</tt> header field | ||||
| <t>When making a response, the HTTP <spanx style="verb">Content-Type</spa | is set to <tt>application/json</tt>.</t> | |||
| nx> header field | ||||
| is set to <spanx style="verb">application/json</spanx>.</t> | ||||
| </section> | </section> | |||
| <section anchor="pollRequest" numbered="true" toc="default"> | ||||
| <section anchor="pollRequest" title="Poll Request"> | <name>Poll Request</name> | |||
| <t>The SET Recipient performs an HTTP POST (see | ||||
| <t>The SET Recipient performs an HTTP POST (see | <xref target="RFC7231" sectionFormat="of" section="4.3.4"/>) to a pre-arr | |||
| Section 4.3.4 of <xref target="RFC7231"/>) to a pre-arranged | anged | |||
| polling endpoint URI to check for SETs that are available. | polling endpoint URI to check for SETs that are available. | |||
| Because the SET Recipient has no prior SETs to | Because the SET Recipient has no prior SETs to | |||
| acknowledge, the <spanx style="verb">ack</spanx> and | acknowledge, the <tt>ack</tt> and | |||
| <spanx style="verb">setErrs</spanx> request parameters are omitted.</t> | <tt>setErrs</tt> request parameters are omitted.</t> | |||
| <t> | ||||
| <t> | ||||
| After a period of time configured in an out-of-band manner between the SET | After a period of time configured in an out-of-band manner between the SET | |||
| Transmitter and Recipient, a SET Transmitter MAY redeliver SETs | Transmitter and Recipient, a SET Transmitter <bcp14>MAY</bcp14> redeliver | |||
| it has previously delivered. The SET Recipient SHOULD accept | SETs | |||
| it has previously delivered. The SET Recipient <bcp14>SHOULD</bcp14> acce | ||||
| pt | ||||
| repeat SETs and acknowledge the SETs regardless of whether the | repeat SETs and acknowledge the SETs regardless of whether the | |||
| Recipient believes it has already acknowledged the SETs previously. | Recipient believes it has already acknowledged the SETs previously. | |||
| A SET Transmitter MAY limit the number of times it attempts to | A SET Transmitter <bcp14>MAY</bcp14> limit the number of times it attempt s to | |||
| deliver a SET. | deliver a SET. | |||
| </t> | </t> | |||
| <t>If the SET Recipient has received SETs from the | <t>If the SET Recipient has received SETs from the | |||
| SET Transmitter, the SET Recipient parses and validates that | SET Transmitter, the SET Recipient parses and validates that | |||
| received SETs meet its own requirements and SHOULD acknowledge | received SETs meet its own requirements and <bcp14>SHOULD</bcp14> acknow ledge | |||
| receipt in a timely fashion (e.g., seconds or minutes) so that the SET | receipt in a timely fashion (e.g., seconds or minutes) so that the SET | |||
| Transmitter can mark the SETs as received. SET Recipients SHOULD | Transmitter can mark the SETs as received. SET Recipients <bcp14>SHOULD< /bcp14> | |||
| acknowledge receipt before taking any local actions based on | acknowledge receipt before taking any local actions based on | |||
| the SETs to avoid unnecessary delay in acknowledgement, where | the SETs to avoid unnecessary delay in acknowledgement, where | |||
| possible.</t> | possible.</t> | |||
| <dl newline="true"><dt>Poll requests have three variations:</dt> | ||||
| <t>Poll requests have three variations: | <dd> | |||
| <list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t hangText="Poll-Only"><vspace/>In which a SET Recipient | ||||
| <dt>Poll-Only</dt> | ||||
| <dd>In this scenario, a SET Recipient | ||||
| asks for the next set of events where no previous SET deliveries | asks for the next set of events where no previous SET deliveries | |||
| are acknowledged (such as in the initial poll request).</t> | are acknowledged (such as in the initial poll request).</dd> | |||
| <t hangText="Acknowledge-Only"><vspace/>In which a SET | <dt>Acknowledge-Only</dt> | |||
| Recipient sets the <spanx style="verb">maxEvents</spanx> | <dd>In this scenario, a SET | |||
| value to <spanx style="verb">0</spanx> along with | Recipient sets the <tt>maxEvents</tt> | |||
| <spanx style="verb">ack</spanx> and | value to <tt>0</tt> along with | |||
| <spanx style="verb">setErrs</spanx> members indicating the | <tt>ack</tt> and | |||
| <tt>setErrs</tt> members indicating the | ||||
| SET Recipient is acknowledging previously received SETs and | SET Recipient is acknowledging previously received SETs and | |||
| does not want to receive any new SETs in response to the | does not want to receive any new SETs in response to the | |||
| request. </t> | request. </dd> | |||
| <t hangText="Combined Acknowledge and Poll"><vspace/>In | <dt>Combined Acknowledge and Poll</dt> | |||
| which a SET Recipient is both acknowledging previously | <dd>In this scenario, a SET Recipient is both acknowledging previously | |||
| received SETs using the <spanx style="verb">ack</spanx> and | received SETs using the <tt>ack</tt> and <tt>setErrs</tt> members | |||
| <spanx style="verb">setErrs</spanx> members | ||||
| and will wait for the next group of SETs in the SET Transmitters | and will wait for the next group of SETs in the SET Transmitters | |||
| response.</t> | response.</dd> | |||
| </list></t> | </dl></dd></dl> | |||
| <section anchor="PollOnlyRequest" numbered="true" toc="default"> | ||||
| <section anchor="PollOnlyRequest" title="Poll-Only Request"> | <name>Poll-Only Request</name> | |||
| <t>In the case where no SETs were received in a previous poll (see | <t>In the case where no SETs were received in a previous poll (see | |||
| <xref target="emptyPollResponse"/>), the SET Recipient simply | <xref target="emptyPollResponse" format="default"/>), the SET Recipient | |||
| polls without acknowledgement parameters (<spanx style="verb">ack</span | simply | |||
| x> | polls without acknowledgement parameters (<tt>ack</tt> | |||
| and <spanx style="verb">setErrs</spanx>).</t> | and <tt>setErrs</tt>).</t> | |||
| <t keepWithNext="true"> | ||||
| <figure anchor="pollInitRequest" title="Example Initial Poll Request"> | ||||
| <preamble> | ||||
| The following is a non-normative example request made by a SET Reci pient | The following is a non-normative example request made by a SET Reci pient | |||
| that has no outstanding SETs to acknowledge and is polling | that has no outstanding SETs to acknowledge and is polling | |||
| for available SETs at the endpoint | for available SETs at the endpoint | |||
| <spanx style="verb">https://notify.idp.example.com/Events</spanx>: | <tt>https://notify.idp.example.com/Events</tt>: | |||
| </preamble> | </t> | |||
| <artwork><![CDATA[ | <figure anchor="pollInitRequest"> | |||
| <name>Example Initial Poll Request</name> | ||||
| <sourcecode type="http-message" name=""><![CDATA[ | ||||
| POST /Events HTTP/1.1 | POST /Events HTTP/1.1 | |||
| Host: notify.idp.example.com | Host: notify.idp.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| { | { | |||
| "returnImmediately": true | "returnImmediately": true | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>A SET Recipient can poll using default parameter values by passing | ||||
| <t>A SET Recipient can poll using default parameter values by passing | ||||
| an empty JSON object.</t> | an empty JSON object.</t> | |||
| <t keepWithNext="true">The following is a non-normative example defaul | ||||
| <figure anchor="pollDefaultRequest" title="Example Default Poll Request | t poll request to the | |||
| "> | endpoint <tt>https://notify.idp.example.com/Events</tt>:</t> | |||
| <preamble>The following is a non-normative example default poll reque | <figure anchor="pollDefaultRequest"> | |||
| st to the | <name>Example Default Poll Request</name> | |||
| endpoint <spanx style="verb">https://notify.idp.example.com/Events</s | <sourcecode name="" type="http-message"><![CDATA[ | |||
| panx>:</preamble> | ||||
| <artwork><![CDATA[ | ||||
| POST /Events HTTP/1.1 | POST /Events HTTP/1.1 | |||
| Host: notify.idp.example.com | Host: notify.idp.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| {} | {} | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| <section anchor="AckOnlyRequest" numbered="true" toc="default"> | ||||
| <section anchor="AckOnlyRequest" title="Acknowledge-Only Request"> | <name>Acknowledge-Only Request</name> | |||
| <t>In this variation, the SET Recipient acknowledges previously | <t>In this variation, the SET Recipient acknowledges previously | |||
| received SETs and indicates it does not want to receive SETs in | received SETs and indicates it does not want to receive SETs in | |||
| response by setting the <spanx style="verb">maxEvents</spanx> | response by setting the <tt>maxEvents</tt> | |||
| value to <spanx style="verb">0</spanx>. | value to <tt>0</tt>. | |||
| This variation might be used, for instance, when a SET Recipient needs to | This variation might be used, for instance, when a SET Recipient needs to | |||
| acknowledge received SETs independently (e.g., on separate threads) | acknowledge received SETs independently (e.g., on separate threads) | |||
| from the process of receiving SETs. | from the process of receiving SETs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the poll needs to return immediately, then <spanx style="verb">ret | If the poll needs to return immediately, then <tt>returnImmediately</ | |||
| urnImmediately</spanx> | tt> | |||
| MUST also be present with the value <spanx style="verb">true</spanx>. | <bcp14>MUST</bcp14> also be present with the value <tt>true</tt>. | |||
| If it is <spanx style="verb">false</spanx>, then a long poll will sti | If it is <tt>false</tt>, then a long poll will still occur | |||
| ll occur | ||||
| until an event is ready to be returned, even though no events will be returned. | until an event is ready to be returned, even though no events will be returned. | |||
| </t> | </t> | |||
| <t keepWithNext="true">The following is a non-normative example poll r | ||||
| <figure anchor="pollAckOnly" title="Example Acknowledge-Only Request"> | equest with acknowledgement | |||
| <preamble>The following is a non-normative example poll request with | of SETs received (for example, as shown in | |||
| acknowledgement | <xref target="pollResponse" format="default"/>):</t> | |||
| of SETs received (for example as shown in | <figure anchor="pollAckOnly"> | |||
| <xref target="pollResponse"/>):</preamble> | <name>Example Acknowledge-Only Request</name> | |||
| <artwork><![CDATA[ | <sourcecode name="" type="http-message"><![CDATA[ | |||
| POST /Events HTTP/1.1 | POST /Events HTTP/1.1 | |||
| Host: notify.idp.example.com | Host: notify.idp.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| { | { | |||
| "ack": [ | "ack": [ | |||
| "4d3559ec67504aaba65d40b0363faad8", | "4d3559ec67504aaba65d40b0363faad8", | |||
| "3d0c3cf797584bd193bd0fb1bd4e7d30" | "3d0c3cf797584bd193bd0fb1bd4e7d30" | |||
| ], | ], | |||
| "maxEvents": 0, | "maxEvents": 0, | |||
| "returnImmediately": true | "returnImmediately": true | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| <section anchor="pollAck" numbered="true" toc="default"> | ||||
| <section anchor="pollAck" title="Poll with Acknowledgement"> | <name>Poll with Acknowledgement</name> | |||
| <t>This variation allows a recipient thread to simultaneously | ||||
| <t>This variation allows a recipient thread to simultaneously | ||||
| acknowledge previously received SETs and wait for the next | acknowledge previously received SETs and wait for the next | |||
| group of SETs in a single request.</t> | group of SETs in a single request.</t> | |||
| <t keepWithNext="true">The following is a non-normative example poll w | ||||
| <figure anchor="pollGoodResponse" title="Example Poll with Acknowledgem | ith acknowledgement | |||
| ent and No Errors"> | of the SETs received in <xref target="pollResponse" format="default"/ | |||
| <preamble>The following is a non-normative example poll with acknowle | >:</t> | |||
| dgement | <figure anchor="pollGoodResponse"> | |||
| of the SETs received in <xref target="pollResponse"/>:</preamble> | <name>Example Poll with Acknowledgement and No Errors</name> | |||
| <artwork><![CDATA[ | <sourcecode name="" type="http-message"><![CDATA[ | |||
| POST /Events HTTP/1.1 | POST /Events HTTP/1.1 | |||
| Host: notify.idp.example.com | Host: notify.idp.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| { | { | |||
| "ack": [ | "ack": [ | |||
| "4d3559ec67504aaba65d40b0363faad8", | "4d3559ec67504aaba65d40b0363faad8", | |||
| "3d0c3cf797584bd193bd0fb1bd4e7d30" | "3d0c3cf797584bd193bd0fb1bd4e7d30" | |||
| ], | ], | |||
| "returnImmediately": false | "returnImmediately": false | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>In the above acknowledgement, the SET Recipient has acknowledged | ||||
| <t>In the above acknowledgement, the SET Recipient has acknowledged | ||||
| receipt of two SETs and has indicated it wants to wait until | receipt of two SETs and has indicated it wants to wait until | |||
| the next SET is available.</t> | the next SET is available.</t> | |||
| </section> | </section> | |||
| <section anchor="pollAckErr" numbered="true" toc="default"> | ||||
| <section anchor="pollAckErr" title="Poll with Acknowledgement and Errors" | <name>Poll with Acknowledgement and Errors</name> | |||
| > | <t>In the case where errors were detected in previously | |||
| <t>In the case where errors were detected in previously | delivered SETs, the SET Recipient <bcp14>MAY</bcp14> use the | |||
| delivered SETs, the SET Recipient MAY use the | <tt>setErrs</tt> member to communicate the errors | |||
| <spanx style="verb">setErrs</spanx> member to communicate the errors | ||||
| in the following poll request. | in the following poll request. | |||
| </t> | </t> | |||
| <t keepWithNext="true">The following is a non-normative example of a r | ||||
| <figure anchor="pollErrorResponse" | esponse | |||
| title="Example Poll Acknowledgement with Error"> | ||||
| <preamble>The following is a non-normative example of a response | ||||
| acknowledging one successfully received SET and one SET with an error | acknowledging one successfully received SET and one SET with an error | |||
| from the two SETs received in <xref target="pollResponse"/>:</preambl | from the two SETs received in <xref target="pollResponse" format="def | |||
| e> | ault"/>:</t> | |||
| <artwork><![CDATA[ | <figure anchor="pollErrorResponse"> | |||
| <name>Example Poll Acknowledgement with Error</name> | ||||
| <sourcecode name="" type="http-message"><![CDATA[ | ||||
| POST /Events HTTP/1.1 | POST /Events HTTP/1.1 | |||
| Host: notify.idp.example.com | Host: notify.idp.example.com | |||
| Content-Language: en-US | Content-Language: en-US | |||
| Content-Type: application/json | Content-Type: application/json | |||
| { | { | |||
| "ack": ["3d0c3cf797584bd193bd0fb1bd4e7d30"], | "ack": ["3d0c3cf797584bd193bd0fb1bd4e7d30"], | |||
| "setErrs": { | "setErrs": { | |||
| "4d3559ec67504aaba65d40b0363faad8": { | "4d3559ec67504aaba65d40b0363faad8": { | |||
| "err": "authentication_failed", | "err": "authentication_failed", | |||
| "description": "The SET could not be authenticated" | "description": "The SET could not be authenticated" | |||
| } | } | |||
| }, | }, | |||
| "returnImmediately": true | "returnImmediately": true | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </section> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="pollGetAck" numbered="true" toc="default"> | ||||
| <section anchor="pollGetAck" | <name>Poll Response</name> | |||
| title="Poll Response"> | <t>In response to a valid poll request, the service provider <bcp14>MAY< | |||
| /bcp14> | ||||
| <t>In response to a valid poll request, the service provider MAY | ||||
| respond immediately if SETs are available to be delivered. | respond immediately if SETs are available to be delivered. | |||
| If no SETs are available at the time of the request, the | If no SETs are available at the time of the request, the | |||
| SET Transmitter SHALL delay responding until a SET is | SET Transmitter <bcp14>SHALL</bcp14> delay responding until a SET is | |||
| available or the timeout interval has elapsed unless the poll request par ameter | available or the timeout interval has elapsed unless the poll request par ameter | |||
| <spanx style="verb">returnImmediately</spanx> is present with the value < | <tt>returnImmediately</tt> is present with the value <tt>true</tt>. | |||
| spanx style="verb">true</spanx>. | </t> | |||
| </t> | <t>As described in <xref target="pollResp" format="default"/>, a JSON do | |||
| cument | ||||
| <t>As described in <xref target="pollResp"/>, a JSON document | ||||
| is returned containing members including | is returned containing members including | |||
| <spanx style="verb">sets</spanx>, which SHALL contain zero or more | <tt>sets</tt>, which <bcp14>SHALL</bcp14> contain zero or more | |||
| SETs.</t> | SETs.</t> | |||
| <figure anchor="pollResponse" title="Example Poll Response"> | <t keepWithNext="true">The following is a non-normative example response | |||
| <preamble>The following is a non-normative example response to | to | |||
| the request shown in <xref target="pollRequest"/>. This example | the request shown in <xref target="pollRequest" format="default"/>. Thi | |||
| shows two SETs being returned:</preamble> | s example | |||
| <artwork><![CDATA[ | shows two SETs being returned:</t> | |||
| HTTP/1.1 200 OK | <figure anchor="pollResponse"> | |||
| Content-Type: application/json | <name>Example Poll Response</name> | |||
| <sourcecode name="" type="http-message"><![CDATA[ | ||||
| HTTP/1.1 200 OK | ||||
| Content-Type: application/json | ||||
| { | ||||
| "sets": | ||||
| { | { | |||
| "sets": { | "4d3559ec67504aaba65d40b0363faad8": | |||
| "4d3559ec67504aaba65d40b0363faad8": | "eyJhbGciOiJub25lIn0. | |||
| "eyJhbGciOiJub25lIn0. | eyJqdGkiOiI0ZDM1NTllYzY3NTA0YWFiYTY1ZDQwYjAzNjNmYWFkOCIsImlhdC | |||
| eyJqdGkiOiI0ZDM1NTllYzY3NTA0YWFiYTY1ZDQwYjAzNjNmYWFkOCIsImlhdCI6MTQ | I6MTQ1ODQ5NjQwNCwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwi | |||
| 1ODQ5NjQwNCwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwiYXVkIjpbIm | YXVkIjpbImh0dHBzOi8vc2NpbS5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MW | |||
| h0dHBzOi8vc2NpbS5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MWZhNWJiYzg3OTU5M | ZhNWJiYzg3OTU5M2I3NzU0IiwiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tL0Zl | |||
| 2I3NzU0IiwiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tL0ZlZWRzLzVkNzYwNDUxNmIx | ZWRzLzVkNzYwNDUxNmIxZDA4NjQxZDc2NzZlZTciXSwiZXZlbnRzIjp7InVybj | |||
| ZDA4NjQxZDc2NzZlZTciXSwiZXZlbnRzIjp7InVybjppZXRmOnBhcmFtczpzY2ltOmV | ppZXRmOnBhcmFtczpzY2ltOmV2ZW50OmNyZWF0ZSI6eyJyZWYiOiJodHRwczov | |||
| 2ZW50OmNyZWF0ZSI6eyJyZWYiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcn | L3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZhYjYxZTc1Mj | |||
| MvNDRmNjE0MmRmOTZiZDZhYjYxZTc1MjFkOSIsImF0dHJpYnV0ZXMiOlsiaWQiLCJuY | FkOSIsImF0dHJpYnV0ZXMiOlsiaWQiLCJuYW1lIiwidXNlck5hbWUiLCJwYXNz | |||
| W1lIiwidXNlck5hbWUiLCJwYXNzd29yZCIsImVtYWlscyJdfX19.", | d29yZCIsImVtYWlscyJdfX19.", | |||
| "3d0c3cf797584bd193bd0fb1bd4e7d30": | "3d0c3cf797584bd193bd0fb1bd4e7d30": | |||
| "eyJhbGciOiJub25lIn0. | "eyJhbGciOiJub25lIn0. | |||
| eyJqdGkiOiIzZDBjM2NmNzk3NTg0YmQxOTNiZDBmYjFiZDRlN2QzMCIsImlhdCI6MTQ | eyJqdGkiOiIzZDBjM2NmNzk3NTg0YmQxOTNiZDBmYjFiZDRlN2QzMCIsImlhdC | |||
| 1ODQ5NjAyNSwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwiYXVkIjpbIm | I6MTQ1ODQ5NjAyNSwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwi | |||
| h0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MWZhNWJiYzg3OTU5M | YXVkIjpbImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MW | |||
| 2I3NzU0IiwiaHR0cHM6Ly9qaHViLmV4YW1wbGUuY29tL0ZlZWRzLzVkNzYwNDUxNmIx | ZhNWJiYzg3OTU5M2I3NzU0IiwiaHR0cHM6Ly9qaHViLmV4YW1wbGUuY29tL0Zl | |||
| ZDA4NjQxZDc2NzZlZTciXSwic3ViIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tL1V | ZWRzLzVkNzYwNDUxNmIxZDA4NjQxZDc2NzZlZTciXSwic3ViIjoiaHR0cHM6Ly | |||
| zZXJzLzQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJldmVudHMiOnsidXJuOmlldG | 9zY2ltLmV4YW1wbGUuY29tL1VzZXJzLzQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIx | |||
| Y6cGFyYW1zOnNjaW06ZXZlbnQ6cGFzc3dvcmRSZXNldCI6eyJpZCI6IjQ0ZjYxNDJkZ | ZDkiLCJldmVudHMiOnsidXJuOmlldGY6cGFyYW1zOnNjaW06ZXZlbnQ6cGFzc3 | |||
| jk2YmQ2YWI2MWU3NTIxZDkifSwiaHR0cHM6Ly9leGFtcGxlLmNvbS9zY2ltL2V2ZW50 | dvcmRSZXNldCI6eyJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkifSwi | |||
| L3Bhc3N3b3JkUmVzZXRFeHQiOnsicmVzZXRBdHRlbXB0cyI6NX19fQ." | aHR0cHM6Ly9leGFtcGxlLmNvbS9zY2ltL2V2ZW50L3Bhc3N3b3JkUmVzZXRFeH | |||
| } | QiOnsicmVzZXRBdHRlbXB0cyI6NX19fQ." | |||
| } | } | |||
| ]]></artwork> | } | |||
| </figure> | ]]></sourcecode> | |||
| <t>In the above example, two SETs whose <spanx style="verb">jti</spanx> v | </figure> | |||
| alues | <t>In the above example, two SETs whose <tt>jti</tt> values | |||
| are <spanx style="verb">4d3559ec67504aaba65d40b0363faad8</spanx> | are <tt>4d3559ec67504aaba65d40b0363faad8</tt> | |||
| and <spanx style="verb">3d0c3cf797584bd193bd0fb1bd4e7d30</spanx> | and <tt>3d0c3cf797584bd193bd0fb1bd4e7d30</tt> | |||
| are delivered.</t> | are delivered.</t> | |||
| <t keepWithNext="true">The following is a non-normative example response | ||||
| <figure anchor="emptyPollResponse" title="Example No SETs Poll Response"> | to | |||
| <preamble>The following is a non-normative example response to | the request shown in <xref target="PollOnlyRequest" format="default"/>, | |||
| the request shown in <xref target="PollOnlyRequest"/>, which indicates | which indicates that no new | |||
| that no new | SETs or unacknowledged SETs are available:</t> | |||
| SETs or unacknowledged SETs are available:</preamble> | <figure anchor="emptyPollResponse"> | |||
| <artwork><![CDATA[ | <name>Example No SETs Poll Response</name> | |||
| <sourcecode name="" type="http-message"><![CDATA[ | ||||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| { | { | |||
| "sets": {} | "sets": {} | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>Upon receiving the JSON document (e.g., as shown in <xref | ||||
| <t>Upon receiving the JSON document (e.g., as shown in | target="pollResponse" format="default"/>), the SET Recipient parses | |||
| <xref target="pollResponse"/>), the SET Recipient parses | and verifies the received SETs and notifies the SET Transmitter of | |||
| and verifies the received SETs and notifies the SET Transmitter | successfully received SETs and SETs with errors via the next poll | |||
| of successfully received SETs and SETs with errors | request to the SET Transmitter, as described in Sections <xref | |||
| via the next poll request to the SET Transmitter, as described in | target="pollAck" format="counter"/> and <xref target="pollAckErr" | |||
| <xref target="pollAck"/> or <xref target="pollAckErr"/>.</t> | format="counter"/>.</t> | |||
| <section anchor="PollErrorResponse" numbered="true" toc="default"> | ||||
| <section anchor="PollErrorResponse" title="Poll Error Response"> | <name>Poll Error Response</name> | |||
| <t>In the event of a general HTTP error condition in the context of | <t>In the event of a general HTTP error condition in the context of | |||
| processing a poll request, the service provider responds with | processing a poll request, the service provider responds with | |||
| the applicable HTTP Response Status Code, as defined in Section | the applicable HTTP response status code, as defined in <xref ta | |||
| 6 of | rget="RFC7231" sectionFormat="of" section="6"/>.</t> | |||
| <xref target="RFC7231" />.</t> | ||||
| <t>Service providers MAY respond to any invalid poll request with an | <t>Service providers <bcp14>MAY</bcp14> respond to any invalid poll re | |||
| HTTP Response | quest with an HTTP response | |||
| Status Code of 400 (Bad Request) even when a more specific code | status code of 400 (Bad Request) even when a more specific code | |||
| might apply, for | might apply, for | |||
| example if the service provider deemed that a more specific code | example, if the service provider deemed that a more specific cod | |||
| presented an | e presented an | |||
| information disclosure risk. When no more specific code might ap ply, the service | information disclosure risk. When no more specific code might ap ply, the service | |||
| provider SHALL respond to an invalid poll request with an HTTP S | provider <bcp14>SHALL</bcp14> respond to an invalid poll | |||
| tatus Code of 400.</t> | request with an HTTP status code of 400.</t> | |||
| <t> | ||||
| <t> | ||||
| The response body for responses to invalid poll requests is left un defined, | The response body for responses to invalid poll requests is left un defined, | |||
| and its contents SHOULD be ignored. | and its contents <bcp14>SHOULD</bcp14> be ignored. | |||
| </t> | </t> | |||
| <t keepWithNext="true"> | ||||
| <figure title="Example Poll Error Response"> | ||||
| <preamble> | ||||
| The following is a non-normative example of a response to an invalid poll request: | The following is a non-normative example of a response to an invalid poll request: | |||
| </preamble> | </t> | |||
| <artwork><![CDATA[ | <figure> | |||
| <name>Example Poll Error Response</name> | ||||
| <sourcecode name="" type="http-message"><![CDATA[ | ||||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="errorResponse" numbered="true" toc="default"> | ||||
| <section anchor="errorResponse" title="Error Response Handling"> | <name>Error Response Handling</name> | |||
| <t> | <t> | |||
| If a SET is invalid, | If a SET is invalid, | |||
| error codes from the IANA "Security Event Token Delivery Error Codes" | error codes from the IANA "Security Event Token Error Codes" | |||
| registry established by <xref target="I-D.ietf-secevent-http-push"/> | registry established by <xref target="RFC8935" format="default"/> | |||
| are used in error responses. | are used in error responses. | |||
| As described in Section 2.3 of <xref target="I-D.ietf-secevent-http-pus | ||||
| h"/>, | As described in <xref target="RFC8935" | |||
| an error response is a JSON object providing details about the error | sectionFormat="of" section="2.3"/>, an error response is a JSON | |||
| that includes the following name/value pairs: | object providing details about the error that includes the following | |||
| </t> | name/value pairs: | |||
| <t> | </t> | |||
| <list style="hanging"> | <dl newline="false" spacing="normal"> | |||
| <t hangText="err"><vspace /> | <dt>err:</dt> | |||
| <dd> | ||||
| A value from the | A value from the | |||
| IANA "Security Event Token Delivery Error Codes" registry | IANA "Security Event Token Error Codes" registry | |||
| that identifies the error. | that identifies the error. | |||
| </t> | </dd> | |||
| <t hangText="description"><vspace /> | <dt>description:</dt> | |||
| <dd> | ||||
| A human-readable string that provides | A human-readable string that provides | |||
| additional diagnostic information. | additional diagnostic information. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | <t> | |||
| <t> | ||||
| When included as part of a batch of SETs, the above JSON is included | When included as part of a batch of SETs, the above JSON is included | |||
| as part of the <spanx style="verb">setErrs</spanx> member, as | as part of the <tt>setErrs</tt> member, as | |||
| defined in <xref target="pollReq"/> and <xref target="pollAckErr"/>. | defined in Sections <xref target="pollReq" format="counter"/> and | |||
| </t> | <xref target="pollAckErr" format="counter"/>. | |||
| </t> | ||||
| <t> | <t> | |||
| When the SET Recipient includes one or more error responses in a req uest to | When the SET Recipient includes one or more error responses in a req uest to | |||
| the SET Transmitter, it must also include in the request a | the SET Transmitter, it must also include in the request a | |||
| <spanx style="verb">Content-Language</spanx> header field whose valu e indicates the | <tt>Content-Language</tt> header field whose value indicates the | |||
| language of the error descriptions included in the request. The met hod of | language of the error descriptions included in the request. The met hod of | |||
| language selection in the case when the SET Recipient can provide er ror messages | language selection in the case when the SET Recipient can provide er ror messages | |||
| in multiple languages is out of scope for this specification. | in multiple languages is out of scope for this specification. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="aa" toc="default" numbered="true"> | ||||
| <section anchor="aa" title="Authentication and Authorization" toc="default"> | <name>Authentication and Authorization</name> | |||
| <t>The SET delivery method described in this specification is | <t>The SET delivery method described in this specification is | |||
| based upon HTTP over TLS <xref target="RFC2818"/> and standard | based upon HTTP over TLS <xref target="RFC2818" format="default"/> and sta ndard | |||
| HTTP authentication and authorization schemes, as per | HTTP authentication and authorization schemes, as per | |||
| <xref target="RFC7235" />. | <xref target="RFC7235" format="default"/>. | |||
| The TLS server certificate MUST be validated using DNS-ID <xref target="RF | The TLS server certificate <bcp14>MUST</bcp14> be validated using DNS-ID < | |||
| C6125"/> | xref target="RFC6125" format="default"/> | |||
| and/or DANE <xref target="RFC6698"/>. | and/or DNS-Based Authentication of Named Entities (DANE) <xref target="RFC | |||
| As per Section 4.1 of <xref target="RFC7235"/>, a SET | 6698" format="default"/>. | |||
| delivery endpoint SHALL indicate supported HTTP authentication | As per <xref target="RFC7235" sectionFormat="of" section="4.1"/>, a SET | |||
| schemes via the <spanx style="verb">WWW-Authenticate</spanx> header field | delivery endpoint <bcp14>SHALL</bcp14> indicate supported HTTP authenticat | |||
| ion | ||||
| schemes via the <tt>WWW-Authenticate</tt> header field | ||||
| when using HTTP authentication. | when using HTTP authentication. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Authorization for the eligibility to provide actionable SETs can be deter mined by | Authorization for the eligibility to provide actionable SETs can be deter mined by | |||
| using the identity of the SET Issuer, | using the identity of the SET Issuer, | |||
| validating the identity of the SET Transmitter, | validating the identity of the SET Transmitter, | |||
| or via other employed authentication methods. | or via other employed authentication methods. | |||
| Likewise, the SET Transmitter may choose to validate the identity of the SET Recipient, | Likewise, the SET Transmitter may choose to validate the identity of the SET Recipient, | |||
| perhaps using mutual TLS. | perhaps using mutual TLS. | |||
| Because SETs are | Because SETs are | |||
| not commands, SET Recipients are free to ignore SETs that | not commands, SET Recipients are free to ignore SETs that | |||
| are not of interest after acknowledging their receipt.</t> | are not of interest after acknowledging their receipt.</t> | |||
| skipping to change at line 670 ¶ | skipping to change at line 655 ¶ | |||
| <t> | <t> | |||
| Authorization for the eligibility to provide actionable SETs can be deter mined by | Authorization for the eligibility to provide actionable SETs can be deter mined by | |||
| using the identity of the SET Issuer, | using the identity of the SET Issuer, | |||
| validating the identity of the SET Transmitter, | validating the identity of the SET Transmitter, | |||
| or via other employed authentication methods. | or via other employed authentication methods. | |||
| Likewise, the SET Transmitter may choose to validate the identity of the SET Recipient, | Likewise, the SET Transmitter may choose to validate the identity of the SET Recipient, | |||
| perhaps using mutual TLS. | perhaps using mutual TLS. | |||
| Because SETs are | Because SETs are | |||
| not commands, SET Recipients are free to ignore SETs that | not commands, SET Recipients are free to ignore SETs that | |||
| are not of interest after acknowledging their receipt.</t> | are not of interest after acknowledging their receipt.</t> | |||
| </section> | </section> | |||
| <section anchor="Security" toc="default" numbered="true"> | ||||
| <section anchor="Security" title="Security Considerations" toc="default"> | <name>Security Considerations</name> | |||
| <section anchor="payloadAuthentication" numbered="true" toc="default"> | ||||
| <section anchor="payloadAuthentication" title="Authentication Using Signed | <name>Authentication Using Signed SETs</name> | |||
| SETs"> | <t> | |||
| <t> | ||||
| JWS signed SETs can be | JWS signed SETs can be | |||
| used (see <xref target="RFC7515"/> and Section 5 of <xref target="RFC84 17"/>) | used (see <xref target="RFC7515" format="default"/> and <xref target="R FC8417" sectionFormat="of" section="5"/>) | |||
| to enable the SET Recipient | to enable the SET Recipient | |||
| to validate that the SET Issuer is authorized to provide actionable SET s. | to validate that the SET Issuer is authorized to provide actionable SET s. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="HTTP" title="HTTP Considerations"> | <section anchor="HTTP" numbered="true" toc="default"> | |||
| <t>SET delivery depends on the use of Hypertext Transfer Protocol and is | <name>HTTP Considerations</name> | |||
| thus | <t>SET delivery depends on the use of the Hypertext Transfer Protocol an | |||
| subject to the security considerations of HTTP Section 9 of <xref | d is thus | |||
| target="RFC7230"/> and its related specifications.</t> | subject to the security considerations of HTTP (<xref | |||
| target="RFC7230" sectionFormat="of" section="9"/>) and its related specif | ||||
| ications.</t> | ||||
| </section> | </section> | |||
| <section anchor="Confidentiality" numbered="true" toc="default"> | ||||
| <section anchor="Confidentiality" title="Confidentiality of SETs"> | <name>Confidentiality of SETs</name> | |||
| <t> | <t> | |||
| SETs may contain sensitive information, including Personally Identifiab | SETs may contain sensitive information, including Personally | |||
| le Information (PII), | Identifiable Information (PII), or be distributed through third | |||
| or be distributed through third parties. | parties. In such cases, SET Transmitters and SET Recipients | |||
| In such cases, SET Transmitters and | <bcp14>MUST</bcp14> protect the confidentiality of the SET contents. | |||
| SET Recipients MUST protect the confidentiality of the SET contents. | In some use cases, using TLS to secure the transmitted SETs will be | |||
| In some use cases, using TLS to secure the transmitted SETs will be suf | sufficient. In other use cases, encrypting the SET as described in | |||
| ficient. | JSON Web Encryption (JWE) <xref target="RFC7516" format="default"/> wil | |||
| In other use cases, | l also be required. | |||
| encrypting the SET as described in JWE <xref target="RFC7516"/> will al | The Event delivery endpoint <bcp14>MUST</bcp14> support at least TLS | |||
| so be required. | version 1.2 <xref target="RFC5246" format="default"/> and | |||
| The Event delivery endpoint MUST support at least TLS | <bcp14>SHOULD</bcp14> support the newest version of TLS that meets | |||
| version 1.2 <xref target="RFC5246"/> and SHOULD support the newest vers | its security requirements, which as of the time of this publication | |||
| ion | is TLS 1.3 <xref target="RFC8446" format="default"/>. The client | |||
| of TLS that meets its security requirements, | <bcp14>MUST</bcp14> perform a TLS/SSL server certificate check using | |||
| which as of the time of this publication is TLS 1.3 <xref target="RFC84 | DNS-ID <xref target="RFC6125" format="default"/> and/or DANE <xref | |||
| 46"/>. | target="RFC6698" format="default"/>. How a SET Recipient determines | |||
| The client MUST | the expected service identity to match the SET Transmitter's server | |||
| perform a TLS/SSL server certificate check using DNS-ID <xref target="R | certificate against is out of scope for this document. The | |||
| FC6125"/> | implementation security considerations for TLS in "Recommendations | |||
| and/or DANE <xref target="RFC6698"/>. | for Secure Use of Transport Layer Security (TLS) and Datagram | |||
| How a SET Recipient determines the expected service identity to match | Transport Layer Security (DTLS)" <xref target="RFC7525" | |||
| the SET | format="default"/> <bcp14>MUST</bcp14> be followed. | |||
| Transmitter's server certificate against is out of scope for this docu | </t> | |||
| ment. | ||||
| The implementation security considerations for TLS in | ||||
| "Recommendations for Secure Use of TLS and DTLS" <xref target="RFC7525" | ||||
| /> | ||||
| MUST be followed. | ||||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="AT" numbered="true" toc="default"> | ||||
| <section anchor="AT" title="Access Token Considerations"> | <name>Access Token Considerations</name> | |||
| <t> | <t> | |||
| If HTTP Authentication is performed using OAuth access tokens <xref tar | If HTTP Authentication is performed using OAuth access tokens <xref tar | |||
| get="RFC6749"/>, | get="RFC6749" format="default"/>, | |||
| implementers MUST take into account the threats | implementers <bcp14>MUST</bcp14> take into account the threats | |||
| and countermeasures documented in Section 8 of <xref | and countermeasures documented in <xref target="RFC7521" | |||
| target="RFC7521"/>.</t> | sectionFormat="of" section="8"/>.</t> | |||
| <section anchor="bearerConsiderations" numbered="true" toc="default"> | ||||
| <section anchor="bearerConsiderations" | <name>Bearer Token Considerations</name> | |||
| title="Bearer Token Considerations"> | ||||
| <t> | ||||
| Transmitting Bearer tokens <xref target="RFC6750"/> using TLS helps p | ||||
| revent their interception. | ||||
| </t> | ||||
| <t>Bearer tokens SHOULD have a limited lifetime that can be determined | <t> | |||
| Transmitting bearer tokens <xref target="RFC6750" format="default"/> | ||||
| using TLS helps prevent their interception. | ||||
| </t> | ||||
| <t>Bearer tokens <bcp14>SHOULD</bcp14> have a limited lifetime that ca | ||||
| n be determined | ||||
| directly or indirectly (e.g., by checking with a validation service) | directly or indirectly (e.g., by checking with a validation service) | |||
| by the service provider. By expiring tokens, clients are forced to | by the service provider. By expiring tokens, clients are forced to | |||
| obtain a new token (which usually involves re-authentication) for | obtain a new token (which usually involves re-authentication) for | |||
| continued authorized access. For example, in OAuth 2.0, a client MAY us e | continued authorized access. For example, in OAuth 2.0, a client <bcp14 >MAY</bcp14> use | |||
| an OAuth refresh token to obtain a new bearer token after authenticatin g | an OAuth refresh token to obtain a new bearer token after authenticatin g | |||
| to an authorization server, per Section 6 of <xref | to an authorization server, per <xref target="RFC6749" sectionFormat="o | |||
| target="RFC6749"/>.</t> | f" section="6"/>.</t> | |||
| <t>Implementations supporting OAuth bearer tokens need to factor in | ||||
| <t>Implementations supporting OAuth bearer tokens need to factor in | security considerations of this authorization method <xref target="RFC7 | |||
| security considerations of this authorization method <xref | 521" format="default"/>. Since security is only as good | |||
| target="RFC7521"/>. Since security is only as good | ||||
| as the weakest link, implementers also need to consider authentication | as the weakest link, implementers also need to consider authentication | |||
| choices coupled with OAuth bearer tokens. The security considerations | choices coupled with OAuth bearer tokens. The security considerations | |||
| of the default authentication method for OAuth bearer tokens, HTTP | of the default authentication method for OAuth bearer tokens, HTTP | |||
| Basic, are well documented in <xref | Basic, are well documented in <xref target="RFC7617" format="default"/> | |||
| target="RFC7617"/>, therefore implementers | ; therefore, implementers | |||
| are encouraged to prefer stronger authentication methods. | are encouraged to prefer stronger authentication methods. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="Privacy" numbered="true" toc="default"> | ||||
| <section anchor="Privacy" title="Privacy Considerations"> | <name>Privacy Considerations</name> | |||
| <t>SET Transmitters should attempt to deliver SETs that are | <t>SET Transmitters should attempt to deliver SETs that are | |||
| targeted to the specific business and | targeted to the specific business and | |||
| protocol needs of subscribers.</t> | protocol needs of subscribers.</t> | |||
| <t>When sharing personally identifiable information or information | <t>When sharing personally identifiable information or information | |||
| that is otherwise considered confidential to affected users, SET | that is otherwise considered confidential to affected users, SET | |||
| Transmitters and Recipients MUST have the appropriate legal agreements | Transmitters and Recipients <bcp14>MUST</bcp14> have the appropriate legal agreements | |||
| and user consent or terms of service in place. | and user consent or terms of service in place. | |||
| Furthermore, data that needs confidentiality protection MUST be encrypted, | Furthermore, data that needs confidentiality protection <bcp14>MUST</bcp14 > be encrypted, | |||
| at least with TLS | at least with TLS | |||
| and sometimes also using JSON Web Encryption (JWE) <xref target="RFC7516"/ >. | and sometimes also using JSON Web Encryption (JWE) <xref target="RFC7516" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In some cases, subject identifiers themselves may be considered sensitive | In some cases, subject identifiers themselves may be considered sensitive | |||
| information, such that their inclusion within a SET may be considered a v iolation | information, such that their inclusion within a SET may be considered a v iolation | |||
| of privacy. SET Issuers and SET Transmitters should consider the ramific ations of sharing a | of privacy. SET Issuers and SET Transmitters should consider the ramific ations of sharing a | |||
| particular subject identifier with a SET Recipient (e.g., whether doing s o could | particular subject identifier with a SET Recipient (e.g., whether doing s o could | |||
| enable correlation and/or de-anonymization of data) and choose appropriat e | enable correlation and/or de-anonymization of data) and choose appropriat e | |||
| subject identifiers for their use cases. | subject identifiers for their use cases. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="IANA" numbered="true" toc="default"> | ||||
| <section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t> | <t> | |||
| This specification requires no IANA actions. | This document has no IANA actions. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2119.xml' ?> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2818.xml' ?><!-- HTTP over TLS --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5246.xml' ?><!-- TLS 1.2 --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6125.xml' ?><!-- TLS Certs --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6698.xml' ?><!-- DANE --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7231.xml' ?><!-- HTTP Semantics --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | <references> | |||
| FC.7515.xml' ?><!-- JWS --> | <name>References</name> | |||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7516.xml' ?><!-- JWE --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7519.xml' ?><!-- JWT --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7521.xml' ?><!-- Client Auth Assertions --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | <references> | |||
| FC.7525.xml' ?><!-- TLS Recos --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml' ?><!-- RFC 2119 bis --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8259.xml' ?><!-- JSON --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8417.xml' ?><!-- SET --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8446.xml' ?><!-- TLS 1.3 --> | ||||
| <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference. | <name>Normative References</name> | |||
| I-D.draft-ietf-secevent-http-push-12.xml" ?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| </references> | FC.2119.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2818.xml"/> | ||||
| <references title="Informative References"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | .5246.xml"/> | |||
| FC.6202.xml' ?><!-- HTTP Long Polling --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
| FC.6749.xml' ?><!-- OAuth --> | .6125.xml"/> | |||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6750.xml' ?><!-- OAuth Bearer --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
| FC.7230.xml' ?><!-- HTTP Msg --> | .6698.xml"/> | |||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7235.xml' ?><!-- HTTP Auth --> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R FC.7617.xml' ?><!-- Basic Auth Update --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC .7231.xml"/> | |||
| </references> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC .7515.xml"/> | |||
| <section anchor="Unencrypted" title="Unencrypted Transport Considerations"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
| .7516.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .7519.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .7521.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .7525.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .8259.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .8417.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .8446.xml"/> | ||||
| <reference anchor="RFC8935" target="https://www.rfc-editor.org/info/rfc8935"> | ||||
| <front> | ||||
| <title>Push-Based Security Event Token (SET) Delivery Using HTTP</title> | ||||
| <author initials='A' surname='Backman' fullname='Annabelle Backman' role='editor | ||||
| '> | ||||
| </author> | ||||
| <author initials='M' surname='Jones' fullname='Michael Jones'> | ||||
| </author> | ||||
| <author initials='M' surname='Scurtescu' fullname='Marius Scurtescu'> | ||||
| </author> | ||||
| <author initials='M' surname='Ansari' fullname='Morteza Ansari'> | ||||
| </author> | ||||
| <author initials='A' surname='Nadalin' fullname='Anthony Nadalin'> | ||||
| </author> | ||||
| <date month='October' year='2020' /> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8935"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8935"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6202.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .6749.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .6750.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .7230.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .7235.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .7617.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="Unencrypted" numbered="true" toc="default"> | ||||
| <name>Unencrypted Transport Considerations</name> | ||||
| <t> | <t> | |||
| Earlier versions of this specification made the use of TLS optional | Earlier versions of this specification made the use of TLS optional | |||
| and described security and privacy considerations resulting from use | and described security and privacy considerations resulting from use | |||
| of unencrypted HTTP as the underlying transport. | of unencrypted HTTP as the underlying transport. | |||
| When the working group decided to mandate usage HTTP over TLS, | When the working group decided to mandate usage of HTTP over TLS, | |||
| it also decided to preserve the description of these considerations | it also decided to preserve the description of these considerations | |||
| in a non-normative manner. | in a non-normative manner. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The considerations for using unencrypted HTTP with this protocol | The considerations for using unencrypted HTTP with this protocol | |||
| are the same as those described in Appendix A of <xref target="I-D.ietf-s | are the same as those described in <xref | |||
| ecevent-http-push"/>, | target="RFC8935" sectionFormat="of" | |||
| and are therefore not repeated here. | section="A"/>, | |||
| </t> | ||||
| </section> | ||||
| <section anchor="Others" title="Other Streaming Specifications"> | ||||
| <t>[[ NOTE TO THE RFC EDITOR: This section to be removed prior to publicat | ||||
| ion ]]</t> | ||||
| <t> | ||||
| A number of pub/sub, queuing, and streaming systems were reviewed | ||||
| as possible solutions or as input to the current draft. | ||||
| These are listed in Appendix B of <xref target="I-D.ietf-secevent-http-pu | ||||
| sh"/>, | ||||
| and are therefore not repeated here. | and are therefore not repeated here. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="Acknowledgments" title="Acknowledgments"> | <section anchor="Acknowledgments" numbered="false" toc="default"> | |||
| <name>Acknowledgments</name> | ||||
| <t> | <t> | |||
| The editors would like to thank the members of the SCIM working group, wh | The editors would like to thank the members of the SCIM Working Group, | |||
| ich | which began discussions of provisioning events starting with | |||
| began discussions of provisioning events starting with draft-hunt-scim-no | draft-hunt-scim-notify-00 in 2015. We would like to thank <contact | |||
| tify-00 in 2015. | fullname="Phil Hunt"/> and the other authors of | |||
| We would like to thank Phil Hunt and the other the authors of draft-ietf- | draft-ietf-secevent-delivery-02, upon which this specification is | |||
| secevent-delivery-02, | based. We would like to thank the participants in the SecEvents | |||
| upon which this specification is based. | Working Group for their contributions to this specification. | |||
| We would like to thank the participants in the SecEvents | ||||
| working group for their contributions to this specification. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Additionally, we would like to thank the following individuals for their | Additionally, we would like to thank the following individuals for their | |||
| reviews of the specification: | reviews of this specification: | |||
| Roman Danyliw, | <contact fullname="Roman Danyliw"/>, | |||
| Martin Duke, | <contact fullname="Martin Duke"/>, | |||
| Benjamin Kaduk, | <contact fullname="Benjamin Kaduk"/>, | |||
| Erik Kline, | <contact fullname="Erik Kline"/>, | |||
| Murray Kucherawy, | <contact fullname="Murray Kucherawy"/>, | |||
| Warren Kumari, | <contact fullname="Warren Kumari"/>, | |||
| Barry Leiba, | <contact fullname="Barry Leiba"/>, | |||
| Mark Nottingham, | <contact fullname="Mark Nottingham"/>, | |||
| Alvaro Retana, | <contact fullname="Alvaro Retana"/>, | |||
| Yaron Sheffer, | <contact fullname="Yaron Sheffer"/>, | |||
| Valery Smyslov, | <contact fullname="Valery Smyslov"/>, | |||
| Robert Sparks, | <contact fullname="Robert Sparks"/>, | |||
| Éric Vyncke, | <contact fullname="Éric Vyncke"/>, | |||
| and | and | |||
| Robert Wilton. | <contact fullname="Robert Wilton"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="History" title="Change Log"> | ||||
| <t>[[ to be removed by the RFC Editor before publication as an RFC ]]</t> | ||||
| <t> | ||||
| Draft 00 - AB - Based on draft-ietf-secevent-delivery-02 with the | ||||
| following additions: | ||||
| <list style="symbols"> | ||||
| <t>Renamed to "Poll-Based SET Token Delivery Using HTTP"</t> | ||||
| <t>Removed references to the HTTP Push delivery method.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 01 - mbj: | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Addressed problems identified in my 18-Jul-18 review message titled | ||||
| "Issues for both the Push and Poll Specs". | ||||
| </t> | ||||
| <t> | ||||
| Changes to align terminology with RFC 8417, for instance, | ||||
| by using the already defined term SET Recipient rather than SET Recei | ||||
| ver. | ||||
| </t> | ||||
| <t> | ||||
| Applied editorial and minor normative corrections. | ||||
| </t> | ||||
| <t> | ||||
| Updated Marius' contact information. | ||||
| </t> | ||||
| <t> | ||||
| Begun eliminating redundancies between this specification and | ||||
| "Push-Based Security Event Token (SET) Delivery Using HTTP" | ||||
| <xref target="I-D.ietf-secevent-http-push"/>, | ||||
| referencing, rather that duplicating common normative text. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 02 - mbj: | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Removed vestigial language remaining from when the push and poll | ||||
| delivery methods were defined in a common specification. | ||||
| </t> | ||||
| <t> | ||||
| Replaced remaining uses of the terms Event Transmitter and Event Reci | ||||
| pient | ||||
| with the correct terms SET Transmitter and SET Recipient. | ||||
| </t> | ||||
| <t> | ||||
| Removed uses of the unnecessary term "Event Stream". | ||||
| </t> | ||||
| <t> | ||||
| Removed dependencies between the semantics of | ||||
| <spanx style="verb">maxEvents</spanx> and <spanx style="verb">returnI | ||||
| mmediately</spanx>. | ||||
| </t> | ||||
| <t> | ||||
| Said that PII in SETs is to be encrypted with TLS, JWE, or both. | ||||
| </t> | ||||
| <t> | ||||
| Corrected grammar and spelling errors. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 03 - mbj: | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Corrected uses of "attribute" to "member" when describing JSON object | ||||
| s. | ||||
| </t> | ||||
| <t> | ||||
| Further alignment with the push draft. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 04 - AB + mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Referenced SET Transmitter definition in http-push. | ||||
| </t> | ||||
| <t> | ||||
| Removed incorrect normative text regarding SET construction. | ||||
| </t> | ||||
| <t> | ||||
| Consolidated general out-of-scope items under Introduction. | ||||
| </t> | ||||
| <t> | ||||
| Removed unnecessary HTTP headers in examples and added Content-Type. | ||||
| </t> | ||||
| <t> | ||||
| Added Content-Language requirement for error descriptions, aligning | ||||
| with http-push. | ||||
| </t> | ||||
| <t> | ||||
| Stated that bearer tokens SHOULD have a limited lifetime. | ||||
| </t> | ||||
| <t> | ||||
| Minor editorial fixes. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 05 - AB + mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Added normative text defining how to respond to invalid poll request | ||||
| s. | ||||
| </t> | ||||
| <t> | ||||
| Addressed shepherd comments by Yaron Sheffer. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 06 - mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Addressed nits identified by the idnits tool. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 07 - mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Addressed area director review comments by Benjamin Kaduk. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 08 - mbj + AB | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Corrected editorial nits. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 09 - AB | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Addressed area director review comments by Benjamin Kaduk: | ||||
| <list style="symbols"> | ||||
| <t>Added text clarifying that determining the SET Recipient's serv | ||||
| ice identity is out of scope.</t> | ||||
| <t>Removed unelaborated reference to use of authentication to prev | ||||
| ent DoS attacks.</t> | ||||
| </list> | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 10 - mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Addressed SecDir review comments by Valery Smyslov | ||||
| on draft-ietf-secevent-http-push-10 that also applied here. | ||||
| </t> | ||||
| <t> | ||||
| Addressed IETF last call comments by Mark Nottingham. | ||||
| </t> | ||||
| <t> | ||||
| Addressed GenArt review comments by Robert Sparks. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 11 - mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Revised to unambiguously require the use of TLS, | ||||
| while preserving descriptions of precautions needed for non-TLS use i | ||||
| n an appendix. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Draft 12 - mbj | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Addressed IESG comments. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 155 change blocks. | ||||
| 803 lines changed or deleted | 618 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||