Network Working Group | P. Hunt, Ed. |
Internet-Draft | Oracle |
Intended status: Standards Track | M. Ansari |
Expires: October 6, 2016 | Cisco |
April 4, 2016 |
Identity Event Subscription Protocol
draft-hunt-idevent-distribution-00
This specification defines a registry to define methods to distribute identity events to subscribers. It includes a definition for publishers to use HTTP POST to push events to clients via web callback, and a method for subscribers to use HTTP GET to retrieve events in a feed queue.
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 October 6, 2016.
Copyright (c) 2016 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 (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.
Many service providers have a requirement to co-ordinate state of entities and services between each other. Each service provider often tracks different information about entities and thus positive update commands such as HTTP POST or PATCH may not be possible as this would introduce complex error and signal requirements. In contrast, when one service provider notifies another of an event, the subscriber is free to take local action as it has access to the relevant local state information.
This specification defines a set of capabilities that can be used by publishers to distribute identity event tokens (see [idevent-token]) to subscribers. This specification defines a registry for profiling existing messaging protocols that may be used for event delivery by a particular subscriber. The specification also defines two methods HTTP POST and GET to deliver events.
The following diagram shows a typical Identity Feed Provider and its event notification Subscribers:
+------------+ +-------------+ | |Feeds Catalog | | | +------------------------> | | Identity | | Identity | | Feed |Subscription Request | Feed | | Provider <------------------------+ Subscriber | | |Subscription Confirm | | | +------------------------> | | | | | | | | | | +------------------------> | | |Event Delivery | | | | | | +------------+ +-------------+
Figure 1: Subscription Management
An Identity feed provider may be directly integrated into a source service that generates events, or it may be a separate service entity that off-loads event distribution from the event generator to act as its publisher. For the purposes of this specification, while event distribution may be handled separately, this specification will consider the definition of those exchanges out of scope.
This specification addresses event delivery only. It is assumed that there are other protocols or administrative methods for providing event feeds catalogs and subscription management.
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] .
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.
The following definitions are specific to Identity Event publishing:
When an event occurs, the feed provider constructs a JWT based Identity Event token [idevent-token] that describes the event. The feed provider determines the feeds that the event should be published to, and determines which subscribers are effected. The process by which events are categorized and selected for subscribers is out of scope of this specification.
When an event is available for a subscriber, the feed provider attempts to deliver the event based on the subscribers registered delivery mechanism. For example,
After an event is delivered to all subscribers, feed providers will not typically maintain event records or histories. As such, published events SHOULD be self-validating (e.g. signed).
If delivery to any particular subscriber has been delayed for an extended period of time, the feed provider MAY suspend the subscription and even stop maintaining outstanding events for the subscriber at its discretion and available resources. See subscription state in Section 4.2.
Upon receiving an event token (or tokens in the case of multiple events), the subscriber reads the token and validates it. Based on the content of the token, the subscriber decides what if any action it needs to take in response to the event. For example, in response to a SCIM event [idevent-scim] indicating a changed resource, the subscriber might perform a SCIM GET request (see Section 3.4 [RFC7644] ) to the affected resource URI in order to confidentially obtain the current state of the affected resource. The receiver of the event then determines what action, if any, needs to be taken within the subscriber's domain.
The action a receiver takes may be substantially different than merely copying the action of the publisher. A single publisher event MAY trigger multiple receiver actions. For example, upon receiving notification that a user resource has been added to a group, the receiver may first determine that the user does not exist in the subscriber's domain. The receiver translates the event into two actions. Retrieve the user (e.g. using SCIM GET) and then provisions the user locally. After enabling the user, the receiver then enables the user for the application associated with membership in the publisher's group.
An event feed is service that provides a series of events made available that a client (known as the "subscriber") MAY subscribe to. A subscription contains the information about a particular client and their subscription to a particular feedUri. The subscription metadata describes the client that has subscribed, the current delivery status indicating whether all events are delivered, pending, or whether delivery has failed. Subscription metadata also describes the method of event delivery and any associated configuration information (see Section 4.2 ).
A feed 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:
How feeds are defined or implemented is out of the scope of this specification. The above are examples about how feeds might be defined.
A feed description consists of the following singular attributes:
The following multi-valued attributes are defined:
A subscription represents an agreement to deliver events from a specified feed of events from a feed provider to an individual subscriber entity. The method of delivery and the parameters for delivery are specified a set of parameters called subscription metadata (see Section 4.2).
A subscription is defined by the following metadata:
In order to avoid ongoing communication issues and to minimize requirements for feed providers to maintain events indefinitely, a verification process is used to confirm that the requested event distribution endpoints are correct and that events may be successfully delivered. When a subscription is created or modified, the feed provider SHALL set the subscription state (subStatus) to verify and send a test event message to the subscriber. If the event is delivered successfully, the subscription state MAY be turned to on. If however verification fails due to a hard failure, or the client fails to retrieve the event within a [reasonable?] period, the subscription status SHALL be set to fail.
When using the WebCallback mode, or any other 'push'-style communication scheme, the verification process serves to verify that the identified endpoint consents to receiving events and is valid. This prevents a notification server from flooding an endpoint which did not actually request an event subscription.
To confirm a subscription, the feed provider SHALL send a verification event to the subscriber using the registered deliveryUri mechanism. The event contains the following attributes:
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 including confirmation of keys.
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.
{ "jti": "4d3559ec67504aaba65d40b0363faad8", "eventUris":["urn:ietf:params:event:event:verify"], "iat": 1458496404, "iss": "https://scim.example.com", "aud":[ "https://scim.example.com/Feeds/98d52461fa5bbc879593b7754", "https://scim.example.com/Feeds/5d7604516b1d08641d7676ee7" ], "confirmChallenge":"ca2179f4-8936-479a-a76d-5486e2baacd7", "exp": 1458497000 }
Upon receiving a subscription confirmation request, a confirming subscriber responds with a confirmation using the method described in the deliveryUri profile. The response includes a challengeResponse value. For example, depending on the deliveryUri profile used, the subscriber might respond with the value of confirmChallenge . For example, if the request is received via HTTP/1.1 POST, then the following HTTP response is used to confirm. A non-normative example of the response is:
HTTP/1.1 200 OK Content-Type: application/json { "challengeResponse":"ca2179f4-8936-479a-a76d-5486e2baacd7" }
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).
For clients that use a subscription mode (e.g. urn:ietf:params:scimnotify:api:messages:2.0:poll) that pick up events from a subscription endpoint, the client MAY confirm the subscription by simply reading the event using an HTTP GET at the endpoint specified by the attribute subUri in the subscription. Once the confirmation event has been retrieved, the service provider MAY mark the subscription as confirmed.
A non-normative example of a client, having previously subscribed, picking up the initial subscription confirmation message.
GET /Events/548b7c3f77c8bab33a4fef40/ Host: example.com Accept: application/scim+json Authorization: Bearer h480djs93hd8 Content-Length: ...
To which the event provider responds with the available events which SHOULD include a confirmation event (non-normative example):
{ "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":"" }
Each event delivery method SHALL have the following information:
This method allows a feed provider to use HTTP POST to deliver events to a registered web callback URL. The deliveryUri value for this method is urn:ietf:params:event:delivery:HTTP:webCallback.
Depending on the settings for the subscription metadata, this delivery method is capable of delivering multiple signed events in a single delivery.
The content-type for this method is application/json and consists of a JSON object containing the following attributes:
{ "eventTkns":[ "eyJhbGciOiJub25lIn0 . eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6 WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW 1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ ."], "eventCnt":1, "eventPend":false }
Example Web Callback POST Message
See Section 4.3.1.
To deliver an event, the publisher generates an event delivery message and uses HTTP POST to the registered endpoint.
POST /Events HTTP/1.1 Host: notify.example.com Accept: application/json Content-Type: application/json { "eventTkns":[ "eyJhbGciOiJub25lIn0 . eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6 WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW 1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ .", "eyJhbGciOiJub25lIn0 . eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6 WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW 1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ ." ], "eventCnt":2 }
Example Web Callback POST Request
HTTP/1.1 202 Accepted
HTTP/1.1 202 Accepted Content-Type: application/json { "invalidEvents":[ {"err":"duplicate", "description":"Event already received. Ignored.", "value":"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:
Since the normal operation of the Feed Provider is to forward events to registered subscribers, the Feed Provider 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.
[[TO BE COMPLETED]]
This method allows a subscriber to use HTTP GET to poll for events to the subUri provided to the subscriber by the publisher. The deliveryUrivalue for this method is urn:ietf:params:event:delivery:HTTP:poll.
Depending on the settings for the subscription metadata, this delivery method is capable of delivering multiple signed events in a single delivery poll request.
The delivery message is the same as Section 5.2.2.
Subscription verification is described in Section 4.3.2.
To deliver an event, the publisher places the event in a queue/buffer associated with the client subscription that will be requested at some future time by the subscriber using the URI specified in subUri.
To pick up any events, the subscriber issues an HTTP GET to the URI provided by the event publisher in subUri.
In response to the HTTP GET request, the feed publisher responds with a body that corresponds to the event delivery message format (see Section 5.2.2).
An example polling request by a subscriber. The example has been formatted for readability:
GET /subscriber/66444423ab24430fb06cf0de1ab75247 Host: pub.example.com Accept: application/json Authorization: Bearer h480djs93hd8
An example poll response (formatted for readability):
HTTP/1.1 200 OK Content-Type: application/json Location: https://pub.example.com/subscriber/66444423ab24430fb06cf0de1ab75247 { "eventTkns":[ "eyJhbGciOiJub25lIn0 . eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6 WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW 1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ .", "eyJhbGciOiJub25lIn0 . eyJwdWJsaXNoZXJVcmkiOiJodHRwczovL3NjaW0uZXhhbXBsZS5jb20iLCJmZWV kVXJpcyI6WyJodHRwczovL2podWIuZXhhbXBsZS5jb20vRmVlZHMvOThkNTI0Nj FmYTViYmM4Nzk1OTNiNzc1NCIsImh0dHBzOi8vamh1Yi5leGFtcGxlLmNvbS9GZ WVkcy81ZDc2MDQ1MTZiMWQwODY0MWQ3Njc2ZWU3Il0sInJlc291cmNlVXJpcyI6 WyJodHRwczovL3NjaW0uZXhhbXBsZS5jb20vVXNlcnMvNDRmNjE0MmRmOTZiZDZ hYjYxZTc1MjFkOSJdLCJldmVudFR5cGVzIjpbIkNSRUFURSJdLCJhdHRyaWJ1dG VzIjpbImlkIiwibmFtZSIsInVzZXJOYW1lIiwicGFzc3dvcmQiLCJlbWFpbHMiX SwidmFsdWVzIjp7ImVtYWlscyI6W3sidHlwZSI6IndvcmsiLCJ2YWx1ZSI6Impk b2VAZXhhbXBsZS5jb20ifV0sInBhc3N3b3JkIjoibm90NHUybm8iLCJ1c2VyTmF tZSI6Impkb2UiLCJpZCI6IjQ0ZjYxNDJkZjk2YmQ2YWI2MWU3NTIxZDkiLCJuYW 1lIjp7ImdpdmVuTmFtZSI6IkpvaG4iLCJmYW1pbHlOYW1lIjoiRG9lIn19fQ ." ], "eventCnt":2 }
[[TO BE DISCUSSED: Should the subscriber be able to request events based on an event id (e.g. since), by date, etc. How does a client know it got them all? Should we use ETags to signal whether there are new events?]]
[[TO BE DISCUSSED: The polling mode provides no way for a subscriber to indicate parsing validation errors directly in response to a delivery. When errors occur, subscriber administrators must re-confirm the subscription configuration.]]
[[TO BE COMPLETED]]
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]
TODO: Registration for Notification Mechanisms
TODO: Registration of Event Types
[idevent-token] | Oracle Corporation, "Identity Event Token (work in progress)" |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997. |
[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. |
[RFC5988] | Nottingham, M., "Web Linking", RFC 5988, DOI 10.17487/RFC5988, October 2010. |
[RFC7519] | Jones, M., Bradley, J. and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015. |
[RFC7643] | Hunt, P., Grizzle, K., Wahlstroem, E. and C. Mortimore, "System for Cross-domain Identity Management: Core Schema", RFC 7643, DOI 10.17487/RFC7643, September 2015. |
[RFC7644] | Hunt, P., Grizzle, K., Ansari, M., Wahlstroem, E. and C. Mortimore, "System for Cross-domain Identity Management: Protocol", RFC 7644, DOI 10.17487/RFC7644, September 2015. |
[I-D.ietf-webpush-protocol] | Thomson, M., Damaggio, E. and B. Raymor, "Generic Event Delivery Using HTTP Push", Internet-Draft draft-ietf-webpush-protocol-02, November 2015. |
[idevent-scim] | Oracle Corporation, "SCIM Event Extensions (work in progress)" |
[RFC7515] | Jones, M., Bradley, J. and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May 2015. |
[RFC7516] | Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", RFC 7516, DOI 10.17487/RFC7516, May 2015. |
[RFC7517] | Jones, M., "JSON Web Key (JWK)", RFC 7517, DOI 10.17487/RFC7517, May 2015. |
The editor would like to thank the participants in the the SCIM working group for their support of this specification.
Draft 00 - PH - First Draft