[Docs] [txt|pdf|xml|html] [Tracker] [Email] [Diff1] [Diff2] [Nits]

Versions: (draft-hunt-secevent-distribution) 00

Network Working Group                                       P. Hunt, Ed.
Internet-Draft                                                    Oracle
Intended status: Standards Track                        October 29, 2017
Expires: May 2, 2018


         SET Security Event Stream Management and Provisioning
                   draft-hunt-secevent-stream-mgmt-00

Abstract

   This specification defines a "control plane" service which enables a
   client (e.g. an Event Receiver) to establish, monitor, and manage a
   Security Event Token Stream.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on May 2, 2018.

Copyright Notice

   Copyright (c) 2017 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) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.





Hunt                       Expires May 2, 2018                  [Page 1]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


Table of Contents

   1.  Introduction and Overview . . . . . . . . . . . . . . . . . .   2
     1.1.  Notational Conventions  . . . . . . . . . . . . . . . . .   3
     1.2.  Definitions . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Stream Monitoring and Configuration Retrieval . . . . . . . .   4
     2.1.  Event Stream Configuration Attributes . . . . . . . . . .   5
     2.2.  Checking Stream Configuration and Stream State  . . . . .   8
     2.3.  Event Stream State Model  . . . . . . . . . . . . . . . .  12
   3.  Stream Management and Provisioning  . . . . . . . . . . . . .  14
     3.1.  Creating An Event Stream  . . . . . . . . . . . . . . . .  14
     3.2.  Updating An Event Stream  . . . . . . . . . . . . . . . .  16
       3.2.1.  Update using HTTP PUT . . . . . . . . . . . . . . . .  17
       3.2.2.  Update using HTTP PATCH . . . . . . . . . . . . . . .  19
   4.  Models for Managing Stream Subjects . . . . . . . . . . . . .  21
     4.1.  General Considerations for Managing Subjects  . . . . . .  22
     4.2.  Subjects as Part of Stream Configuration  . . . . . . . .  22
       4.2.1.  Checking Subject Membership . . . . . . . . . . . . .  22
       4.2.2.  Adding and Removing Subjects to a Stream  . . . . . .  25
     4.3.  Subjects as Members of a Group  . . . . . . . . . . . . .  27
       4.3.1.  Checking Membership . . . . . . . . . . . . . . . . .  28
       4.3.2.  Adding and Removing SCIM Users to a Group . . . . . .  29
     4.4.  Subjects as a Resource (aka POST Profile) . . . . . . . .  31
       4.4.1.  Adding A Subject to a Stream  . . . . . . . . . . . .  33
       4.4.2.  Querying for Subject in Event Streams . . . . . . . .  34
       4.4.3.  Removing a Subject from an Event Stream . . . . . . .  35
   5.  Event Stream Verification . . . . . . . . . . . . . . . . . .  35
   6.  Privacy Considerations  . . . . . . . . . . . . . . . . . . .  37
     6.1.  Subject Management  . . . . . . . . . . . . . . . . . . .  37
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .  37
     7.1.  Multi-Party Access to Streams . . . . . . . . . . . . . .  37
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  38
     8.1.  Registration of Verify Event URI  . . . . . . . . . . . .  38
     8.2.  SCIM Schema Registration  . . . . . . . . . . . . . . . .  38
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  39
     9.1.  Normative References  . . . . . . . . . . . . . . . . . .  39
     9.2.  Informative References  . . . . . . . . . . . . . . . . .  39
   Appendix A.  Event Stream Resource Type and Schema Definitions  .  40
   Appendix B.  Acknowledgments  . . . . . . . . . . . . . . . . . .  47
   Appendix C.  Change Log . . . . . . . . . . . . . . . . . . . . .  47
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  47

1.  Introduction and Overview

   This specification defines a "Control Plane" service that defines how
   an Event Receiver or its agent may provision, monitor, and manage the
   configuration of an Event Stream that delivers Security Event Tokens
   (see [I-D.ietf-secevent-token]) using delivery methods such as



Hunt                       Expires May 2, 2018                  [Page 2]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   specified in the SET Delivery Using HTTP Specification (see
   [I-D.ietf-secevent-delivery]).

   The specification defines the common metadata Event Transmitters and
   Receivers use to describe HTTP service endpoints, methods, optional
   signing and encryption modes, as well as the type and content of SETs
   delivered over a Stream.  The specification defines how the Event
   Receiver parties may review and update the current configuration and
   confirm operational delivery status using HTTP over TLS.

   The mandatory part of this specification (see Section 2) uses a
   profile of SCIM (see [RFC7643] and [RFC7644]) to implement Event
   Stream configuration, monitoring and retrieval using HTTP GET
   Section 4.3.1 [RFC7231].  Additionally, SCIM MAY be used to manage
   and update Event Stream configuration and operational state.

   The choice os SCIM has been recommended as it is intended as a
   general purpose layer that can be applied to many underlying systems.
   SCIM's extensibility mechanisms to define data types (resource types)
   enable it to be flexibly used by specifications intenting to profile
   SET Tokens and Delivery for use in many ways.

   For the purposes of the Control Plane, SCIM Section 2 [RFC7643]
   provides the JSON data definitions that enable the Control Plane to
   allow service providers and clients to negotiate attributes and
   resource types used in different SET Profiles.  This includes
   declarations and discovery of attribute types, mutability,
   cardinality, and returnability that MAY differ between deployments
   and SET Event type profiles.  For HTTP protocol handling and error
   signaling, the processing rules in [RFC7644] SHALL be applied.

1.1.  Notational Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119] . These
   keywords are capitalized when used to unambiguously specify
   requirements of the protocol or application features and behavior
   that affect the inter-operability and security of implementations.
   When these words are not capitalized, they are meant in their
   natural-language sense.

   For purposes of readability examples are not URL encoded.
   Implementers MUST percent encode URLs as described in Section 2.1 of
   [RFC3986].  Many examples show only partial response and may use
   "..." to indicate omitted data.





Hunt                       Expires May 2, 2018                  [Page 3]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   Throughout this documents all figures MAY contain spaces and extra
   line-wrapping for readability and space limitations.  Similarly, some
   URI's contained within examples, have been shortened for space and
   readability reasons.

1.2.  Definitions

   This specification assumes terminology defined in the Security Event
   Token specification [I-D.ietf-secevent-token] and SET Token Delivery
   specification [I-D.ietf-secevent-delivery].

   The following definitions are defined for Security Event
   distribution:

   Control Plane
      A Control Plane represents an service offered by an Event
      Transmitter that lets an Event Receiver query the current
      operational and/or error status of an Event Stream.  The Control
      Plane MAY also be used to retrieve Event Stream and SET
      configuration data.

   Data Plane
      The Data Plane represents the HTTP service offered by an Event
      Receiver that allows the Event Transmitter to deliver multiple
      SETs via HTTP POST as part of an Event Stream.

   Client  A Client is any actor, typically represented by an
      authorization credential, authorized to make changes to an Event
      Stream.  Verify often this is an actor belonging to the Event
      Receiver organization.  Actors can be servers, monitoring
      services, and administrators.

2.  Stream Monitoring and Configuration Retrieval

   The Control Plane is an HTTP service associated with an Event
   Transmitter that enables the provisioning and monitoring of Event
   Streams by entities such Event Receivers, administrators, and
   monitoring services.  This section describes required functionality
   to enable Event Receivers to retrieve configuration attributes and to
   detect SET delivery problems that may occur when an Event Transmitter
   fails to deliver SETs.

   This specification also defines optional Control Plane services to
   create and update streams in sections Section 3 and Section 4.







Hunt                       Expires May 2, 2018                  [Page 4]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


2.1.  Event Stream Configuration Attributes

   An Event Stream is defined by a set of attributes which together
   define an Event Stream's operational configuration:

   eventUris
      A read only array of JSON String values which are the URIs of
      events configured for the Event Stream.  This attribute is
      assigned by the Control Plane provider in response to receiving an
      Event Stream creation or update request.  See "eventUris_req".

   eventUris_req
      An array of JSON String values which are the URIs of events
      requested by the Event Receiver for the Stream.  This attribute is
      modifiable.  An Event Stream provider MAY use this attribute to
      request requested Event URIs over time that may not be initially
      offered.

   eventUris_avail
      A read only array of JSON String values which are the URIs of
      events that the Event Transmitter is able to support.  This
      attribute MAY be used by Control Plane clients to discover new
      events that may become available over time.

   methodUri
      A REQUIRED JSON String value which represents the method used to
      transfer SETs to the Event Receiver.  See
      [I-D.ietf-secevent-delivery].

   deliveryUri
      A JSON String value containing a URI that describes the location
      where SETs are received (e.g. via HTTP POST).  Its format and
      usage requirements are defined by the associated "methodUri".

   iss
      The URI for the publisher of the SETs that will be issued for the
      Event Stream.  See Section 2.1 [I-D.ietf-secevent-token].

   aud
      An OPTIONAL JSON Array of JSON String values which are URIs
      representing the audience(s) of the Event Stream.  The value SHALL
      be the value of SET "aud" claim sent to the Event Receiver.

   iss_jwksUri
      An OPTIONAL String that contains the URL of the SET issuers public
      JSON Web Key Set [RFC7517].  This contains the signing key(s) the
      Event Receiver uses to validate SET signatures from the Event




Hunt                       Expires May 2, 2018                  [Page 5]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


      Transmitter that will be used by the Event Receiver to verify the
      authenticity of issued SETs.

   aud_jwksUri
      An OPTIONAL JSON Web Key Set [RFC7517] that contains the Event
      Receiver's encryption keys that MAY be used by the Event
      Transmitter to encrypt SET tokens for the specified Event
      Receiver.

   status
      An OPTIONAL JSON String keyword that indicates the current state
      of an Event Stream.  More information on the Event Stream state
      can be found in Section 2.3.  Valid keywords are:

         "on" - indicates the Event Stream has been verified and that
         the Feed Provider MAY pass SETs to the Event Receiver.

         "paused" - indicates the Event Stream is temporarily suspended.
         While "paused", SETs SHOULD be retained and delivered when
         state returns to "on".  If delivery is paused for an extended
         period defined by the Event Transmitter, the Event Transmitter
         MAY change the state to "off" indicating SETs are no longer
         retained.

         "off" - indicates that the Event Stream is no longer passing
         SETs.  While in off mode, the Event Stream configuration is
         maintained, but new events are ignored, not delivered or
         retained.  Before returning to "on", a verification MUST be
         performed.

         "fail" - indicates that the Event Stream was unable to deliver
         SETs to the Event Receiver due an unrecoverable error or for an
         extended period of time.  Unlike paused status, a failed Event
         Stream does not retain existing or new SETs that are issued.
         Before returning to "on", a verification MUST be performed.

   maxRetries
      An OPTIONAL JSON number indicating the maximum number of attempts
      to deliver a SET.  A value of '0' indicates there is no maximum.
      Upon reaching the maximum, the Event Stream "status" attribute is
      set to "failed".

   maxDeliveryTime
      An OPTIONAL number indicating the maximum amount of time in
      seconds a SET MAY take for successful delivery per request or
      cumulatively across multiple retries.  Upon reaching the maximum,
      the Event Stream "status" is set to "failed".  If undefined, there
      is no maximum time.



Hunt                       Expires May 2, 2018                  [Page 6]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   minDeliveryInterval
      An OPTIONAL JSON integer that represents the minimum interval in
      seconds between deliveries.  A value of '0' indicates delivery
      should happen immediately.  When delivery is a polling method
      (e.g.  HTTP GET), it is the expected time between Event Receiver
      attempts.  When in push mode (e.g.  HTTP POST), it is the interval
      the server will wait before sending a new event or events.

   txErr
      An OPTIONAL JSON String keyword value.  When the Event Stream has
      "subState" set to "fail", one of the following error keywords is
      set:

         "connection" indicates an error occurred attempting to open a
         TCP connection with the assigned endpoint.

         "tls" indicates an error occurred establishing a TLS connection
         with the assigned endpoint.

         "dnsname" indicates an error occurred establishing a TLS
         connection where the dnsname was not validated.

         "receiver" indicates an error occurred whereby the Event
         Receiver has indicated an error for which the Event Transmitter
         is unable to correct.

   txErrDesc
      An OPTIONAL String value that is usually human readable that
      provides further diagnostic detail by the indicated "txErr" error
      code.

   verifyNonce  A String value that when changed or set by a Control
      Plane client will cause the Event Transmitter to issue a single
      Verify Event based on the nonce value provided (see Section 5).
      The intent of the value is to allow the Event Receiver to confirm
      the Verify Event received matches the value set in the
      configuration.  While this value MAY be updated (see Section 5),
      its value is usually not returned as part of an Event Stream
      configuration.

   subjects
      An OPTIONAL complex attribute containing sub objects whose sub-
      attributes define subjects against which SETs may be issued.  The
      following sub-attributes are defined:

      value  A String which uniquely identifies a subject (or set of
         subjects) to be included in the Stream.  The format and type of
         value is defined by the 'type' sub-attribute.



Hunt                       Expires May 2, 2018                  [Page 7]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


      iss  A String which contains the URI of the issuer of the subject
         identified in the "value" attribute.  When not supplied the
         issuer is assumed to be the Event Stream issuer.

      type  A case-insensitive canonical String value which defines the
         contents of the attribute 'value'.  Valid type values are:

         OIDC  Is a String value corresponding to an OpenID Connect
            subject.  The corresponding "iss" attribute is set with the
            OpenId Connect iss value.

         SAML  A String value that is a URI that represents the subject
            of a SAML Identity Provider.

         EMAIL  A String Value that is the Email addresses for a
            subject.  The value SHOULD be specified according to
            [RFC5321].

         PHIONE  Phone numbers for the user.  The value SHOULD be
            specified according to the format defined in [RFC3966],
            e.g., 'tel:+1-201-555-0123'.

         User  A SCIM User where value is the 'id' of a User resource in
            the local SCIM service provider.

         Group  A SCIM Group where the value is the 'id' of a Group
            resource in the local SCIM service provider.

         URI  A miscellaneous subject that can be identified by a URI.

   Additional Event Stream configuration (attributes) MAY be defined as
   extensions.  The method for adding new attributes is defined in
   Section 3.3 [RFC7643].

2.2.  Checking Stream Configuration and Stream State

   An Event Receiver MAY check the current status of a Stream the Event
   Transmitter's Control Plane service by performing an HTTP GET using
   the provided URI from the Event Transmitter either through an
   administrative process or via the optional Stream creation response
   defined in Section 3.1.

   The format of the Stream GET request and response is defined by
   Section 3.4 [RFC7644].

   In addition to the basic attributes defined in Section 2 [RFC7643]
   common to all resource types, an "EventStream" resource types uses
   the attributes defined in Section 2.1.  As with any SCIM resource, an



Hunt                       Expires May 2, 2018                  [Page 8]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   "EventStream" resource MUST include the JSON attributes "schemas" and
   "id" as defined in [RFC7643]:

   schemas
      Is an array of Strings with at least a single value of
      "urn:ietf:params:scim:schemas:event:2.0:EventStream".
      Configuration MAY be extented through the addition of other schema
      URI values such as in the case where a new delivery method or SET
      profile needs to define additional attributes.

   id
      Is a String which is a permanent unique identifier for
      "EventStream" resources.  The value which is also used to define a
      permanent Event Stream Resource URI.

   The example below retrieves a specific "EventStream" resource whose
   "id" is "548b7c3f77c8bab33a4fef40".

   GET /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/json
   Authorization: Bearer h480djs93hd8

              Figure 1: Example EventStream HTTP GET Request



























Hunt                       Expires May 2, 2018                  [Page 9]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   Below is an example response to the "EventStream" retrieval made in
   Figure 1.

   HTTP/1.1 200 OK
   Content-Type: application/scim+json
   Location:
    https://example.com/EventStreams/767aad7853d240debc8e3c962051c1c0

   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
     "id":"767aad7853d240debc8e3c962051c1c0",
     "eventUris_req":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
     "deliveryUri":"https://notify.examplerp.com/Events",
     "aud":"https://sets.myexamplerp.com",
     "status":"fail",
     "txErr":"connection",
     "txErrDesc":"TCP connect error to notify.examplerp.com.",
     "maxDeliveryTime":3600,
     "minDeliveryInterval":0,
     "description":"Logout events from oidc.example.com",
     "meta":{
        ... SCIM meta attributes ...
     }
   }

                   Figure 2: Example Stream GET Response

   In the above figure, the "EventStream" shows a "status" of "fail" due
   to a TCP connection error.  In this case, the Event Receiver is able
   to discover that its endpoint was unavailable and has been marked
   failed by the Event Transmitter (possibly explaining a lack of
   received SETs).  Typically, with this type of error, appropriate
   operations staff would be alerted and some corrective action would be
   taken to check for a configuration error or service failure.

   The frequency with which Event Receivers poll the Event Stream status
   depends on factors such as:

   o  The level of technical fault tolerance and availability of the
      receiving endpoint.





Hunt                       Expires May 2, 2018                 [Page 10]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   o  The amount of risk that can be tolerated for lost events.  For
      example, if Security Events are considered informational, then
      infrequent (hourly or daily) may be sufficient.

   o  The amount of buffer recovery offered by an Event Transmitter
      which MAY be minutes depending on SET frequency and buffer size.

   In many cases Event Stream status monitoring may be triggered on a
   timeout basis.  Event Receivers would typically poll if they have not
   received a SET for some period during which SETs would be expected
   based on past experience.

   Receivers MAY use the endpoint "/EventStreams" to query and retrieve
   available Event Streams based on the provided "Authorization" header.

   The example below retrieves any "EventStream" resources based solely
   on the requestor's authorization header.

   GET /EventStreams/
   Host: example.com
   Accept: application/json
   Authorization: Bearer h480djs93hd8

      Figure 3: Example Stream HTTP GET Request From Common Endpoint



























Hunt                       Expires May 2, 2018                 [Page 11]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   HTTP/1.1 200 OK
   Content-Type: application/scim+json
   Location:
     https://example.com/EventStreams/767aad7853d240debc8e3c962051c1c0

   {
     "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
     "totalResults":1,
     "itemsPerPage":10,
     "startIndex":1,
     "Resources":[
     {
       "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
       "id":"767aad7853d240debc8e3c962051c1c0",
       "feedName":"OIDCLogoutFeed",
       "eventUris_req":[
         "http://schemas.openid.net/event/backchannel-logout"
       ],
       "eventUris":[
         "http://schemas.openid.net/event/backchannel-logout"
       ],
       "eventUris_avail":[
         "http://schemas.openid.net/event/backchannel-logout"
       ],
       "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
       "deliveryUri":"https://notify.examplerp.com/Events",
       "aud":"https://sets.myexamplerp.com",
       "status":"fail",
       "txErr":"connection",
       "txErrDesc":"TCP connect error to notify.examplerp.com.",
       "maxDeliveryTime":3600,
       "minDeliveryInterval":0,
       "description":"Logout events from oidc.example.com",
       "meta":{
          ... SCIM meta attributes ...
     }]
   }

          Figure 4: Example Event Stream List/Query Response Form

2.3.  Event Stream State Model

   The Event Stream configuration attribute "status" reports the current
   state of an Event Stream with regards to whether the stream is
   operational or is in a suspended or failed state.  Additionally, the
   "status" attribute can be used to pause or stop streams using the
   stream configuration update functions described in Section 3.




Hunt                       Expires May 2, 2018                 [Page 12]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   The following is the state machine representation of a Event Stream
   on a Event Transmitter.  Note that a Event Stream cannot be made
   active until a verification process has been completed.  As such, a
   newly created Event Stream begins with state "on".

                                     +
                                  Create
                                     |
           +--------+         +------v-----+          +--------+
           |        +-Restart->            +--Suspend->        |
           |  fail  |         |     on     |          | paused |
           |        <--Error--+            <--Resume--+        |
           +--------+         +-+-------^--+          +---+----+
                                |       |                 |
                             Disable  Enable              |
                                |       |                 |
                              +-v-------+--+              |
                              |     off    <--Limited-----+
                              +------------+

            Figure 5: Event Stream States at Event Transmitter

   In Figure 5, the following actions impact the operational state of an
   Event Stream. "status" values are shown in the boxes, and change
   based on the following actions:

   Create
      A Event Receiver or an administrator creates a new Event Stream as
      described in Section 3.1.  The initial state is "on".

   Error
      An Event Transmitter that has not been able to deliver a SET over
      one or more retries which has reached a limit of attempts
      ("maxRetries") or time ("maxDeliveryTime") MAY set the Event
      Stream state to "fail".  What stream status is set to "failed",
      the Event Transmitter is indicating that SETs are being lost and
      may not be recoverable.

   Limited
      A paused Event Stream has reached the transmitters ability to
      retain SETs for delivery.  The Event Transmitter changes the state
      to "off" indicating SET loss is potentially occurring.

   Restart
      An administrator having corrected the failed delivery condition
      modifies the Event Stream state to "on" (e.g. see Section 3.2).

   Suspend and Resume



Hunt                       Expires May 2, 2018                 [Page 13]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


      An Event Stream MAY be suspended and resumed by updating the Event
      Stream state to "paused" or "on".  For example, see see
      Section 3.2.  While suspended, the Event Transmitter retains
      undelivered SETs for a period of time and resources specified by
      the Event Transmitter (see "Limited").

   Enable and Disable
      A Event Stream MAY be disabled and enabled by updating the Event
      Stream "state" to "off" or "on".  For example, see see
      Section 3.2.  While the Event Stream is disabled, all SETs that
      occur at the Event Transmitter are lost.

3.  Stream Management and Provisioning

   This section describes optional Stream management provisioning
   features that allow receivers or provisioning systems to create
   streams and update configuration to perform actions such as rotation,
   and operational state (e.g. suspend, stop, or resume) management.

   The operations specified in this section are based on [RFC7644].
   SCIM schema declarations for the "EventStream" resources are defined
   in Appendix A.  HTTP Protocol usage and processing rules are provided
   by [RFC7644].

3.1.  Creating An Event Stream

   To define an Event Stream, the Event Receiver or its administrator
   (known as the client) first obtains an authorization credential
   allowing the ability to define a new Stream.  Note: the process for
   registering to obtain credentials and permission to register is out-
   of-scope of this specification.

   Upon obtaining authorization, the client issues an HTTP POST request
   as defined in Section 3.3 [RFC7644].  To complete the request, the
   administrative entity provides the required Stream configuration
   attributes as specified in Section 2.1, the delivery method
   [I-D.ietf-secevent-delivery] and any additional configuration
   specified by the SET Event Specifications that are being used.

   The client MAY discover the Event Transmitter's Control Plane service
   for the schema requirements for "EventStream" resource type and any
   other extensions using SCIM schema discovery in Section 4 [RFC7644].

   The process to create an Event Stream is as follows:

   1.  The client initiates an HTTP POST to the Control Plane endpoint
       and provides a JSON document defining an EventStream which




Hunt                       Expires May 2, 2018                 [Page 14]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


       contains information about the Event Receivers endpoints,
       settings, and keys.

   2.  Upon validating the request, the Event Transmitters control plane
       provisions the stream and updates the EventStream configuration
       with the corresponding Event Transmitter information.

   3.  The Control Plane responds to the request from step 1 and returns
       the final representation of the Event Stream configuration along
       with a pointer to the created EventStream resource that the
       client MAY use to monitor status and update configuration.

   4.  Upon receiving the response, the client completes the client side
       configuration and provisioning based upon the returned
       EventStream configuration.

   In the following non-normative example, a request to create a new
   "EventStream" is submitted.

   POST /EventStreams
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
     "feedName":"OIDCLogoutFeed",
     "eventUris_req":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
     "deliveryUri":"https://notify.examplerp.com/Events",
     "aud":"https://sets.myexamplerp.com",
     "maxDeliveryTime":3600,
     "minDeliveryInterval":0,
     "description":"Logout events from oidc.example.com"
   }

               Figure 6: Example Create Event Stream Request











Hunt                       Expires May 2, 2018                 [Page 15]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In following non-normative response, the Control Plane provider has
   automatically assigned an HTTP addressable location for the
   EventStream resource as well as an "id".  Additionally, the Control
   Plane response below includes additional configuration data for "iss"
   and "iss_jwksUri".

   HTTP/1.1 201 Created
   Content-Type: application/scim+json
   Location:
    https://example.com/v2/EventStreams/767aad7853d240debc8e3c962051c1c0

   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
     "id":"767aad7853d240debc8e3c962051c1c0",
     "feedName":"OIDCLogoutFeed",
     "eventUris_req":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris_avail":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
     "deliveryUri":"https://notify.examplerp.com/Events",
     "aud":"https://sets.myexamplerp.com",
     "status":"on",
     "maxDeliveryTime":3600,
     "minDeliveryInterval":0,
     "iss":"oidc.example.com"
     "iss_jwksUri":"https://example.com/keys/oidc-example-com.jwks"
     "description":"Logout events from oidc.example.com",
     "meta":{
        ... SCIM meta attributes ...
     }
   }

         Figure 7: Example Response to Create EventStream Request

3.2.  Updating An Event Stream

   Two HTTP methods are available to update an Event Stream
   configuration.

      The HTTP PUT operation accepts a JSON Document representing an
      existing EventStream configuration and replaces it.




Hunt                       Expires May 2, 2018                 [Page 16]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


      An optional HTTP PATCH operation uses a JSON Patch [RFC6902] style
      request format to allow manipulation of specific EventStream
      configuration such as (but not limited to) "status", and
      "subjects".

3.2.1.  Update using HTTP PUT

   The HTTP PUT method allows a client having previously received the
   EventStream JSON document to modify the document and replace the
   Control Plane provider's copy.  In using this method, the client is
   not required to remove data normally asserted or defined by the Event
   Stream Control Plane provider (e.g. attributes that are read only).
   The processing rules of [RFC7644] enable the client to "put back"
   what was previously received allowing the Control Plane provider to
   figure out what attributes need updating and which attributes are
   ignored.  For example, while "id" is immutable, the Control Plane
   provider will simply ignore attempts to replace its value.  When
   processing is complete the final accepted state is represented in the
   HTTP Response.
































Hunt                       Expires May 2, 2018                 [Page 17]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In the following non-normative example, a request to replace the
   existing EventStream "EventStream" is submitted.  In this example,
   the change shown is the status is now set to "off".  Note that the
   client does not have to remove read-only attributes such as
   "eventUris" and "eventUris_avail" as these values are ignored as per
   Section 3.5.1 [RFC7644].

   PUT /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
     "id":"767aad7853d240debc8e3c962051c1c0",
     "feedName":"OIDCLogoutFeed",
     "eventUris_req":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris_avail":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
     "deliveryUri":"https://notify.examplerp.com/Events",
     "aud":"https://sets.myexamplerp.com",
     "status":"off",
     "maxDeliveryTime":3600,
     "minDeliveryInterval":0,
     "iss":"oidc.example.com"
     "iss_jwksUri":"https://example.com/keys/oidc-example-com.jwks"
     "description":"Logout events from oidc.example.com",
     "meta":{
        ... SCIM meta attributes ...
     }
   }

              Figure 8: Example Replace Event Stream Request










Hunt                       Expires May 2, 2018                 [Page 18]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In following non-normative response, the Control Plane provider
   responds with the processed final state of the submitted EventStream.

   HTTP/1.1 200 OK
   Content-Type: application/scim+json
   Location:
    https://example.com/v2/EventStreams/767aad7853d240debc8e3c962051c1c0

   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
     "id":"767aad7853d240debc8e3c962051c1c0",
     "feedName":"OIDCLogoutFeed",
     "eventUris_req":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "eventUris_avail":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
     "deliveryUri":"https://notify.examplerp.com/Events",
     "aud":"https://sets.myexamplerp.com",
     "status":"off",
     "maxDeliveryTime":3600,
     "minDeliveryInterval":0,
     "iss":"oidc.example.com"
     "iss_jwksUri":"https://example.com/keys/oidc-example-com.jwks"
     "description":"Logout events from oidc.example.com",
     "meta":{
        ... SCIM meta attributes ...
     }
   }

           Figure 9: Example Response to PUT EventStream Request

3.2.2.  Update using HTTP PATCH

   Periodically, Event Receiver parties MAY have need to update an
   EventStream configuration for the purpose of:

   o  Rotating access credentials or keys

   o  Updating endpoint configuration

   o  Making operational changes such as pausing, resetting, or
      disabling an Event Stream.



Hunt                       Expires May 2, 2018                 [Page 19]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   o  Other operations (e.g. such as adding or removing subjects) as
      defined by profiling Event specifications.

   As documented in Section 3.5.2 [RFC7644], one or more PATCH
   operations (which are based on [RFC6902]) can be made against a
   single EventStream resource.  The update is expressed as a JSON
   document.  The JSON document contains an attribute "Operations" which
   contains an array of JSON objects each of which each have the
   following attributes:

   op
      A JSON attribute whose value is one of "add", "remove", or
      "replace".

   path
      A JSON attribute whose value is a document attribute path (see
      Section 3.5.2 [RFC7644]) describing the attribute or sub-attribute
      or value to be updated in the case of multi-valued complex
      attributes such as "subjects".

   value
      The value to be assigned to the JSON document attribute defined in
      "path".

   In the following non-normative example, the client requests that the
   "status" configuration attribute be changed to "paused" for the
   EventStream whose path is identified by the request URI path.

   PATCH /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"replace",
       "path":"status",
       "value":"paused"
     }]
   }

               Figure 10: Example EventStream PATCH Request






Hunt                       Expires May 2, 2018                 [Page 20]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In the above figure, upon receiving the request, the Event
   Transmitter would stop sending Events to the Receiver based on the
   requested value of "status" being set to "paused".

   In the following non-normative example, the client requests the
   addition and removal of two subjects from an existing EventStream.
   This operation is discussed further in Section 4.2.

   PATCH /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"add",
       "path":"subjects",
       "value":{
         "type":"EMAIL",
         "value":"alice@example.com"
       }
     },
     {
       "op":remove",
       "path":"subjects[value eq \"bob@example.com\"]
     }]
   }

          Figure 11: Example Changing the Members of EventStream

   In the above request, the second operation, the remove operation,
   uses a "path" attribute to specify a matching filter the correct
   array element of "subjects" by matching the appropriate sub-
   attributes which are denoted by square brackets (see Figure 1 and 2
   [RFC7644] for other examples and ABNF for filters).  In this case the
   composite filter of the "subjects" sub-attributes "type" and "value"
   are used to remove the correct JSON array element.  Upon receiving
   the request, the EventStream subjects attribute would be updated to
   reflect the changes.

4.  Models for Managing Stream Subjects

   The extensibility of SCIM enables many ways to model subjects that
   are part of an Event Stream.  This section explores a few
   alternatives that profiling specifications could use to manage the



Hunt                       Expires May 2, 2018                 [Page 21]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   contents of an Event Stream.  These examples include managing
   subjects:

   o  As an attribute of an Event Stream configuration (see
      Section 4.2);

   o  As a member of SCIM Group (see Section 4.3); and,

   o  As a specific Subject resource (see Section 4.4).

4.1.  General Considerations for Managing Subjects

   As a privacy and scalability consideration, profiling specifications
   SHOULD consider that most deployments SHOULD not allow the subjects
   that are part of an Event Stream to be enumerated in a single
   request.  For example, in Section 4.2, the Event Stream configuration
   attribute "subjects" is typically not returned when querying Event
   Stream configurations (see Section 2.2).  This is because the number
   of values may be too large (e.g. great than 100k values or even in
   the billions or more).  Further, depending on the Security Event
   types being exchanged, Event Receivers MAY confirm that a subject is
   part of a stream for privacy reasons.

   The ability to return attributes such as "subjects" is indicated by
   Control Plane service providers in schema discovery (see Section 4
   [RFC7644]) as the schema attribute "returned".  For "subjects" this
   attribute SHOULD be set to "request" or "never".  In "request" mode,
   the client must specifically request the attribute "subjects" to have
   it enumerated.  If the mode is _never_, the attribute SHALL NOT be
   returned to clients.  In all cases however, a client MAY execute a
   query to verify the presence of a subject:

4.2.  Subjects as Part of Stream Configuration

   In this section, examples are given using the "subjects" attribute of
   Event Stream configuration described in Section 2.1

   The following sections assume subject membership within streams is
   defined by the "subjects" attribute of the Event Stream
   configuration.  As defined, subjects can support a number of value
   types including: OIDC Connect Subjects, SCIM Users and Groups, e-mail
   and telephone number identifiers, and URI referencable entities.

4.2.1.  Checking Subject Membership

   Checking subject membership is a matter of performing a query using a
   filter to achieve a match based on a value of the "subjects"
   attribute.



