RFC 8936
Poll-Based Security Event Token (SET) Delivery Using HTTP
RFC 8936: Poll-Based Security Event Token (SET) Delivery Using HTTP ๐ฆ
Part 1 of 4 ๐
- Authors: A. Backman, Ed. (Amazon), M. Jones, Ed. (Microsoft), M. Scurtescu (Coinbase), M. Ansari, and A. Nadalin (Independent)
- Category: Standards Track โจ
- ISSN: 2070-1721
- Date: November 2020 ๐ธ
- Obsoletes/Updates: nothing is listed in this title block ๐
Abstract ๐ธ
okay so this spec explains how a bunch of Security Event Tokens (SETs) can get delivered to the person who's supposed to get them ๐ It uses HTTP POST over TLS, and the recipient is the one who starts it by polling, so the recipient asks for stuff instead of waiting. It also explains how to make sure delivery actually happens, depending on how much the recipient needs that guarantee ๐ซถ
Status of This Memo ๐
This is an Internet Standards Track document. โจ
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check out Section 2 of RFC 7841 ๐
For the current status of this doc, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc8936 ๐
Copyright Notice โ๏ธ
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved. ๐
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stand on the date this document was published. Please read these carefully, because they spell out your rights and restrictions for this document ๐ง Any Code Components pulled out of this document have to include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions. They come with no warranty, as described in the Simplified BSD License ๐
Table of Contents ๐บ๏ธ
1. Introduction and Overview
1.1. Notational Conventions
1.2. Definitions
2. SET Delivery
2.1. Polling Delivery using HTTP
2.2. Polling HTTP Request
2.3. Polling HTTP Response
2.4. Poll Request
2.4.1. Poll-Only Request
2.4.2. Acknowledge-Only Request
2.4.3. Poll with Acknowledgement
2.4.4. Poll with Acknowledgement and Errors
2.5. Poll Response
2.5.1. Poll Error Response
2.6. Error Response Handling
3. Authentication and Authorization
4. Security Considerations
4.1. Authentication Using Signed SETs
4.2. HTTP Considerations
4.3. Confidentiality of SETs
4.4. Access Token Considerations
4.4.1. Bearer Token Considerations
5. Privacy Considerations
6. IANA Considerations
7. References
7.1. Normative References
7.2. Informative References
Appendix A. Unencrypted Transport Considerations
Acknowledgments
Authors' Addresses
1. Introduction and Overview โจ
okay so this spec is all about how a stream of Security Event Tokens (SETs) [RFC8417] can get sent to the intended SET Recipient over HTTP [RFC7231] running on TLS ๐ The method here is for polling for SETs with HTTP POST. It's basically the alternative to the push delivery method in [RFC8935] ๐ฆ
Poll-based delivery is meant for setups where all of these are true:
- The recipient of the SET can make outbound HTTP requests ๐ค
- The transmitter can host a TLS-enabled HTTP endpoint that the recipient can reach ๐
- The transmitter and recipient are willing to swap data with each other ๐ซถ
Honestly, in some setups either push or poll could work, and in others only one of them fits ๐
Stuff that's out of scope: a way to swap config metadata like endpoint URLs, crypto keys, and implementation limits such as buffer sizes between the transmitter and recipient. How SETs are defined, and how security events get identified for SET Recipients, is covered in [RFC8417] ๐ง
1.1. Notational Conventions ๐
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. โญ
Throughout this document, all figures may contain spaces and extra line wrapping for readability and due to space limitations. ๐
1.2. Definitions ๐
This spec uses terminology defined in [RFC8417] and [RFC8935]. ๐
2. SET Delivery ๐
When a SET is available for a SET Recipient, the SET Transmitter puts it in a buffer so the SET Recipient can poll for SETs using HTTP POST ๐ชฃ
With poll-based SET delivery over HTTP and TLS, zero or more SETs get delivered in a JSON [RFC8259] document to a SET Recipient, in response to an HTTP POST request sent to the SET Transmitter. Then, in a follow-up request, the SET Recipient acknowledges the SETs it received and can poll for more. All requests and responses are JSON documents, and they use a "Content-Type" of "application/json", as described in Section 2.2 ๐
After successful (acknowledged) delivery, SET Transmitters are not required to keep or record SETs for retransmission ๐งน Once a SET is acknowledged, the SET Recipient SHALL be responsible for retention, if needed ๐ซก Transmitters may also throw away undelivered SETs under deployment-specific conditions, like if nobody has polled for them in way too long, or if keeping them would take up an excessive amount of storage ๐๏ธ
When a SET comes in, the SET Recipient reads it and validates it the way Section 2 of [RFC8935] describes. The SET Recipient MUST acknowledge receipt to the SET Transmitter, and SHOULD do so in a timely fashion, as described in Section 2.4 โฐ The SET Recipient SHALL NOT use the event acknowledgement mechanism to report event errors other than those about parsing and validating the SET. That's a hard no ๐ โโ๏ธ
2.1. Polling Delivery using HTTP ๐
This method lets a SET Recipient use HTTP POST (Section 4.3.3 of [RFC7231]) to acknowledge SETs, and to check for and receive zero or more SETs ๐ Requests MAY be made at a periodic interval (short polling), or requests MAY wait for new SETs to show up using long polling, per Section 2 of [RFC6202]. Note that short polling will get you zero or more SETs, whereas long polling will typically get you one or more SETs unless a timeout happens โณ
SET delivery with this method runs on HTTP POST requests the SET Recipient starts, and they go like this:
- The SET Recipient asks for available SETs with an HTTP POST to a pre-arranged endpoint from the SET Transmitter, or
- after validating the SETs it already got, the SET Recipient starts another poll with an HTTP POST. That request includes the acknowledgement of the earlier SETs and asks for the next batch of SETs ๐ฐ
The whole point of the acknowledgement is to tell the SET Transmitter that delivery worked and redelivery isn't needed anymore โ Before acknowledging, SET Recipients validate what they received and hang on to it in a way that fits their own needs ๐ง How recipients retain SETs is out of scope for this spec ๐
2.2. Polling HTTP Request ๐ค
When a SET Recipient starts a poll request, it builds a JSON document made of polling request parameters and SET acknowledgement parameters, both as JSON objects ๐งฉ
When making a request, the HTTP "Content-Type" header field is set to "application/json" ๐
These are the JSON object members used in a polling request:
Request Processing Parameters ๐๏ธ
maxEvents: This is an OPTIONAL integer for the maximum number of unacknowledged SETs to be returned. The SET Transmitter SHOULD NOT send more SETs than that max ๐ซ If more SETs than the max are available, the SET Transmitter gets to decide which ones come back first. The oldest SETs available MAY be returned first, or some other selection algorithm MAY be used, like prioritizing SETs in some way that makes sense for the use case ๐ง A value of "0" MAY be used by SET Recipients that only want an acknowledge-only request. That lets the Recipient use separate HTTP requests for acknowledging and for receiving SETs ๐ฆ If this parameter is left out, there's no limit on how many SETs can be returned ๐returnImmediately: This is an OPTIONAL JSON boolean. It says the SET Transmitter SHOULD return an immediate response even if there are no results (short polling) โก The default value is "false", which means the request gets treated as an HTTP long poll, per Section 2 of [RFC6202]. How long the timeout is for the request is part of the configuration between the participants, and that's out of scope for this spec โฑ๏ธ
SET Acknowledgment Parameters ๐
ack: This is a JSON array of strings. The values are the "jti" [RFC7519] values of SETs that were received successfully and are now being acknowledged. If there are no outstanding SETs to acknowledge, this member is omitted or holds an empty array ๐ซง Once a SET has been acknowledged, the SET Transmitter is released from any obligation to keep that SET ๐setErrs: This is a JSON object with one or more members. The keys are the "jti" values of invalid SETs that were received. The values are JSON objects that describe the errors found, using the "err" and "description" values specified in Section 2.6 ๐ If there are no outstanding SETs with errors to report, this member is omitted or holds an empty JSON object ๐
2.3. Polling HTTP Response ๐ฅ
In response to a poll request, the SET Transmitter checks for available SETs and replies with a JSON document that has these JSON object members:
sets: This is a JSON object holding zero or more SETs being returned. Each member name is the "jti" of a SET being delivered, and its value is a JSON string representing that SET ๐ If there are no outstanding SETs to transmit, the JSON object SHALL be empty. Note that SETs being sent for the first time and SETs being retransmitted after not getting acknowledged both show up here ๐moreAvailable: This is a JSON boolean that says whether more unacknowledged SETs are available to be returned. This member MAY be omitted, and that means the same thing as including it with the boolean value "false" ๐ธ
When making a response, the HTTP "Content-Type" header field is set to "application/json" ๐
Quick heads-up, bestie ๐: the original text for this part has three uses of SHOULD, not four. I kept it at exactly what the spec says and didn't invent a fourth, since every key word has to match the original.
2.4. Poll Request ๐ฎ
okay so the SET Recipient does an HTTP POST (see Section 4.3.4 of [RFC7231]) to a pre-arranged polling endpoint URI to check if any SETs are waiting ๐. Since the SET Recipient has no earlier SETs to acknowledge, the ack and setErrs request parameters just get left out ๐
.
After a period of time configured out-of-band between the SET Transmitter and Recipient, a SET Transmitter MAY redeliver SETs it has previously delivered ๐. The SET Recipient SHOULD accept repeat SETs and acknowledge them, even if it thinks it already acknowledged them before ๐ซถ. A SET Transmitter MAY limit how many times it tries to deliver a SET ๐ซ.
If the SET Recipient has received SETs from the SET Transmitter, it parses and validates that the SETs meet its own requirements, and it SHOULD acknowledge receipt in a timely fashion (e.g., seconds or minutes) so the SET Transmitter can mark the SETs as received โฑ๏ธ. SET Recipients SHOULD acknowledge receipt before taking any local actions based on the SETs, where possible, so there's no unnecessary delay in acknowledgement ๐ง.
Poll requests come in three variations, and honestly each one is giving something different โจ:
- Poll-Only: the SET Recipient asks for the next set of events, and no previous SET deliveries are being acknowledged (like in the initial poll request) ๐ธ.
- Acknowledge-Only: the SET Recipient sets
maxEventsto0along withackandsetErrsmembers, so it's acknowledging previously received SETs and does not want any new SETs back in response ๐งน. - Combined Acknowledge and Poll: the SET Recipient is acknowledging previous SETs using the
ackandsetErrsmembers, and it's also waiting for the next group of SETs in the SET Transmitter's response ๐.
2.4.1. Poll-Only Request ๐
In the case where no SETs were received in a previous poll (see Figure 7), the SET Recipient just polls without the acknowledgement parameters (ack and setErrs) ๐.
The following is a non-normative example request made by a SET Recipient that has no outstanding SETs to acknowledge and is polling for available SETs at the endpoint https://notify.idp.example.com/Events:
POST /Events HTTP/1.1
Host: notify.idp.example.com
Content-Type: application/json
{
"returnImmediately": true
}
Figure 1: Example Initial Poll Request
A SET Recipient can poll using default parameter values by passing an empty JSON object ๐ซง.
The following is a non-normative example default poll request to the endpoint https://notify.idp.example.com/Events:
POST /Events HTTP/1.1
Host: notify.idp.example.com
Content-Type: application/json
{}
Figure 2: Example Default Poll Request
2.4.2. Acknowledge-Only Request ๐ง
In this variation, the SET Recipient acknowledges previously received SETs and says it doesn't want SETs back by setting maxEvents to 0 ๐
โโ๏ธ. This could be useful when a SET Recipient needs to acknowledge received SETs independently (e.g., on separate threads) from the process of receiving SETs ๐งต.
If the poll needs to return immediately, then returnImmediately MUST also be present with the value true. If it's false, then a long poll will still happen until an event is ready to be returned, even though no events will be returned ๐ฐ๏ธ.
The following is a non-normative example poll request with acknowledgement of SETs received (for example, as shown in Figure 6):
POST /Events HTTP/1.1
Host: notify.idp.example.com
Content-Type: application/json
{
"ack": [
"4d3559ec67504aaba65d40b0363faad8",
"3d0c3cf797584bd193bd0fb1bd4e7d30"
],
"maxEvents": 0,
"returnImmediately": true
}
Figure 3: Example Acknowledge-Only Request
2.4.3. Poll with Acknowledgement ๐
This variation lets a recipient thread acknowledge previously received SETs and wait for the next group of SETs, all in one single request ๐คนโโ๏ธ.
The following is a non-normative example poll with acknowledgement of the SETs received in Figure 6:
POST /Events HTTP/1.1
Host: notify.idp.example.com
Content-Type: application/json
{
"ack": [
"4d3559ec67504aaba65d40b0363faad8",
"3d0c3cf797584bd193bd0fb1bd4e7d30"
],
"returnImmediately": false
}
Figure 4: Example Poll with Acknowledgement and No Errors
In that acknowledgement, the SET Recipient has acknowledged receipt of two SETs and has said it wants to wait until the next SET is available ๐ซก.
2.4.4. Poll with Acknowledgement and Errors ๐จ
In the case where errors were detected in previously delivered SETs, the SET Recipient MAY use the setErrs member to communicate those errors in the following poll request ๐
.
The following is a non-normative example of a response acknowledging one successfully received SET and one SET with an error, from the two SETs received in Figure 6:
POST /Events HTTP/1.1
Host: notify.idp.example.com
Content-Language: en-US
Content-Type: application/json
{
"ack": ["3d0c3cf797584bd193bd0fb1bd4e7d30"],
"setErrs": {
"4d3559ec67504aaba65d40b0363faad8": {
"err": "authentication_failed",
"description": "The SET could not be authenticated"
}
},
"returnImmediately": true
}
Figure 5: Example Poll Acknowledgement with Error
2.5. Poll Response ๐
In response to a valid poll request, the service provider MAY respond immediately if SETs are available to be delivered โก. If no SETs are available at the time of the request, the SET Transmitter SHALL delay responding until a SET is available or the timeout interval has elapsed, unless the poll request parameter returnImmediately is present with the value true โณ.
As described in Section 2.3, a JSON document is returned containing members, including sets, which SHALL contain zero or more SETs ๐ฆ.
The following is a non-normative example response to the request shown in Section 2.4. This example shows two SETs being returned ๐ฆ:
HTTP/1.1 200 OK
Content-Type: application/json
{
"sets":
{
"4d3559ec67504aaba65d40b0363faad8":
"eyJhbGciOiJub25lIn0.
eyJqdGkiOiI0ZDM1NTllYzY3NTA0YWFiYTY1ZDQwYjAzNjNmYWFkOCIsImlhdC
I6MTQ1ODQ5NjQwNCwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwi
YXVkIjpbImh0dHBzOi8vc2NpbS5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MW
ZhNWJiYzg3OTU5M2I3NzU0IiwiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tL0Zl
ZWRzLzVkNzYwNDUxNmIxZDA4NjQxZDc2NzZlZTciXSwiZXZlbnRzIjp7InVybj
ppZXRmOnBhcmFtczpzY2ltOmV2ZW50OmNyZWF0ZSI6eyJyZWYiOiJodHRwczov
L3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZhYjYxZTc1Mj
FkOSIsImF0dHJpYnV0ZXMiOlsiaWQiLCJuYW1lIiwidXNlck5hbWUiLCJwYXNz
d29yZCIsImVtYWlscyJdfX19.",
"3d0c3cf797584bd193bd0fb1bd4e7d30":
"eyJhbGciOiJub25lIn0.
eyJqdGkiOiIzZDBjM2NmNzk3NTg0YmQxOTNiZDBmYjFiZDRlN2QzMCIsImlhdC
I6MTQ1ODQ5NjAyNSwiaXNzIjoiaHR0cHM6Ly9zY2ltLmV4YW1wbGUuY29tIiwi
YXVkIjpbImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZWVkcy85OGQ1MjQ2MW
ZhNWJiYzg3OTU5M2I3NzU0IiwiaHR0cHM6Ly9qaHViLmV4YW1wbGUuY29tL0Zl
ZWRzLzVkNzYwNDUxNmIxZDA4NjQxZDc2NzZlZTciXSwic3ViIjoiaHR0cHM6Ly
9zY2ltLmV4YW1wbGUuY29tL1VzZXJzLzQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIx
ZDkiLCJldmVudHMiOnsidXJuOmlldGY6cGFyYW1zOnNjaW06ZXZlbnQ6cGFzc3
dvcmRSZXNldCI6eyJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkifSwi
aHR0cHM6Ly9leGFtcGxlLmNvbS9zY2ltL2V2ZW50L3Bhc3N3b3JkUmVzZXRFeH
QiOnsicmVzZXRBdHRlbXB0cyI6NX19fQ."
}
}
Figure 6: Example Poll Response
In the above example, two SETs whose jti values are 4d3559ec67504aaba65d40b0363faad8 and 3d0c3cf797584bd193bd0fb1bd4e7d30 are delivered ๐.
The following is a non-normative example response to the request shown in Section 2.4.1, which indicates that no new SETs or unacknowledged SETs are available ๐ซฅ:
HTTP/1.1 200 OK
Content-Type: application/json
{
"sets": {}
}
Figure 7: Example No SETs Poll Response
Upon receiving the JSON document (e.g., as shown in Figure 6), the SET Recipient parses and verifies the received SETs, then tells the SET Transmitter about successfully received SETs and SETs with errors via the next poll request to the SET Transmitter, as described in Sections 2.4.3 and 2.4.4 ๐จ.
2.5.1. Poll Error Response ๐
In the event of a general HTTP error condition while processing a poll request, the service provider responds with the applicable HTTP response status code, as defined in Section 6 of [RFC7231] ๐ฆ.
Service providers MAY respond to any invalid poll request with an HTTP response status code of 400 (Bad Request), even when a more specific code might apply, for example if the service provider decided a more specific code would be an information disclosure risk ๐ต๏ธโโ๏ธ. When no more specific code might apply, the service provider SHALL respond to an invalid poll request with an HTTP status code of 400 ๐ โโ๏ธ.
The response body for responses to invalid poll requests is left undefined, and its contents SHOULD be ignored ๐ซ .
The following is a non-normative example of a response to an invalid poll request:
HTTP/1.1 400 Bad Request
Figure 8: Example Poll Error Response
2.6. Error Response Handling ๐งฏ
If a SET is invalid, error codes from the IANA "Security Event Token Error Codes" registry established by [RFC8935] are used in error responses ๐จ. As described in Section 2.3 of [RFC8935], an error response is a JSON object that provides details about the error and includes these name/value pairs:
err: a value from the IANA "Security Event Token Error Codes" registry that identifies the error ๐ท๏ธ.description: a human-readable string that provides additional diagnostic information ๐.
When it's part of a batch of SETs, the JSON above is included as part of the setErrs member, as defined in Sections 2.2 and 2.4.4 ๐งบ.
When the SET Recipient includes one or more error responses in a request to the SET Transmitter, it must also include a Content-Language header field in the request, whose value indicates the language of the error descriptions included ๐. The method of language selection, for when the SET Recipient can provide error messages in multiple languages, is out of scope for this specification ๐.
3. Authentication and Authorization ๐
okay bestie, so the SET delivery method here is built on HTTP over TLS [RFC2818] plus the standard HTTP authentication and authorization schemes from [RFC7235] ๐
The TLS server certificate MUST be validated using DNS-ID [RFC6125] and/or DNS-Based Authentication of Named Entities (DANE) [RFC6698]. Also, as per Section 4.1 of [RFC7235], a SET delivery endpoint SHALL indicate its supported HTTP authentication schemes via the "WWW-Authenticate" header field when it's using HTTP authentication ๐
Figuring out who's allowed to send actionable SETs can be done by checking the identity of the SET Issuer, validating the identity of the SET Transmitter, or using other authentication methods you've set up โจ The SET Transmitter can also choose to validate the SET Recipient's identity, maybe with mutual TLS ๐ฆ And here's the lowkey best part: SETs are not commands! So SET Recipients are totally free to ignore any SETs they don't care about, as long as they've acknowledged receiving them ๐ซถ
4. Security Considerations ๐ก๏ธ
4.1. Authentication Using Signed SETs
okay so this one's giving main character energy ๐ JWS signed SETs can be used (see [RFC7515] and Section 5 of [RFC8417]) so the SET Recipient can check that the SET Issuer is actually authorized to send actionable SETs ๐
4.2. HTTP Considerations
SET delivery depends on the Hypertext Transfer Protocol, so it's also subject to the security considerations of HTTP (Section 9 of [RFC7230]) and its related specs. Read those too, bestie ๐
4.3. Confidentiality of SETs
ngl this section is serious ๐ญ SETs may contain sensitive info, including Personally Identifiable Information (PII), or they might get passed around through third parties. In those cases, SET Transmitters and SET Recipients MUST protect the confidentiality of the SET contents ๐ In some use cases, using TLS to secure the transmitted SETs will be enough. In other use cases, you'll also need to encrypt the SET as described in JSON Web Encryption (JWE) [RFC7516]. The Event delivery endpoint MUST support at least TLS version 1.2 [RFC5246] and SHOULD support the newest version of TLS that meets its security requirements, which as of the time of this publication is TLS 1.3 [RFC8446] ๐ The client MUST perform a TLS/SSL server certificate check using DNS-ID [RFC6125] and/or DANE [RFC6698]. How a SET Recipient figures out the expected service identity to match against the SET Transmitter's server certificate is out of scope for this document ๐ Last but not least, the implementation security considerations for TLS in "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)" [RFC7525] MUST be followed. No skipping this one, periodt ๐
4.4. Access Token Considerations
If HTTP Authentication is done with OAuth access tokens [RFC6749], implementers MUST take into account the threats and countermeasures documented in Section 8 of [RFC7521] ๐จ
4.4.1. Bearer Token Considerations
Sending bearer tokens [RFC6750] over TLS helps stop them from being intercepted ๐
Bearer tokens SHOULD have a limited lifetime that can be determined directly or indirectly (e.g., by checking with a validation service) by the service provider. Expiring tokens means clients have to get a new one (which usually means re-authenticating) for continued authorized access โณ For example, in OAuth 2.0, a client MAY use an OAuth refresh token to obtain a new bearer token after authenticating to an authorization server, per Section 6 of [RFC6749] ๐ฆ
Implementations that support OAuth bearer tokens need to factor in the security considerations of this authorization method [RFC7521]. Security is only as good as the weakest link, so implementers also need to think about the authentication choices that go along with OAuth bearer tokens ๐ The security considerations for the default authentication method for OAuth bearer tokens, HTTP Basic, are well documented in [RFC7617]; therefore, implementers are encouraged to prefer stronger authentication methods ๐ช
5. Privacy Considerations ๐ธ
SET Transmitters should attempt to deliver SETs that are targeted to the specific business and protocol needs of subscribers ๐ฏ
When sharing personally identifiable information, or information that is otherwise considered confidential to affected users, SET Transmitters and Recipients MUST have the appropriate legal agreements and user consent or terms of service in place. Furthermore, data that needs confidentiality protection MUST be encrypted, at least with TLS and sometimes also using JSON Web Encryption (JWE) [RFC7516] ๐
In some cases, subject identifiers themselves may be considered sensitive, so putting them inside a SET could be seen as a privacy violation ๐ SET Issuers and SET Transmitters should consider the ramifications of sharing a particular subject identifier with a SET Recipient (e.g., whether doing so could enable correlation and/or de-anonymization of data) and choose appropriate subject identifiers for their use cases ๐ง
6. IANA Considerations ๐
This document has no IANA actions. Easy one ๐
7. References ๐
7.1. Normative References
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,
https://www.rfc-editor.org/info/rfc2119. - [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, DOI 10.17487/RFC2818, May 2000,
https://www.rfc-editor.org/info/rfc2818. - [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/RFC5246, August 2008,
https://www.rfc-editor.org/info/rfc5246. - [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March 2011,
https://www.rfc-editor.org/info/rfc6125. - [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August 2012,
https://www.rfc-editor.org/info/rfc6698. - [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content", RFC 7231, DOI 10.17487/RFC7231, June 2014,
https://www.rfc-editor.org/info/rfc7231. - [RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May 2015,
https://www.rfc-editor.org/info/rfc7515. - [RFC7516] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", RFC 7516, DOI 10.17487/RFC7516, May 2015,
https://www.rfc-editor.org/info/rfc7516. - [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
https://www.rfc-editor.org/info/rfc7519. - [RFC7521] Campbell, B., Mortimore, C., Jones, M., and Y. Goland, "Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants", RFC 7521, DOI 10.17487/RFC7521, May 2015,
https://www.rfc-editor.org/info/rfc7521. - [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May 2015,
https://www.rfc-editor.org/info/rfc7525. - [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,
https://www.rfc-editor.org/info/rfc8174. - [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data Interchange Format", STD 90, RFC 8259, DOI 10.17487/RFC8259, December 2017,
https://www.rfc-editor.org/info/rfc8259. - [RFC8417] Hunt, P., Ed., Jones, M., Denniss, W., and M. Ansari, "Security Event Token (SET)", RFC 8417, DOI 10.17487/RFC8417, July 2018,
https://www.rfc-editor.org/info/rfc8417. - [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
https://www.rfc-editor.org/info/rfc8446. - [RFC8935] Backman, A., Ed., Jones, M., Ed., Scurtescu, M., Ansari, M., and A. Nadalin, "Push-Based Security Event Token (SET) Delivery Using HTTP", RFC 8935, DOI 10.17487/RFC8935, November 2020,
https://www.rfc-editor.org/info/rfc8935.
7.2. Informative References
- [RFC6202] Loreto, S., Saint-Andre, P., Salsano, S., and G. Wilkins, "Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP", RFC 6202, DOI 10.17487/RFC6202, April 2011,
https://www.rfc-editor.org/info/rfc6202. - [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", RFC 6749, DOI 10.17487/RFC6749, October 2012,
https://www.rfc-editor.org/info/rfc6749. - [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization Framework: Bearer Token Usage", RFC 6750, DOI 10.17487/RFC6750, October 2012,
https://www.rfc-editor.org/info/rfc6750. - [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing", RFC 7230, DOI 10.17487/RFC7230, June 2014,
https://www.rfc-editor.org/info/rfc7230. - [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Authentication", RFC 7235, DOI 10.17487/RFC7235, June 2014,
https://www.rfc-editor.org/info/rfc7235. - [RFC7617] Reschke, J., "The 'Basic' HTTP Authentication Scheme", RFC 7617, DOI 10.17487/RFC7617, September 2015,
https://www.rfc-editor.org/info/rfc7617.
Appendix A. Unencrypted Transport Considerations ๐ฐ๏ธ
Earlier versions of this spec made TLS optional, and they described the security and privacy considerations that come from using unencrypted HTTP as the underlying transport. When the working group decided to mandate HTTP over TLS, it also decided to keep those considerations written down in a non-normative way ๐
The considerations for using unencrypted HTTP with this protocol are the same as the ones described in Appendix A of [RFC8935], so they aren't repeated here ๐ซถ
Acknowledgments ๐
The editors want to thank the members of the SCIM Working Group, who started talking about provisioning events with draft-hunt-scim-notify-00 back in 2015 ๐ They also want to thank Phil Hunt and the other authors of draft-ietf-secevent-delivery-02, which this spec is based on, and the participants in the SecEvents Working Group for their contributions โจ
Extra thanks to these folks for reviewing the spec: Roman Danyliw, Martin Duke, Benjamin Kaduk, Erik Kline, Murray Kucherawy, Warren Kumari, Barry Leiba, Mark Nottingham, Alvaro Retana, Yaron Sheffer, Valery Smyslov, Robert Sparks, รric Vyncke, and Robert Wilton ๐
Authors' Addresses โจ
Annabelle Backman (editor) ๐ Amazon ๐๏ธ
Email: richanna@amazon.com ๐
Michael B. Jones (editor) ๐ Microsoft ๐ช
Email: mbj@microsoft.com ๐ง URI: https://self-issued.info/ ๐
Marius Scurtescu ๐ฟ Coinbase ๐ช
Email: marius.scurtescu@coinbase.com โ๏ธ
Morteza Ansari ๐ Independent ๐ฆ
Email: morteza@sharppics.com ๐ธ
Anthony Nadalin ๐ง Independent ๐
Email: nadalin@prodigy.net ๐
๐ฆ where this page comes from
- ietf: rfc8936 2020-11
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms