Internet DRAFT - draft-hunt-scim-notify
draft-hunt-scim-notify
Network Working Group P. Hunt, Ed.
Internet-Draft Oracle
Intended status: Standards Track M. Ansari
Expires: September 9, 2015 Cisco
I. Glazer
Salesforce
March 8, 2015
SCIM Event Notification
draft-hunt-scim-notify-00
Abstract
The System for Cross-Domain Identity Management (SCIM) specification
is an HTTP based protocol that makes managing identities in multi-
domain scenarios easier to support through a standardized HTTP
service.
In a SCIM environment, changes to resources may be requested by
multiple parties. As time goes by an interested subscriber may wish
to be informed about resource state changes that are occurring at the
SCIM service provider. This specification defines a hub notification
service that can be used to publish and distribute events to
interested registered subscribers.
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 http://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 September 9, 2015.
Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the
document authors. All rights reserved.
Hunt, et al. Expires September 9, 2015 [Page 1]
Internet-Draft draft-hunt-scim-notify March 2015
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://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.
Table of Contents
1. Introduction and Overview . . . . . . . . . . . . . . . . . . 3
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 4
1.2. Definitions . . . . . . . . . . . . . . . . . . . . . . . 5
2. Notification Process . . . . . . . . . . . . . . . . . . . . 6
3. SCIM Events . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1. Event Types . . . . . . . . . . . . . . . . . . . . . . . 7
3.2. Event Metadata . . . . . . . . . . . . . . . . . . . . . 8
3.3. Event Message . . . . . . . . . . . . . . . . . . . . . . 9
4. Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.1. SCIM Server Resource Link Headers . . . . . . . . . . . . 11
4.2. Feeds Endpoint . . . . . . . . . . . . . . . . . . . . . 12
5. SCIM Feeds . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.1. Feed Discovery . . . . . . . . . . . . . . . . . . . . . 13
6. Notification Hub . . . . . . . . . . . . . . . . . . . . . . 13
6.1. Subscriber Services . . . . . . . . . . . . . . . . . . . 13
6.1.1. Subscription Metadata . . . . . . . . . . . . . . . . 14
6.1.2. Request Subscription . . . . . . . . . . . . . . . . 15
6.1.3. Subscription Verification . . . . . . . . . . . . . . 17
6.1.4. Cancel A Subscription . . . . . . . . . . . . . . . . 19
6.2. Publisher Services . . . . . . . . . . . . . . . . . . . 19
6.2.1. Feed Registration . . . . . . . . . . . . . . . . . . 19
6.2.2. Feed Definition Operations . . . . . . . . . . . . . 23
6.2.3. Event POSTing . . . . . . . . . . . . . . . . . . . . 23
6.2.4. Polling for Publisher Events . . . . . . . . . . . . 25
6.3. Event Delivery . . . . . . . . . . . . . . . . . . . . . 25
6.3.1. Web Callback . . . . . . . . . . . . . . . . . . . . 26
6.3.2. Polling . . . . . . . . . . . . . . . . . . . . . . . 26
6.3.3. Push Notification Extensions . . . . . . . . . . . . 26
7. Security Considerations . . . . . . . . . . . . . . . . . . . 26
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26
8.1. SCIM Event Notification Mechanism Registry . . . . . . . 26
8.2. SCIM Event Type Registry . . . . . . . . . . . . . . . . 26
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.1. Normative References . . . . . . . . . . . . . . . . . . 26
9.2. Informative References . . . . . . . . . . . . . . . . . 27
Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 27
Hunt, et al. Expires September 9, 2015 [Page 2]
Internet-Draft draft-hunt-scim-notify March 2015
Appendix B. Acknowledgments . . . . . . . . . . . . . . . . . . 27
Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 27
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28
1. Introduction and Overview
The System for Cross-Domain Identity Management (SCIM) specification
is an HTTP based protocol that makes managing identities in multi-
domain scenarios easier to support through a standardized HTTP
service.
In a SCIM environment, changes to resources may be requested by
multiple parties. As time goes by an interested subscriber may wish
to be informed about resource state changes that are occurring at the
SCIM service provider. This specification defines a hub notification
service that can be used to publish and distribute events to
interested registered subscribers. This specification's design is
inspired by [pubsubhubbub], but is significantly adapted to use JSON
and JWT tokens.
The goal of this specification is to avoid alternative approaches
such as ATOM feeds or LDAP changelogs that require historical change
history be maintained. These techniques not only causes scalability
issues, but may also provide security risks over time because of the
difficulties in filtering history and data for specific subscribers
based on their authorized access to information.
This specification defines a Notification Hub which receives events
from a SCIM Service Provider. The role of the notification hub is to
offload the SCIM Service provider by taking care of:
o Re-publishing events to appropriate Feeds where the event is a
match.
o Distributing events to registered subscribers using their
registered notification mechanism.
o Persisting events as necessary until all registered subscribers
have received the event.
Hunt, et al. Expires September 9, 2015 [Page 3]
Internet-Draft draft-hunt-scim-notify March 2015
The following diagram shows a typical Notification Hub and its
service relationships with SCIM Service Providers and registered
notification Subscribers.
+----------------+
| SCIM |
|Service Provider|
| "Publisher" |
+-------+--------+
|
|
+-------v--------+
| Notification |
| "Hub" |
+------+---------+
| | |
| | |
| v v
+-----v------+
| Feed |+
|"Subscriber"||+
| |||
+------------+||
+------------+|
+------------+
Figure 1: Notification Relationships
The specification supports two layers of authentication. The base
layer uses normal HTTP Authentication techniques that may include TLS
mutual-authentication and OAuth access token authorizations. The
second layer involves the exchange of JWT keys that may be used to
authenticate messages and encrypt content for registered subscribers.
For a feed subscriber, this specification makes it possible to
receive update or change-of-state notifications that may be of
interest. By providing state change event notifications, a large
cross-section of subscribers can be developed to support use cases
such as: work-flow co-ordination, overall enterprise identity
governance co-ordination, and cross-domain replication. [DISCUSS:
should we elaborate on this?]
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
Hunt, et al. Expires September 9, 2015 [Page 4]
Internet-Draft draft-hunt-scim-notify March 2015
requirements of the protocol or application features and behavior
that affect the interoperability 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].
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
SCIM Service Provider The SCIM service provider as defined in SCIM
core schema. A SCIM service provider publishes events to be
distributed by a trusted Notification Hub.
Notification Hub A service provider in the same domain as the SCIM
Service Provider. Because the "hub" manages individual
subscribers, the "hub" must have access to all event message
content so that it may encrypt it for specific subscribers when
required.
Event An event is a SCIM change event that is to be distributed to
one or more registered subscribers. An event is encapsulated as a
JWT token and MAY be signed or encrypted using JWS/JWE for
authentication and confidentiality reasons.
Feed A feed is a URI that describes the set of resources and events
under which events may be issued. An interested client registers
with the Notification Hub to subscribe to events associated with a
feed.
Notification Mechanism A URI that describes the chosen event
notification mechanism. When subscribing to a feed, a client may
choose a specific mechanism by which it wishes to receive
notification events. [This specification will define a delivery
extension point.] Examples of possible delivery mechanisms
include:
* Registered Callback - The Notification Hub will deliver events
by using HTTP POST to a registered endpoint.
Hunt, et al. Expires September 9, 2015 [Page 5]
Internet-Draft draft-hunt-scim-notify March 2015
* Polling - The subscriber will periodically poll the
notification hub for one or more events by performing an HTTP
GET to a specified URI (mailbox endpoint).
* WebPush - An HTTP/2 based method for delivering real-time
events. https://tools.ietf.org/wg/webpush/
* Platform/Mobile Notification Services (e.g. Apple Push
Notification Service, Google Cloud Messaging, and Windows
Notification Services). Future profiles that support delivery
of SCIM events vis platform specific messaging services.
Subscriber A Subscriber registers to receive event notifications
from a Notification Hub on behalf of a SCIM Service Provider.
2. Notification Process
When a resource has changed, a SCIM Service Provider constructs a JWT
that describes the event. The service provider MAY include the
affected feedURIs for the Notification Hub to process. The SCIM
service provider publishes the event to the Notification Hub using
either an HTTP POST, or will hold the event (along with other events)
until the notification retrieves pending events via an HTTP GET.
After an event is delivered to the Notification Hub, the service
provider has no further obligation to maintain or distribute the
event. The service provider MAY subsequently receive requests from
subscribers for more information about the current state of a
resource using a normal SCIM GET request.
An event is a set of attributes combined together in a JWT token. An
event typically includes:
o Affected resource URI
o A list of attributes modified
o An event type (patch, create, delete)
o Optional attribute values for affected attributes. Note: JWT MUST
be a JWE if raw data is included.
An event describes what state change has occurred at a publishing
service provider resource. An event should not be interpreted as a
command to change by the subscriber.
Upon receiving an event, the notification hub, categorizes the event
and determine which feeds should be notified of the event. For each
feed, the notification hub delivers the events to any registered
Hunt, et al. Expires September 9, 2015 [Page 6]
Internet-Draft draft-hunt-scim-notify March 2015
clients. If the event contains raw attribute values, the
notification hub encrypts the JWT so that only the registered
subscriber(s) may receive the event. To deliver the event, the
notification hub uses the registered notification mechanism requested
by the subscriber.
Upon receiving an event (or events for polling subscribers), the
subscriber reads the JWT or JWE token and validates it if signed (a
JWS). Based on the content of the JWT, the subscriber decides what
if any action it needs to take in response to the event from the SCIM
Service Provider. The subscriber MAY perform a SCIM GET request to
the affected resource URI in order to confidentially obtain the
current state of the affected resource.
3. SCIM Events
A SCIM Event notifies a subscriber of a possible change in state of a
resource contained within a specified feed. The event specifies the
URI of an affected resource and the type of event that has occurred.
The event message may also contain additional metadata describing the
attributes that may have been modified, and/or values representing
the final state of the affected attribute(s).
3.1. Event Types
This specification defines 8 events. Additional event types may be
defined using the Event Type IANA registration process described in
Section 8.2.
ADD
The specified resource URI was added to the feed. An add does not
necessarily indicate a resource is new or has been recently
created, but rather that it has been added to a feed. For
example, an existing user has had a new role (e.g. CRM_User)
added to their profile which has caused their resource to join a
feed.
CREATE
The new resource URI has been created at the service provider and
has been added to the feed. When a CREATE event is sent, a
corresponding ADD event is not issued. For example, a new user
was created via HTTP POST, whose attribute profile met the
criteria of a current feed.
ACTIVATE
The specified resource (e.g. User) has been activated or is
otherwise available for use. [TODO: this seems to be a higher
Hunt, et al. Expires September 9, 2015 [Page 7]
Internet-Draft draft-hunt-scim-notify March 2015
level concept that may consist of multiple attributes changing -
How to differentiate between activate and MODIFY events]
MODIFY
The specified resource has been updated (e.g. one or more
attributes has changed).
DEACTIVATE
The specified resource (e.g. User) has been deactivated. [TODO:
Is there a corresponding MODIFY event?]
DELETE The specified resource has been deleted from the service
provider and is also removed from the feed. When a DELETE is
sent, a corresponding REMOVE is not issued.
REMOVE
The specified resource has been removed from the feed. Removal
does not indicate that the resource was deleted or otherwise
deactivated.
PASSWORD
The specified resource (e.g. User) has changed its password. If
secure exchange is possible with the subscriber, the event may
also include the raw password update text. A PASSWORD event MUST
be transmitted in encrypted form (see Section 3.3).
CONFIRMATION A special event that is used during Polling Feed
Registrations and Web Callback URI subscriptions to confirm
successful configuration of an event feed. The contents of a
CONFIRMATION event SHALL be defined by the registration process
documented in following sections [TODO add reference]
3.2. Event Metadata
The following are attributes that may be included in an event
message:
schemas A multi-valued String attribute that contains the value
"urn:ietf:params:scim:schemas:notify:2.0:Event".
feedUris A multivalued String containing the URIs of the feeds the
event is associated with. The notification hub may filter these
values to be only those values relevant to a particular
subscriber. In doing so, the notification hub is not obligated to
deliver repeated events to the same subscriber. [DISCUSS: Is this
problematic if the subscriber is using multiple endpoints?]
publisherUri
Hunt, et al. Expires September 9, 2015 [Page 8]
Internet-Draft draft-hunt-scim-notify March 2015
A single valued string containing the URI of the SCIM Service
Provider publishing the event. Typically this is the SCIM Service
Provider's root endpoint.
resourceUris
A multi-valued string that contains the URIs of one or more
affected resources in the event. For each resource URI included,
the event must be identical.
type
A single-valued string that contains the type of event as
described in Section 3.1 or defined in the event extension
registry in Section 8.2.
attributes
A multi-valued list of affected SCIM attributes. Each attribute
listed may be a fully-qualified attribute name or an attribute
"path" as defined in Figure 7 of Section 3.3.2 of
[I-D.ietf-scim-api]
values
A JSON object structure containing the affected attributes and
their associated values. If the "values" attribute is supplied,
the event message MUST be encrypted. Service providers SHOULD
take care to ensure that eligible subscribers are able to see
attribute values. Alternatively, subscribers MAY use the
resourceURIs to retrieve the final attribute values. When doing
so, the SCIM service provider can then assess the subscribers
right to obtain the actual attribute values.
For a password change event, the clear text password attribute
value MAY be included in the values attribute. "PASSWORD" event.
3.3. Event Message
Hunt, et al. Expires September 9, 2015 [Page 9]
Internet-Draft draft-hunt-scim-notify March 2015
An event message is a JSON structure consisting of the attributes
described in the Event Metadata section above. The following is a
non-normative example event that has been modified for readability:
{
"schemas":["urn:ietf:params:scim:schemas:notify:2.0:Event"],
"publisherUri":"https://scim.example.com",
"feedUris":[
"https://jhub.example.com/Feeds/98d52461fa5bbc879593b7754",
"https://jhub.example.com/Feeds/5d7604516b1d08641d7676ee7"
],
"resourceUris":[
"https://scim.example.com/Users/44f6142df96bd6ab61e7521d9"
],
"type":"CREATE",
"attributes":["id","name","userName","password","emails"],
"values":{
"emails":[
{"type":"work","value":"jdoe@example.com"}
],
"password":"not4u2no",
"userName":"jdoe",
"id":"44f6142df96bd6ab61e7521d9",
"name":{
"givenName":"John",
"familyName":"Doe"
}
}
}
Figure 2: Example Event JSON Data
When transmitted, the above JSON body must be converted into a JWT as
per [I-D.ietf-oauth-json-web-token]. In this example, because the
event contains attribute values, the token MUST be encrypted per JWE
(see [I-D.ietf-jose-json-web-encryption]) before transmission.
The following is an example of a SCIM Event expressed in an unsecured
JWT token. The JWT header of:
{"alg":"none"}
Base64url encoding of the octets of the UTF-8 representation of the
header yields:
eyJhbGciOiJub25lIn0
Hunt, et al. Expires September 9, 2015 [Page 10]
Internet-Draft draft-hunt-scim-notify March 2015
The example JSON Event Data is encoded as follows:
eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV
kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj
FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ
WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6
WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ
hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG
VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX
SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk
b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF
tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW
1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ
The encoded JWS signature is the empty string. Concatenating the
parts yields:
eyJhbGciOiJub25lIn0
.
eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV
kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj
FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ
WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6
WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ
hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG
VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX
SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk
b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF
tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW
1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ
.
Figure 3: Example Unsecured Event Token
To create and or validate a signed or encrypted event token follow
the instructions in section 7 of [I-D.ietf-oauth-json-web-token].
4. Discovery
4.1. SCIM Server Resource Link Headers
A SCIM Service Provider MAY provide resource link headers per
[RFC5988] for the purpose of feed and endpoint discovery. When
querying a SCIM Service Provider, the following resource link headers
are defined:
rel=notifyHub
Hunt, et al. Expires September 9, 2015 [Page 11]
Internet-Draft draft-hunt-scim-notify March 2015
The URI provided is the base URI for a SCIM Notification Hub and
its associated HTTP services.
rel=oauth
The URI provides is for an OAuth authorization endpoint that will
authorize access to a SCIM feed. When requesting authorization,
clients should request an OAuth scope of "notifyHub". This allows
the client to register and request access to specific feeds. [TBD
is this needed?]
rel=scimfeed
The URI provided is for a SCIM Feed for the current resource. The
feed URI might be specific to the current resource, or for a
larger set of resources (e.g. /Users). There may be more than one
feed for any particular resource or set of resources.
4.2. Feeds Endpoint
A service provider may publish a set of Feed resources that each
describe an available feed at a "/Feeds" endpoint. [TODO: Define the
schema and resource type configuration for a feed based on SCIM Feed
definitions in the next section]
5. SCIM Feeds
A SCIM Service Provider may define feeds based on a number of
criteria. This specification does not specify or limit the basis for
which a service provider defines a feed or how feed URIs should be
specified. Some possible methods for defining feeds include:
By Resource
Each resource might have its own event notification feed. For
example, a User's mobile application may require notification of
changes or rights defined in a SCIM User resource associated with
the mobile user.
By Endpoint
A feed might be defined by an endpoint where any event relating to
a resource within an endpoint is transmitted to subscriber. This
type of feed is likely to have many notifications as the number of
resources in an endpoint grows (e.g. /Users). Typically only
privileged partners would be allowed to use this type of feed.
For example an enterprise wishes to be notified of all events to
any of its Users assuming all Users within the endpoint are
related to the subscribing enterprise.
By Filter
Hunt, et al. Expires September 9, 2015 [Page 12]
Internet-Draft draft-hunt-scim-notify March 2015
A feed might define a collection of resources based on a SCIM
search filter. Based on a set of matching criteria a resource may
be included in a feed. Note that this type of feed may require
extra processing by the service provider to determine if any
particular resource event matches the filter criteria. It may
also be difficult for the service provider to notify subscribers
of Feed additions and deletions as these will occur dynamically
based on the filter.
By Group
A designated SCIM Group could be used to define the resources
within a particular feed. [TODO define a FEED Group extensions
that define the attributes and events included within a particular
Feed Group]
5.1. Feed Discovery
[TBD] May be discovered by resource link headers, or by querying for
SCIM Feed Groups [TBD].
6. Notification Hub
The notification hub is usually deployed as a separate but trusted
server (in the same security domain) in relation to a SCIM Service
Provider. A single server MAY support both SCIM services and the API
described in the notification hub. The notification hub's API
follows the SCIM API specification unless indicated otherwise. The
notification hub provides 2 core services:
o A set of publisher endpoints that allows SCIM Service Providers to
define feeds and to post SCIM Events.
o A set of subscriber endpoints that allows subscription clients to
subscribe to feeds and to receive events.
6.1. Subscriber Services
Subscribers MAY manage their subscriptions using the notification
hub's "/Subscriptions" endpoint. With the exception of the PATCH
operation (which is not used), endpoints within the notification hub
follow the same message format and API guidelines as per the SCIM API
specification (see [I-D.ietf-scim-api]). The subscriptions endpoint
supports HTTP GET, POST, PUT, and DELETE to manage the full life
cycle of a subscription.
Hunt, et al. Expires September 9, 2015 [Page 13]
Internet-Draft draft-hunt-scim-notify March 2015
6.1.1. Subscription Metadata
The following attributes are used to define a feed subscription by a
subscription client.
feedUri
A string value containing the URI for a feed supported by the
notification hub. REQUIRED.
mode
A REQUIRED single-valued string which is a URI with one of the
following values:
"urn:ietf:params:scimnotify:api:messages:2.0:webCallback" - The
notification hub will pass SCIM Events using HTTP POST to the
callback URI specified in the attribute "eventUri".
"urn:ietf:params:scimnotify:api:messages:2.0:poll" - The
subscriber will poll for SCIM Events using HTTP GET at the URI
specified in the attribute "eventUri"
eventUri
When "mode" is set to
"urn:ietf:params:scimnotify:api:messages:2.0:poll", "eventUri"
specifies the endpoint where the subscriber will retrieve pending
events. When set to
"urn:ietf:params:scimnotify:api:messages:2.0:webCallback", it
contains the URI where the notification hub will POST events.
feedJwk
AN OPTIONAL JSON Web Key (see [I-D.ietf-jose-json-web-key]) that
will be used to sign published events. If present, the subscriber
can authenticate events relayed from the notification hub.
confidentialJwk
The subscriber may provide a public JSON Web Key (see
[I-D.ietf-jose-json-web-key]) that may be used by the notification
hub to encrypt event messages for the subscriber.
pollInterval
The optional period in seconds between event polls when the
subscriber plans to poll for events from the notification hub.
The interval is used by the hub to determine if a subscriber is
offline or has otherwise failed over a number of intervals. The
hub MAY then change the state of the feed and/or perform some out-
of-band administrative alert.
state
Hunt, et al. Expires September 9, 2015 [Page 14]
Internet-Draft draft-hunt-scim-notify March 2015
An optional value which indicates the current state of the feed
which is:
"on" - the default setting indicates the notification hub
processing events and will pass them to the subscriber.
"verify" - the subscription is pending verification. While in
"verify", published events SHALL NOT be stored or delivered to
the subscriber.
"paused" - indicates the notification hub is temporarily
suspending delivery to subscriber. While in "paused" events
MAY be posted and will be delivered when state returns to "on".
"off" - indicates that the subscription is no longer passing
events. While in off mode, the subscription is maintained, but
new events are ignored and not processed.
"fail" - Indicates that the notification hub was unable to
deliver events to the subscriber for an extended period of
time, or due to a call failure to the registered web call back
URI.
6.1.2. Request Subscription
To request a subscription, a client performs a SCIM POST to the
/Subscriptions endpoint with a HTTP Body consisting of a JSON object
based on the attributes described in Section 6.1.1. The request MUST
include the "schemas" attribute with a value of:
"urn:ietf:params:scim:schemas:notify:2.0:Subscription".
Hunt, et al. Expires September 9, 2015 [Page 15]
Internet-Draft draft-hunt-scim-notify March 2015
The following is a non-normative example subscription creation
request.
POST /Subscriptions HTTP/1.1
Host: notify.example.com
Accept: application/scim+json
Content-Type: application/scim+json
Authorization: Bearer h480djs93hd8
Content-Length: ...
{
"schemas":
["urn:ietf:params:scim:schemas:notify:2.0:Subscription"],
"feedUri":"https://example.com/v2/Feeds/548b7c3f77c8bab33a4fef40",
"mode":"urn:ietf:params:scimnotify:api:messages:2.0:webCallback",
"eventUri":"https://subscriber.com/Events",
"state":"verify",
"feedJwk":{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key for Example.com SCIM Publisher"
}
}
Figure 4: Example Subscription Creation Request
Hunt, et al. Expires September 9, 2015 [Page 16]
Internet-Draft draft-hunt-scim-notify March 2015
In response to a successful subscription creation request, the server
responds with HTTP Status 200 and a representation of the completed
subscription. The following is a non-normative example response that
has been formatted for display purposes:
HTTP/1.1 201 Created
Content-Type: application/scim+json
Location:
https://example.com/v2/Subscriptions/548b7c3f77c8bab33a4fef40
{
"schemas":
["urn:ietf:params:scim:schemas:notify:2.0:Subscription"],
"feedUri":"https://example.com/v2/Feeds/548b7c3f77c8bab33a4fef40",
"mode":"urn:ietf:params:scimnotify:api:messages:2.0:webCallback",
"eventUri":"https://subscriber.com/Events",
"feedJwk":{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key for Example.com SCIM Publisher"
}
}
Upon receiving a successful subscription response, the subscribing
client SHOULD check the subscription "state". If set to "verify",
the client needs to complete the subscription verification process in
the following section.
6.1.3. Subscription Verification
In order to avoid ongoing communication issues and to minimize
requirements for notification hubs to maintain events indefinitely, a
verification process is used to confirm that the requested event
distribution endpoints are correct and that an event may be
successfully delivered.
When using the WebCallback mode, or any other "push"-style
communication scheme, the verification process also serves to verify
that the identified endpoint consents to receiving events. This
prevents a notification server from flooding an endpoint which did
not actually request an event subscription.
To confirm a subscription, the notification hub SHALL POST (or
otherwise send) an event to the endpoint identified by eventUri or as
specified by the registered push extension. The event contains the
following attributes:
Hunt, et al. Expires September 9, 2015 [Page 17]
Internet-Draft draft-hunt-scim-notify March 2015
type Set to the value of "CONFIRMATION"
publisherUri Set to the URI used to identify the notification hub.
feedUris MUST be set to a value that matches the subscription
"feedUri" requested.
confirmChallenge A random String value that the subscriber SHALL
echo back in its response.
expires A SCIM DateTime value that indicates the time the
verification request will expire. Once expired, the server will
set the subscription state to "fail".
If a confidential JWK was supplied, then the event SHOULD be
encrypted with the provided key. Successful parsing of the message
confirms that both the endpoint is valid and the subscribers ability
to parse the message.
A non-normative JSON representation of an event to be sent to a
subscriber as a subscription confirmation. Note the event is not yet
encoded as a JWT token.
{
"schemas":["urn:ietf:params:scim:schemas:notify:2.0:Event"],
"publisherUri":"https://scim.example.com",
"feedUris":[
"https://notify.example.com/Feeds/98d52461fa5bbc879593b7754"
],
"type":"CONFIRMATION",
"confirmChallenge":"ca2179f4-8936-479a-a76d-5486e2baacd7",
"expires":""
}
Hunt, et al. Expires September 9, 2015 [Page 18]
Internet-Draft draft-hunt-scim-notify March 2015
Upon receiving a subscription confirmation request, a consenting
client responds with a confirmation that includes the original
"confirmChallenge" value. A non-normative example of the response
is:
HTTP/1.1 200 OK
Content-Type: application/scim+json
{
"schemas":["urn:ietf:params:scim:schemas:notify:2.0:Confirm"],
"challengeResponse":"ca2179f4-8936-479a-a76d-5486e2baacd7"
}
}
As per the above figure, upon receiving and parsing a confirmation
event, the subscriber MUST respond by returning a JSON structure that
includes the attribute "challengeResponse" with a matching value to
"confirmChallenge" that was sent in the event. The response is not
formatted as an event token but rather a JSON object with schemas set
to "urn:ietf:params:scim:schemas:notify:2.0:Confirm". If the
subscriber returns a non-matching value or an HTTP status other than
a 200 series response, the subscription "state" SHALL be set to
"fail". A declining subscriber MAY simply respond with any 400
series HTTP error (e.g. 404).
6.1.4. Cancel A Subscription
To cancel a subscription, the subscriber MAY perform a SCIM DELETE
against the resource URI for the subscription. In the event the
subscriber wants to temporarily suspend the subscription, it may
modify the "state" attribute to a value of "off".
6.2. Publisher Services
With the exception of the PATCH operation (which is not used), the
endpoints within the Notification Hub follow the same message format
and API guidelines as per the SCIM API specification (see
[I-D.ietf-scim-api]). Feed Registration supports HTTP GET, POST,
PUT, and DELETE to manage the full life cycle of a Feed.
6.2.1. Feed Registration
To register a feed, a SCIM Service Provider makes a call to the
Notify Hub's registration endpoint ("<Notification_base>/Feeds") by
performing an HTTP POST containing a JSON structure based on the
parameters defined in the following section. In response, the server
will return a feed location and an optional public key which the
publisher may use to encrypt posted events to the Notification Hub.
Hunt, et al. Expires September 9, 2015 [Page 19]
Internet-Draft draft-hunt-scim-notify March 2015
In the registration request, the "schemas" attribute MUST be included
in the registration request and be set to:
"urn:ietf:params:scim:schemas:notify:2.0:Feed". The following is a
non-normative example of a request to create a new SCIM Feed. Note
that additional spacing has been introduced for clarity.
POST /Feeds HTTP/1.1
Host: notify.example.com
Accept: application/scim+json
Content-Type: application/scim+json
Authorization: Bearer h480djs93hd8
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:schemas:notify:2.0:Feed"],
"feedName":"bjensen",
"feedDescription":"Feed for changes related to bjensen",
"feedData":{
"$ref":
"https://example.com/v2/Users/453a-919d-413861904646"
}
"mode":"post",
"publisherJwk":{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key for Example.com SCIM Publisher"
}
}
Figure 5: Example Feed Creation Request
In response to a successful registration request, the Notification
Hub SHALL respond with the location of the created feed in the HTTP
Location header, and the HTTP body SHALL contain a JSON structure
with the accepted registration parameters and MAY include in its
response, the following additional parameter:
confidentialJwk
In its response, the Notification Hub may provide a public JSON
Web Key (see [I-D.ietf-jose-json-web-key]) that may be used by the
client to encrypt event messages for the notification hub. The
key might be the notification hub's general public key, or it may
be generated per registered feed. Accordingly, registering SCIM
Service Providers should assume that each key returned MAY be
specific to the corresponding registered feed.
Hunt, et al. Expires September 9, 2015 [Page 20]
Internet-Draft draft-hunt-scim-notify March 2015
HTTP/1.1 201 Created
Content-Type: application/scim+json
Location:
https://example.com/v2/Feeds/548b7c3f77c8bab33a4fef40
ETag: 9d1c124149f522472e7a511c85b3a31b
{
"schemas":["urn:ietf:params:scim:schemas:notify:2.0:Feed"],
"id":"548b7c3f77c8bab33a4fef40",
"feedName":"bjensen",
"feedDescription":"Feed for changes related to bjensen",
"feedData":{
"type":"resource",
"$ref":
"https://example.com/v2/Users/453a-919d-413861904646"
}
"mode":"post",
"state":"on",
"publisherJwk":{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key for Example.com SCIM Publisher"
}
"confidentialJwk":{
...<feed public crypto key>...
}
}
Figure 6: Example Feed Creation Response
6.2.1.1. Feed Request Parameters
To create a feed, the following parameters are used by the SCIM
Service Provider to register a feed:
feedName
A required string value containing a name for the feed. May be
used in administrative user interfaces to assist subscribers in
feed selection. The value MUST be unique within a given
administrative domain.
feedDescription
An optional string value containing text that describes the
content of the feed. May be used in administrative user
interfaces to assist subscribers in feed selection.
Hunt, et al. Expires September 9, 2015 [Page 21]
Internet-Draft draft-hunt-scim-notify March 2015
feedData
A single-valued complex attribute which contains feed information.
$ref A SCIM Reference attribute that contains a URI as defined by
"feedType".
mode
A single-valued string which is one of the following values:
"post" - The publisher will pass SCIM Events using the HTTP
POST option.
"poll" - The notification hub will poll for SCIM Events using
HTTP GET at the specified URI ("feedPollUri").
The choice of "mode" is largely an internal decision based on the
respective implementation architecture of the hub and its
corresponding service providers that are publishing feeds. For
many service providers with high rates of change, it may be
limiting to store events for pick-up by a hub or subscriber (who
is "polling"). In many cases service providers will normally
prefer to simply POST events as generated to the hub so that they
do not have to worry about persistence, etc. [TODO: is this a
case for WebPUSH?]
feedPollUri
When "mode" is set to "poll", "feedPollUri" specifies the endpoint
where the Notification hub will retrieve pending updates from the
publishing SCIM Service Provider.
publisherJwk
The publishers optional JSON Web Key (see
[I-D.ietf-jose-json-web-key]) that will be used to publish events.
By registering a key, the Notification hub can authenticate events
from SCIM Service Provider.
pollInterval
The optional period in seconds between event polls when the
Notification Hub is set to poll for events from the SCIM Service
Provider.
state
An optional value which indicates the current state of the feed
which is:
"on" - the default setting indicates the notification hub is
receiving events and will forward them to current feed
Hunt, et al. Expires September 9, 2015 [Page 22]
Internet-Draft draft-hunt-scim-notify March 2015
subscribers. If no subscribers exist or all subscribers have
been notified, the events are deleted.
"pending" - indicates the notification hub is temporarily
suspending delivery to subscribers. While in "pending" events
may be posted and will be held for delivery by the hub until
state returns to "on" (when events are subsequently delivered)
or "fail".
"off" - indicates an administrator or publisher has requested
the feed to stop delivery. While in off mode, the subscribers
are maintained, but new events shall be ignored.
"fail" - usually used in connection with "polling" feeds.
Indicates that the notification hub has been unable to retrieve
events from the service provider for an extended period of
time, or due to a call failure to the registered polling call
back URI. [TODO: discuss whether a hub should continue to
queue events in failed mode]
6.2.2. Feed Definition Operations
As with any SCIM resource, a notification Feed MAY be:
o Queried by using a SCIM HTTP GET request. In particular,
subscribers may perform a GET to the "/Feeds" endpoint to discover
available feeds.
o Updated by using a SCIM PUT request.
o Deleted using a SCIM DELETE request. Upon receiving a delete
request, all corresponding notification subscriptions SHALL also
be deleted. For this reason, instead of deletion, setting feed
status to "off" is recommended.
6.2.3. Event POSTing
To create an event, a SCIM Event Publisher, simply performs an HTTP
POST "/Events" appended to the Feed location URI. The body of the
request includes a JSON object with the following attributes:
schemas A multi-valued string containing the value "
A non-normative example is as follows:
Hunt, et al. Expires September 9, 2015 [Page 23]
Internet-Draft draft-hunt-scim-notify March 2015
POST /Feeds/548b7c3f77c8bab33a4fef40/Events HTTP/1.1
Host: notify.example.com
Accept: application/scim+json
Content-Type: application/scim+json
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:schemas:notify:2.0:Feed"]
"eventToken":
"eyJhbGciOiJub25lIn0
.
eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV
kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj
FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ
WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6
WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ
hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG
VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX
SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk
b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF
tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW
1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ
."
}
In response, if the event token is validated, the server SHALL
indicate successful submission by responding with:
HTTP/1.1 204 No Content
Since the normal operation of the notification hub is to forward
events to registered subscribers, the Notification Hub is not
obligated to inform the publisher of a permanent event URI that was
created. Servers MAY allow HTTP clients to check for undelivered
events by performing a GET against the same endpoint as the Event
submission endpoint described above.
[TODO: Describe the error conditions and responses]
A SCIM Event Publisher MAY publish an event of type "CONFIRMATION" to
the provided publication endpoint to confirm successful
configuration. "CONFIRMATION" events SHALL NOT be passed on to
subscribers.
Hunt, et al. Expires September 9, 2015 [Page 24]
Internet-Draft draft-hunt-scim-notify March 2015
6.2.4. Polling for Publisher Events
When a publisher registers a feed with a "mode" of "poll", the
notification hub SHALL confirm configuration by performing an HTTP
GET to the "feedPollUri" provided by the publisher during
registration of the feed. On the first GET, the notification server
should receive an event of type "CONFIRMATION". The confirmation
event should contain an event with the "resourceUris" attribute set
to a value that corresponds to the URI of the feed registration.
In its response to the notification polling for events by performing
an HTTP Get to the "feedPollUri", the server shall construct a JSON
message, with a schemas attribute consisting of the value:
"urn:ietf:params:scim:api:messages:2.0:EventList" and a multivalued
attribute of "eventTokens" containing one or more event tokens. The
following non-normative example has been modified for brevity and
readability:
HTTP/1.1 200 OK
Content-Type: application/scim+json
Location: https://example.com/FeedPoll/548b7c3f77c8bab33a4fef40
{
"schemas":["urn:ietf:params:scim:api:messages:2.0:EventList"],
"eventTokens":[
"eyJhbGciOiJub25lIn0
.
eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV
kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj
FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ
WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6
WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ
hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG
VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX
SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk
b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF
tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW
1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ
."]
}
6.3. Event Delivery
[TODO: Detail the event delivery extension point and define the
following 3 methods]
Hunt, et al. Expires September 9, 2015 [Page 25]
Internet-Draft draft-hunt-scim-notify March 2015
6.3.1. Web Callback
6.3.2. Polling
6.3.3. Push Notification Extensions
7. Security Considerations
The synchronizing of User passwords between administrative domains is
to be handled with great care. From a security perspective the re-
use of passwords across service providers is to be highly
discouraged. However, in the enterprise user experience, if the
perception of the user is that service providers from multiple
domains are part of a single corporate application environment, then
password synchronization MAY be appropriate as part of an overall
identity management and governance mechanism.
[TO BE COMPLETED]
8. IANA Considerations
8.1. SCIM Event Notification Mechanism Registry
TODO: Registration for Notification Mechanisms
8.2. SCIM Event Type Registry
TODO: Registration of Event Types
9. References
9.1. Normative References
[I-D.ietf-oauth-json-web-token]
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
(JWT)", draft-ietf-oauth-json-web-token-32 (work in
progress), December 2014.
[I-D.ietf-scim-api]
Hunt, P., Grizzle, K., Ansari, M., Wahlstroem, E., and C.
Mortimore, "System for Cross-Domain Identity Management:
Protocol", draft-ietf-scim-api-15 (work in progress),
February 2015.
Hunt, et al. Expires September 9, 2015 [Page 26]
Internet-Draft draft-hunt-scim-notify March 2015
[I-D.ietf-scim-core-schema]
Hunt, P., Grizzle, K., Wahlstroem, E., and C. Mortimore,
"System for Cross-Domain Identity Management: Core
Schema", draft-ietf-scim-core-schema-17 (work in
progress), March 2015.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, RFC
3986, January 2005.
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010.
9.2. Informative References
[I-D.ietf-jose-json-web-encryption]
Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)",
draft-ietf-jose-json-web-encryption-40 (work in progress),
January 2015.
[I-D.ietf-jose-json-web-key]
Jones, M., "JSON Web Key (JWK)", draft-ietf-jose-json-web-
key-41 (work in progress), January 2015.
[I-D.ietf-jose-json-web-signature]
Jones, M., Bradley, J., and N. Sakimura, "JSON Web
Signature (JWS)", draft-ietf-jose-json-web-signature-41
(work in progress), January 2015.
[pubsubhubbub]
Google, Inc, Google, Inc, Six Apart Ltd, and Notifixious
Inc., "PubSubHubbub Core 0.4 -- Working Draft", .
Appendix A. Contributors
Appendix B. Acknowledgments
The editor would like to thank the participants in the the SCIM
working group for their support of this specification.
Appendix C. Change Log
Draft 00 - PH - First Draft
Hunt, et al. Expires September 9, 2015 [Page 27]
Internet-Draft draft-hunt-scim-notify March 2015
Authors' Addresses
Phil Hunt (editor)
Oracle Corporation
Email: phil.hunt@yahoo.com
Morteza Ansari
Cisco
Email: morteza.ansari@cisco.com
Ian Glazer
Salesforce.com
Email: iglazer@salesforce.com
Hunt, et al. Expires September 9, 2015 [Page 28]