Hunt                       Expires May 2, 2018                 [Page 22]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.2.1.1.  Email Based Subjects

   In this section, values have been added to the "subjects" attribute
   that are email addresses which clients to the Control Plane would
   like to verify are present or not.  The "subjects" attribute has sub-
   attribute "type" set to "EMAIL" and the sub-attribute "value"
   contains an email address.

   In the following non-normative example, a client queries the Control
   Plane to see if "alice@example.com" is part of any defined stream
   configuration.  In the request, only the attribute "id" of the Event
   Stream is requested as the client does not need to see the rest of
   the Event Stream attributes.  Note, for readability, the URL is not
   encoded.

   GET /EventStreams?filter=(subjects.value eq "alice@example.com")
     &attributes=id
   Host: example.com
   Accept: application/scim+json
   Authorization: Bearer h480djs93hd8

     Figure 12: Determining if an EMail Subject is in an Event Stream

   In this non-normative example response, the subject is confirmed as
   not part of any Event Streams associated with the requester.  In this
   case an empty list is returned with no values and "totalResults" is
   "0".

   HTTP/1.1 200 OK
   Content-Type: application/scim+json

   {
     "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
     "totalResults":0,
     "Resources":[]
   }

             Figure 13: Example Response With No Subject Match













Hunt                       Expires May 2, 2018                 [Page 23]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In the response below, a match for subject "alice@example.com" is
   found and the "id" of the Event Stream configuration that contains
   the subject is returned is "767aad7853d240debc8e3c962051c1c0".

   HTTP/1.1 200 OK
   Content-Type: application/scim+json

   {
     "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
     "totalResults":1,
     "Resources":[
       {
         "id":"767aad7853d240debc8e3c962051c1c0",
         ...other meta attributes...
       }
     ]
   }

               Figure 14: Example Response With Single Match

4.2.1.2.  OIDC Based Subjects

   In this section, values in the "subjects" attribute are OIDC users
   which clients would like to verify are present.  The attribute
   "subjects" has the sub-attribute "type" set to "OIDC" and the sub-
   attribute "value" contains an OIDC "sub" value and the "iss" sub-
   attribute contains the corresponding OIDC Provider "iss" value.  For
   this example, the OIDC "iss" is "op.example.com" and the "sub" is
   "123456".

   In the following non-normative example, a client queries the Control
   Plane to see if the above OIDC user is part of any defined stream
   configuration.  In the request, only the attribute "id" is requested.
   Note, for readability, the URL is not encoded.

   GET /EventStreams?filter=(subjects[value eq "123456" and
     iss eq "op.example.com"])&attributes=id
   Host: example.com
   Accept: application/scim+json
   Authorization: Bearer h480djs93hd8

      Figure 15: Determining if an OIDC Subject is in an Event Stream

   In the above request note that "iss" and "value" are enclosed within
   square brackets.  This is done, per Figure 1 [RFC7644] to ensure the
   matching condition within "[" and "]" is matched against the same
   JSON array record.  If the filter was expressed as "(subjects.value
   eq "123456" and subjects.iss eq "op.example.com")" Then an improper



Hunt                       Expires May 2, 2018                 [Page 24]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   match may occur because a composite value of "subjects" may have
   "123456" while another has "op.example.com".

   For examples of responses to Figure 15, see Figure 13 and Figure 14

4.2.2.  Adding and Removing Subjects to a Stream

   Adding and removing subjects to an Event Stream is performed using
   the HTTP PATCH method described in Section 3.2.2.  The following
   provides examples of adding and removing subjects based on EMAIL and
   OIDC subects.

   In the following non-normative example, the client requests the
   addition of a subject identified by an EMAIL address to an existing
   EventStream.  The composite value of subjects has the sub-attributes
   "type" and "value" which are assigned.

   PATCH /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"add",
       "path":"subjects",
       "value":{
         "type":"EMAIL",
         "value":"alice@example.com"
       }
     }]
   }

              Figure 16: Adding an EMAIL Subject to a Stream














Hunt                       Expires May 2, 2018                 [Page 25]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In the following non-normative example, the client requests the
   addition of an OIDC subject to an existing EventStream.  The
   composite value of "subjects" has the sub-attributes "type", "iss",
   and "value" which are assigned.

   PATCH /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"add",
       "path":"subjects",
       "value":{
         "type":"OIDC",
         "value":"123456",
         "iss":"op.example.com"
       }
     }]
   }

          Figure 17: Adding an OIDC Provider Subject to a Stream

   In the following non-normative example, the client requests the
   removal of a subject selected by using a filter against the
   "subjects" attribute.

PATCH /EventStreams/767aad7853d240debc8e3c962051c1c0
Host: example.com
Accept: application/scim+json
Content-Type: application/scim+json
Authorization: Bearer h480djs93hd8

{
  "schemas":
    ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [{
    "op":"remove",
    "path":"subjects[value eq \"123456\" and iss eq \"op.example.com\"]",
  }]
}

         Figure 18: Removing an OIDC Connect Subject from a Stream




Hunt                       Expires May 2, 2018                 [Page 26]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.3.  Subjects as Members of a Group

   SCIM defines a resource type called a "Group" which can be used as a
   container to manage one or more objects in a collection (See
   Section 4.2 of [RFC7643]).  Groups work in similar fashion to the
   operations described in Section 4.2 except instead of operations
   against the '"subjects", the "members" attribute is used.  Typically
   the value of the members attribute is the "id" of a local User or
   Group.

   In order to use this method, the Stream configuration indicates the
   SCIM Group being used by adding Group as a member of the "subjects"
   attribute of the Stream configuration and indicating a "type" of
   "Group".

   The following is an example Stream configuration that has a Group as
   a member of the subjects.  In the example below, "e18c2dfb5d588" is
   the identifier of a SCIM Group containing a list of member resources.

   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:EventStream"],
     "id":"767aad7853d240debc8e3c962051c1c0",
     "feedName":"OIDCLogoutFeed",
     "eventUris":[
       "http://schemas.openid.net/event/backchannel-logout"
     ],
     "methodUri":"urn:ietf:params:set:method:HTTP:webCallback",
     "deliveryUri":"https://notify.examplerp.com/Events",
     "aud":"https://sets.myexamplerp.com",
     "status":"off",
     "maxDeliveryTime":3600,
     "minDeliveryInterval":0,
     "iss":"oidc.example.com"
     "subjects":[
       {
         "type":"Group"
         "value":"e18c2dfb5d588"
       }
     ]
     "iss_jwksUri":"https://example.com/keys/oidc-example-com.jwks"
     "description":"Logout events from oidc.example.com",
     "meta":{
        ... SCIM meta attributes ...
     }
   }

           Figure 19: Event Stream Configured to Use SCIM Group




Hunt                       Expires May 2, 2018                 [Page 27]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.3.1.  Checking Membership

   In this section, values have been added to the "members" attribute
   are "id" values of known SCIM resources.  These values can be queried
   against the Group to see if the "id" is a member.

   If the requester does not know the "id" of the resource for which
   they would like to check membership, a query can be performed as
   described in Section 3.4 [RFC7644].

   In the following non-normative example, a client queries the Control
   Plane to see if a User with "id" value of "413861904646" is a part of
   any Group. .

   GET /Groups?filter=members.value eq "413861904646"
     &attributes=id
   Host: scim.example.com
   Accept: application/scim+json
   Authorization: Bearer h480djs93hd8

      Figure 20: Determining if a SCIM Resource is in a Event Stream
                                  Example

   In this non-normative response, the "id" is confirmed as not part of
   the Group queried by the requester.  In this case an empty list is
   returned with no values and "totalResults" is "0".

   HTTP/1.1 200 OK
   Content-Type: application/scim+json

   {
     "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
     "totalResults":0,
     "Resources":[]
   }

                 Figure 21: Example Response With No Match














Hunt                       Expires May 2, 2018                 [Page 28]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In the response below, a match for resource with an "id" value of
   "413861904646" is found and the "id" of any matched Groups that
   contain the "id" is returned.  In this case a "Group" with an "id"
   value of _e18c2dfb5d588_ is returned.

   HTTP/1.1 200 OK
    Content-Type: application/scim+json

    {
      "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
      "totalResults":1,
        "Resources":[
          {
            "id":"e18c2dfb5d588",
          }
        ]
      }

               Figure 22: Example Response With Single Match

4.3.2.  Adding and Removing SCIM Users to a Group

   Adding and removing Users to an Event Stream Group is performed using
   the HTTP PATCH method described in Section 3.2.2.  The following
   provides examples of adding and removing "Users" to a "Group"


























