RFC 8936

Poll-Based Security Event Token (SET) Delivery Using HTTP

๐Ÿ“… published November 2020, from ietf

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 (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 maxEvents to 0 along with ack and setErrs members, 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 ack and setErrs members, 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

7.2. Informative References


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