Hunt                       Expires May 2, 2018                 [Page 29]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   In the following non-normative example, the client requests the
   addition of a User identified by an "id" to an existing "Group" which
   is used by an Event Stream to denote member subjects.

   PATCH /Groups/e18c2dfb5d588
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"add",
       "path":"members",
       "value":{
         "type":"User",
         "value":"8c16-01f8e146b87a"
       }
     }]
   }

                Figure 23: Example Adding a User to a Group

   In the following non-normative example, the client requests the
   removal of a User identified by "id" with value "8c16-01f8e146b87a".
   The item to be removed is selected by using a filter against the
   "members" attribute.

   PATCH /Groups/e18c2dfb5d588
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"remove",
       "path":"members.value eq \"8c16-01f8e146b87a\"",
     }]
   }

              Figure 24: Example Removing a User from a Group





Hunt                       Expires May 2, 2018                 [Page 30]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.4.  Subjects as a Resource (aka POST Profile)

   This section demonstrates how to model subject participation in an
   Event Stream by treating subjects as a resource (a "Subject").  In
   this model, a subject is added, removed, and queried from an Event
   Stream by through HTTP POST, DELETE, and GET methods.

   In this model, a new SCIM resource type is defined that describes the
   "Subject" resource and its associated schema.

   The following is a non-normative example of a Resource Type
   definition that is configured in a SCIM service provider.  The
   Resource Type defines the "Subjects" endpoint as well as a URI for
   the schema definition.  The Resource Type configuration can be
   discovered by querying the SCIM service provider's "/ResourceTypes"
   endpoint (see Section 4 [RFC7644]).

   {
     "schemas": ["urn:ietf:params:scim:schemas:core:2.0:ResourceType"],
     "id": "Subject",
     "name": "Subject",
     "endpoint": "/Subjects",
     "description": "Endpoint managing SECEVENT Subjects.",
     "schema": "urn:ietf:params:scim:schemas:event:2.0:Subject",
     "schemaExtensions": []
   }

         Figure 25: Example Resource Type Definition for Subjects























Hunt                       Expires May 2, 2018                 [Page 31]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   The following is an example schema definition for a Subject resource.
   This configuration can be retrieved from the SCIM Service Provider
   using the "/Schemas" endpoint (see Section 4 [RFC7644]).

   {
     "id" : "urn:ietf:params:scim:schemas:event:2.0:Subject",
     "name" : "Subject",
     "description" : "Subject stream configuration",
     "attributes" : [
       {
         "name" : "email",
         "type" : "string",
         "multiValued" : false,
         "description" : "The email of the subject being added to Event
         Streams. The value SHOULD be specfied according to [RFC5321].",
         "required" : true,
         "caseExact" : false,
         "mutability" : "readWrite",
         "returned" : "default",
         "uniqueness" : "none"
       },
       {
         "name" : "displayName",
         "type" : "string",
         "multiValued" : false,
         "description" : "A simple representation of a Subject's name
         that can be used for display purposes.",
         "required" : false,
         "caseExact" : false,
         "mutability" : "readWrite",
         "returned" : "default",
         "uniqueness" : "none"
       },
       {
         "name" : "streamId",
         "type" : "string",
         "multiValued" : fase,
         "description" : "An Event Stream a Subject is part
         of as identified by EventStream id",
         "required" : false,
         "mutability" : "readWrite",
         "returned" : "default"
       }
     ]
   }

              Figure 26: Example Schema for Subject Resources




Hunt                       Expires May 2, 2018                 [Page 32]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.4.1.  Adding A Subject to a Stream

   To add a Subject to a Stream, an HTTP POST is used to create a new
   Subject resource which contains attributes identifying the subject
   and the associated Event Stream "id".

   The following non-normative example demonstrates adding a subject
   identified by "example.user@example.com" to an "EventStream"
   identified by "id" with value "767aad7853d240debc8e3c962051c1c0".

   POST /Subjects/ HTTP/1.1
   Host: transmitter.example.com
   Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
   {
    "schemas":["urn:ietf:params:scim:schemas:event:2.0:Subject"],
    "email": "example.user@example.com",
    "streamIds": "767aad7853d240debc8e3c962051c1c0",
    "schemas":["urn:ietf:params:scim:schemas:event:2.0:Subject"]
   }

            Figure 27: Adding a Subject to a Stream Using POST

   In response the server indicates the record is created and returns a
   permanent URI of the entry.  This URI can later be used to remove the
   subject from the identified EventStream.

   HTTP/1.1 201 Created
   Content-Type: application/scim+json
   Location:
       https://example.com/v2/Subjects/e3c962051c1c0
   {
     "schemas":["urn:ietf:params:scim:schemas:event:2.0:Subject"],
     "id": "e3c962051c1c0",
     "email": "example.user@example.com",
     "streamIds": "767aad7853d240debc8e3c962051c1c0",
     "meta":{
        ...SCIM meta data...
     }
   }

      Figure 28: Response to Adding a Subject to a Stream Using POST

   Should the record be a duplicate Subject, the Control Plane
   implementation MAY choose to return the original resource
   registration and location with HTTP Status 200 (OK).






Hunt                       Expires May 2, 2018                 [Page 33]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.4.2.  Querying for Subject in Event Streams

   To query Subjects, SCIM filters can be used to return matching
   resources as per Section 3.4.2 [RFC7643]

   Assuming the "id" of the EventStream is known, a query can be made
   against that identifier and the subjects identifier - in this case,
   an email address.

   GET /Subjects?filter=(streamId eq "e3c962051c1c0" and
      email eq "example.user@example.com")

           Figure 29: Querying if a Subject is in an EventStream

   If a match to the request in Figure 29 is made, the following is a
   non-normative example response showing the matched Subject resource.

  HTTP/1.1 200 OK
   Content-Type: application/scim+json

  {
     "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
     "totalResults":1,
       "Resources":[
         {
           "id":"e3c962051c1c0",
           "email": "example.user@example.com"
           "streamIds": "e3c962051c1c0",
           "schemas":["urn:ietf:params:scim:schemas:event:2.0:Subject"],
           ...additional meta data...
         }
      ]
  }

                       Figure 30: Response to Query

   To see if an email address is present in multiple EventStreams, the
   following query MAY be used.

   GET /Subjects?filter=(email eq "example.user@example.com")

             Figure 31: Querying All Event Streams for Subject

   Assuming only one match is found, than a response similar to
   Figure 30 is returned.  If not matches occur, a response is returned
   with "totalResults" equal to 0.  If more than one match is returned,
   the additional matches are returned in the "Resources" array.




Hunt                       Expires May 2, 2018                 [Page 34]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


4.4.3.  Removing a Subject from an Event Stream

   Assuming the "id" of the Subject resource is known, HTTP DELETE MAY
   be used.  If it is not known, the "id" MAY be queried as per
   Section 4.4.2.

   To remove a Subject resource perform an HTTP DELETE using the
   resource's URI (see Section 3.6 [RFC7644]).

   DELETE /Subjects/e3c962051c1c0

            Figure 32: Removing a Subject from an Event Stream

5.  Event Stream Verification

   In the verify process, the Event Receiver organization initiates a
   request to the Event Transmitter to verify the Stream is working
   correctly.  This can be used to both test for configuration errors
   (e.g. incorrect keys for signing and/or encryption, endpoints) and to
   verify operational state by using a Verify Event as an occasional
   'ping' test.

   To initiate a Verify Event, the Event Receiver organization using the
   Control Plane to set a nonce value for the Stream Configuration
   attribute "verifyConfirm".  Once set, the Event Transmitter SHALL
   issue a Verify SET the includes the client specified nonce value.

   In the following non-normative example, the client requests a Verify
   Event by setting the attribute "verifyNonce" as part of the Event
   Stream configuration.

   PATCH /EventStreams/767aad7853d240debc8e3c962051c1c0
   Host: example.com
   Accept: application/scim+json
   Content-Type: application/scim+json
   Authorization: Bearer h480djs93hd8

   {
     "schemas":
       ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations": [{
       "op":"replace",
       "path":"verifyNonce",
       "value":"VGhpcyBpcyBhbi"
     }]
   }

                Figure 33: Requesting a Verify using PATCH



Hunt                       Expires May 2, 2018                 [Page 35]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   Upon the changing of the Event Stream configuration attribute
   "verifyNonce", the Event Transmitter sends a Verify Event SET to the
   Event Receiver using the registered "methodUri" mechanism.

   The Verify SET contains the following attributes:

   events
      Set with an event attribute of
      "urn:ietf:params:secevent:verification" and contains the sub-
      attribute "nonce" which contains the value of "verifyNonce" .

   iss
      Set to the URI defined in the Event Stream configuration.

   aud
      MUST be set to a value that matches the EventStream "aud" value
      agreed to.

   If the Event Stream is configured to encrypt SETs for the Event
   Receiver, then the SET MUST be encrypted with the provided key.
   Successful parsing of the message confirms that provides confirmation
   of correct configuration and possession of keys.

   The following is a non-normative JSON representation of a Verify
   Event issued to an Event Receiver.  Included in the SET is an example
   nonce value "VGhpcyBpcyBhbi".

   {
     "jti": "123456",
     "iss": "https://transmitter.example.com",
     "aud": "receiver.example.com",
     "iat": "1493856000",
     "events": [
       "urn:ietf:params:secevent:verification" : {
         "nonce": "VGhpcyBpcyBhbi",
       },
     ],
   }

                    Figure 34: Example Verification SET

   The above SET is encoded as a JWT and transmitted to the Event
   Receiver using the configured delivery method.

   Upon receiving a verify SET, the Event Receiver SHALL parse the SET
   and verify its claims.  In particular, the Event Receiver SHALL
   confirm that the values for "nonce" match the value assigned to
   "verifyNonce" in the Event Stream Configuration via the Control



Hunt                       Expires May 2, 2018                 [Page 36]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   Plane.  If the values do not match, administrative action should be
   taken to address the mis-configuration.  Similarly if the SET is not
   received or is unparseable, the Event Receiver organization can check
   Event Stream configuration and check for errors by reviewing the
   Stream configuration attributes "status" and "txErr".

6.  Privacy Considerations

   See Section 7.5 [RFC7644] for protocol specific privacy
   considerations.

   The Privacy Considerations of SET Token Specification
   [I-D.ietf-secevent-token] and the SET Token Delivery specification
   [I-D.ietf-secevent-delivery] SHALL apply.

6.1.  Subject Management

   The exact set of subject entities upon which SETs can be issued
   SHOULD NOT be made available to any single party.  This is because a
   subject's relationship with an Event Transmitter MAY change over time
   and may not be known to the Event Receiver.  A design consideration
   is that an Event Receiver MUST already know personal identifiers
   before asking an Event Transmitter if there is an existing
   relationship by asking if that personal identifier is part of a
   stream.  Accordingly the "subjects" attribute of an Event Stream can
   not normally be returned.  Instead, a Control Plane provider MAY
   confirm a subject is part of a stream.  See Section 4.1 and
   Section 4.2.1.

   When receiving a request from a Control Plane client to add a
   subject, the provider SHOULD consider if the subject is appropriate
   to the purpose of the Event Stream being managed.  For example, for
   an OpenID Connect Provider, was consent obtained to share security
   data with the Relying Party.  Such authorization may have been
   previously authorized by a user via the OpenID consent process.
   Having obtained consent, the Control Plane provider SHOULD consider
   if the SET Events being requested to be streamed are appropriate.

7.  Security Considerations

   This specification depends on the Security Considerations of
   [RFC7644].

7.1.  Multi-Party Access to Streams

   Implementations SHOULD support access roles which enable different
   types of access to Event Streams via the Control Plane service.  A
   minimal suggested set of roles includes:



Hunt                       Expires May 2, 2018                 [Page 37]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   Monitor  For clients to retrieve Event Stream configuration and
      obtain current status.  Access is limited to read-only operations.

   Control  Adds the ability to modify the "status" attribute to control
      the operational state of the Event Stream in addition to the
      rights granted by "Monitor".

   Manage  Provides the ability to list, create and manage Event Streams
      including updating and verifying subjects.

   Typically these roles are rights or scopes associated with the
   security credential presented in the HTTP Authorization header of
   requests (see Section 7 [RFC7644]).  The method by which these roles
   are implemented is out of scope of this specification.

8.  IANA Considerations

8.1.  Registration of Verify Event URI

   IANA is requested to add an entry to the 'IETF URN Sub-namespace for
   Registered Protocol Parameter Identifiers' registry and create a sub-
   namespace for the Registered Parameter Identifier as per [RFC3553]:
   "urn:ietf:params:secevent:verification".

   The identifier is used to indicate a Verify Event as defined in
   Section 5 for use in the "events" attribute defined in
   [I-D.ietf-secevent-token].

8.2.  SCIM Schema Registration

   As per the "SCIM Schema URIs for Data Resources" registry established
   by Section 10.3 [RFC7643], the following defines and registers the
   following SCIM URIs and Resource Types for Feeds and Event Streams.

   +---------------------------+----------+--------------+-------------+
   | Schema URI                | Name     | ResourceType | Reference   |
   +---------------------------+----------+--------------+-------------+
   | urn:ietf:params:scim:     | SET      | EventStream  | Section 2.1 |
   | schemas:event:2.0:        | Event    |              |             |
   | EventStream               | Stream   |              |             |
   +---------------------------+----------+--------------+-------------+

   Attributes for SET Event Streams are defined in Section 2.1

   SCIM Schema and ResourceType definitions are defined in Appendix A






Hunt                       Expires May 2, 2018                 [Page 38]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


9.  References

9.1.  Normative References

   [I-D.ietf-secevent-delivery]
              Hunt, P., Scurtescu, M., Ansari, M., Nadalin, A., and A.
              Backman, "SET Token Delivery Using HTTP", draft-ietf-
              secevent-delivery-00 (work in progress), July 2017.

   [I-D.ietf-secevent-token]
              Hunt, P., Denniss, W., Ansari, M., and M. Jones, "Security
              Event Token (SET)", draft-ietf-secevent-token-02 (work in
              progress), June 2017.

   [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>.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, January 2005,
              <https://www.rfc-editor.org/info/rfc3986>.

   [RFC5988]  Nottingham, M., "Web Linking", RFC 5988,
              DOI 10.17487/RFC5988, October 2010,
              <https://www.rfc-editor.org/info/rfc5988>.

   [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>.

   [RFC7517]  Jones, M., "JSON Web Key (JWK)", RFC 7517,
              DOI 10.17487/RFC7517, May 2015,
              <https://www.rfc-editor.org/info/rfc7517>.

   [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>.

9.2.  Informative References

   [openid-connect-core]
              NRI, "OpenID Connect Core 1.0", Nov 2014.






Hunt                       Expires May 2, 2018                 [Page 39]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   [RFC3553]  Mealling, M., Masinter, L., Hardie, T., and G. Klyne, "An
              IETF URN Sub-namespace for Registered Protocol
              Parameters", BCP 73, RFC 3553, DOI 10.17487/RFC3553, June
              2003, <https://www.rfc-editor.org/info/rfc3553>.

   [RFC3966]  Schulzrinne, H., "The tel URI for Telephone Numbers",
              RFC 3966, DOI 10.17487/RFC3966, December 2004,
              <https://www.rfc-editor.org/info/rfc3966>.

   [RFC5321]  Klensin, J., "Simple Mail Transfer Protocol", RFC 5321,
              DOI 10.17487/RFC5321, October 2008,
              <https://www.rfc-editor.org/info/rfc5321>.

   [RFC6902]  Bryan, P., Ed. and M. Nottingham, Ed., "JavaScript Object
              Notation (JSON) Patch", RFC 6902, DOI 10.17487/RFC6902,
              April 2013, <https://www.rfc-editor.org/info/rfc6902>.

   [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>.

   [RFC7643]  Hunt, P., Ed., Grizzle, K., Wahlstroem, E., and C.
              Mortimore, "System for Cross-domain Identity Management:
              Core Schema", RFC 7643, DOI 10.17487/RFC7643, September
              2015, <https://www.rfc-editor.org/info/rfc7643>.

   [RFC7644]  Hunt, P., Ed., Grizzle, K., Ansari, M., Wahlstroem, E.,
              and C. Mortimore, "System for Cross-domain Identity
              Management: Protocol", RFC 7644, DOI 10.17487/RFC7644,
              September 2015, <https://www.rfc-editor.org/info/rfc7644>.

Appendix A.  Event Stream Resource Type and Schema Definitions

   The "EventStream" resource type definition is defined as follows:













Hunt                       Expires May 2, 2018                 [Page 40]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:ResourceType"],
  "id": "EventStream",
  "name": "EventStream",
  "endpoint": "/EventStreams",
  "description": "Endpoint and event configuration and status for SEC EVENT streams.",
  "schema": "urn:ietf:params:scim:schemas:event:2.0:EventStream",
  "schemaExtensions": []
}

           Figure 35: SCIM EventStream Resource Type Definition

   The resource type above is discoverable in the "/ResourceTypes"
   endpoint of a SCIM service provider and informs SCIM clients about
   the endpoint location of EventStream resources and the SCIM schema
   used to define the resource.  The corresponding schema for the
   EventStream resource MAY be retrieved from the SCIM "/Schemas"
   endpoint (see Section 3.2 [RFC7644]).

   The attributes for the EventStream resource type are defined in
   Section 2.1.

  {
    "id" : "urn:ietf:params:scim:schemas:event:2.0:EventStream",
    "name" : "EventStream",
    "description" : "Event Stream Configuration",
    "attributes" : [
      {
        "name" : "eventUris",
        "type" : "string",
        "multiValued" : true,
        "description" : "An array of String value containing a logical
        unique URI for Events that may be issued in the Stream",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readOnly",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "eventUris_req",
        "type" : "string",
        "multiValued" : true,
        "description" : "An array of String value containing a logical
        unique URI for Events that an Event Receiver is requesting.",
        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",



Hunt                       Expires May 2, 2018                 [Page 41]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "eventUris_avail",
        "type" : "string",
        "multiValued" : true,
        "description" : "An array of String value containing a logical
        unique URI for Events that are supported by the Transmitter",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readOnly",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "methodUri",
        "type" : "string",
        "multiValued" : false,
        "description" : "A String value containing the URI for the
        method used to deliver SET events. The method used indicates
        the required configuration parameters for an
        operational Event Stream configuration.",
        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "deliveryUri",
        "type" : "string",
        "multiValued" : false,
        "description" : "A String value containing the URI for a
        feed endpoint used to pick up or deliver SET events based on
        a configured method.",
        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "iss",
        "type" : "string",
        "multiValued" : false,
        "description" : "The URI for the publisher of the SETs that will
        be issued for the Event Stream.",



Hunt                       Expires May 2, 2018                 [Page 42]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "aud",
        "type" : "string",
        "multiValued" : true,
        "description" : "An OPTIONAL Array of JSON String values which
        are URIs representing the audience(s) of the Event Stream.
        Values SHALL be the value of SET "aud" claim sent to the Event
        Receiver.",
        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "iss_jwksUri",
        "type" : "string",
        "multiValued" : false,
        "description" : "An OPTIONAL
        String that contains the URL of the SET issuers public JSON
        Web Key Set [RFC7517]. This contains the signing key(s) the
        Event Receiver uses to validate SET signatures from the Event
        Transmitter that will be used by the Event Receiver to verify
        the authenticity of issued SETs.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "aud_jwksUri",
        "type" : "string",
        "multiValued" : false,
        "description" : "An OPTIONAL JSON Web Key Set [RFC7517] that
        contains the Event Receiver's encryption keys that MAY be used
        by the Event Transmitter to encrypt SET tokens for the specified
        Event Receiver.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",



Hunt                       Expires May 2, 2018                 [Page 43]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


        "uniqueness" : "none"
      },
      {
        "name" : "status",
        "type" : "string",
        "multiValued" : false,
        "description" : "An OPTIONAL JSON String keyword that indicates
        the current state of an Event Stream.  More information on the E
        vent Stream state can be found in Section 2.3.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none",
        "canonicalValues" : [
              "on",
              "off",
              "verify",
              "paused",
              "fail"
            ]
      },
      {
        "name" : "maxRetries",
        "type" : "integer",
        "multiValued" : false,
        "description" : "An OPTIONAL JSON number indicating the maximum
        number of attempts to deliver a SET.  A value of '0' indicates
        there is no maximum. Upon reaching the maximum, the Event Stream
        'status' attribute is set to 'failed'.",
        "required" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "maxDeliveryTime",
        "type" : "integer",
        "multiValued" : false,
        "description" : "An OPTIONAL number indicating the maximum
        amount of time in seconds a SET MAY take for successful delivery
        per request or cumulatively across multiple retries.  Upon
        reaching the maximum, the Event Stream 'status' is set to
        'failed'.  If undefined, there is no maximum time.",
        "required" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"



Hunt                       Expires May 2, 2018                 [Page 44]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


      },
      {
        "name" : "minDeliveryInterval",
        "type" : "integer",
        "multiValued" : false,
        "description" : "An OPTIONAL JSON integer that represents the
        minimum interval in seconds between deliveries.  A value of '0'
        indicates delivery should happen immediately.  When delivery is
        a polling method (e.g.  HTTP GET), it is the expected time
        between Event Receiver attempts.  When in push mode (e.g.
        HTTP POST), it is the interval the server will wait before
        sending a new event or events.",
        "required" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
      {
        "name" : "txErr",
        "type" : "string",
        "multiValued" : false,
        "description" : "An OPTIONAL JSON String keyword value.  When
        the Event Stream has 'status' set to 'fail', a keyword condition
        is set.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none",
        "canonicalValues" : [
              "connection",
              "tls",
              "dnsname",
              "receiver",
              "other"
            ]
      },
      {
        "name" : "txErrDesc",
        "type" : "string",
        "multiValued" : false,
        "description" : "An OPTIONAL String value that is usually human
        readable that provides further diagnostic detail by the
        indicated 'txErr' error code.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",



Hunt                       Expires May 2, 2018                 [Page 45]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


        "uniqueness" : "none"
      },
      {
        "name" : "verifyNonce",
        "type" : "string",
        "multiValued" : false,
        "description" : "An OPTIONAL String value that when changed
        or set by a Control Plane client will cause the Event Transmitter
        to issue a single Verify Event based on the value provided.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "writeOnly",
        "returned" : "never",
        "uniqueness" : "none"
      },
      {
        "name" : "subjects",
        "type" : "complex",
        "multiValued" : true,
        "description" : "An optional list of subjects that are part of
        the Stream.",
        "required" : false,
        "subAttributes" : [
          {
            "name" : "value",
            "type" : "string",
            "multiValued" : false,
            "description" : "Identifier of the member of this Group.
            The contents of this parameter are determined by the value
            of the sub-attribute 'type'.",
            "required" : false,
            "caseExact" : false,
            "mutability" : "immutable",
            "returned" : "default",
            "uniqueness" : "none"
          },
          {
            "name" : "type",
            "type" : "string",
            "multiValued" : false,
            "description" : "A label indicating the type of resource,
            e.g., OIDC Connect Subject, SAML Subject, Email address,
            Telephone Number, SCIM User or SCIM Group, or the URI
            of some other network addressable subject.",
            "required" : false,
            "caseExact" : false,
            "canonicalValues" : [
              "User",



Hunt                       Expires May 2, 2018                 [Page 46]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


              "Group",
              "OIDC",
              "SAML"
              "EMIL",
              "PHONE",
              "URI"
            ],
            "mutability" : "immutable",
            "returned" : "default",
            "uniqueness" : "none"
          }
        ],
        "mutability" : "readWrite",
        "returned" : "request"
      }
    ],

    "meta" : {
      "resourceType" : "Schema",
      "location" :
        "/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:Group"
    }
  },

Appendix B.  Acknowledgments

   The editors would like to thanks the members of the SCIM WG which
   began discussions of provisioning events starting with: draft-hunt-
   scim-notify-00 in 2015.

   This draft is a re-work of material from Sections 2 and 4 of draft-
   hunt-secevent-distribution-01.  The editor would like to thank Marius
   Scurtescu, Tony Nadalin, and Morteza Ansari for their contributions
   in previous drafts.

   The editor would like to thank the participants in the the SECEVENTS
   working group for their support of this specification.

Appendix C.  Change Log

   Draft 00 - PH - First Draft based on control plane portions of draft-
   hunt-idevent-distribution

Author's Address







Hunt                       Expires May 2, 2018                 [Page 47]


Internet-Draft       draft-hunt-secevent-stream-mgmt        October 2017


   Phil Hunt (editor)
   Oracle Corporation

   Email: phil.hunt@yahoo.com















































Hunt                       Expires May 2, 2018                 [Page 48]


Html markup produced by rfcmarkup 1.124, available from https://tools.ietf.org/tools/rfcmarkup/