Internet DRAFT - draft-wahl-scim-profile
draft-wahl-scim-profile
Internet Engineering Task Force M. Wahl, Ed.
Internet-Draft Microsoft Corporation
Intended status: Standards Track June 21, 2019
Expires: December 23, 2019
SCIM Profile for Provisioning Users Into Relying Party Applications
draft-wahl-scim-profile-00
Abstract
This document specifies a profile of the System for Cross-Domain
Identity Management Protocol (SCIM). This profile defines how an
identity provider, acting as a SCIM client, can notify a relying
party application of changes to user accounts.
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 December 23, 2019.
Copyright Notice
Copyright (c) 2019 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.
Wahl Expires December 23, 2019 [Page 1]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4
2. General Considerations . . . . . . . . . . . . . . . . . . . 4
2.1. Endpoints and Payload . . . . . . . . . . . . . . . . . . 4
2.2. Authentication and Authorization . . . . . . . . . . . . 5
2.3. SCIM Servers With Multiple Identity Providers and
Multiple tenants . . . . . . . . . . . . . . . . . . . . 5
2.4. Case Sensitivity in Payloads . . . . . . . . . . . . . . 6
2.5. Overlapping and Throttling Requests . . . . . . . . . . . 6
2.6. Bulk Operations and Service Provider Configuration . . . 7
2.7. Error Results . . . . . . . . . . . . . . . . . . . . . . 7
2.8. Non-Requirements . . . . . . . . . . . . . . . . . . . . 7
3. Minimum Schema and Schema Discovery . . . . . . . . . . . . . 7
3.1. Additional Considerations for the ID Attribute . . . . . 9
3.2. Additional Considerations ExternalId Attribute . . . . . 9
3.3. Resources for Schema Discovery . . . . . . . . . . . . . 10
4. Operations on Users . . . . . . . . . . . . . . . . . . . . . 12
4.1. When a User Account is added in the Identity Provider . . 12
4.1.1. Optionally locating a User by ExternalId . . . . . . 12
4.1.2. Creating a User with POST . . . . . . . . . . . . . . 13
4.2. When a User Account's Attributes Change . . . . . . . . . 14
4.2.1. Retrieving a User by ID . . . . . . . . . . . . . . . 15
4.2.2. Modifying a User with PATCH . . . . . . . . . . . . . 16
4.2.3. Indicating User Sign In Blocked . . . . . . . . . . . 18
4.3. When the User's Account is to be Removed . . . . . . . . 19
4.3.1. Removing a User with DELETE . . . . . . . . . . . . . 19
4.4. User Account Retrieval from the Relying Party . . . . . . 20
4.4.1. Retrieving Multiple Users in a Single Request . . . . 20
5. Security Considerations . . . . . . . . . . . . . . . . . . . 20
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.1. Normative References . . . . . . . . . . . . . . . . . . 21
7.2. Informative References . . . . . . . . . . . . . . . . . 22
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 22
1. Introduction
Relying party applications implement single-sign on protocols, such
as SAML or OpenID Connect, for user authentication from an identity
provider, and often store one or more attributes about each of user
identities from those identity providers. The term relying party is
defined in OpenID Connect [OPENID.OIDC]. The single sign in flows
between an identity provider and a relying party often allow the
identity provider to include one or more attributes about a user
signing in, such as their name, at the time of the sign in event.
However, those attributes might also change, and those changes be
Wahl Expires December 23, 2019 [Page 2]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
relevant, to a relying party application, even when no user is
signing in. For example, if an identity provider deletes a user,
then the relying party application would never see a subsequent sign
in event from that user.
The SCIM protocol RFC 7644 [RFC7644] is an application-level, REST
protocol for provisioning and managing identity data on the web.
SCIM can be leveraged for many use cases, including transfer of
attributes about users to a relying party application (see RFC 7643
[RFC7643] section 3). This profile describes how SCIM can be used
between an identity provider and a relying party application, so the
identity provider can notify a relying party application acting as a
SCIM server of changes to user accounts, out of band from the normal
sign-in flow of those users. . This profile defines the
interactions between an identity provider as the initiator, a SCIM
client, and a replying party application, as the SCIM server, in the
following scenario:
o A replying party application has a database of user resources with
attributes of those users relevant to that application. It also
trusts one or more identity providers to authenticate users on its
behalf and provide claims about that user. It also copies the
values from some of those claims from those identity providers
into its database.
o An identity provider has its own distinct database of user
resources. That database is the source of its claims which it
provides to a relying party application. Normally this is done
through a sign-in flow using a protocol such as SAML or Open ID
Connect.
o The identity provider also wishes to keep the relying party
application up to date, even when no user is signing in to that
replying party, and so uses SCIM to send changes to the
application.
Based on this profile, the identity provider acts as a SCIM client
and sends the changes via the SCIM protocol to the application acting
as a SCIM server. The relying party application represents each user
account in its database which is visible to the identity provider, as
a SCIM User resource. This enables the relying party application to
have a more up-to-date copy of users with its identity provider, than
if it was only being updated when a user signs in.
For example, if the identity provider deletes a user, this deletion
event can be transferred to the relying party application via SCIM,
so that the application also cleans up any data associated with that
user -- who won't be accessing that application in future. Or, for
Wahl Expires December 23, 2019 [Page 3]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
another example, if the user changes their name in the identity
provider, then this change can be sent to the application, so that
the user's name is displayed correctly within the application to
other users.
This profile is not intended to be a comprehensive or bidirectional
replication protocol; instead, it provides basic consistency for user
resources sent from an identity provider to a relying party,
necessary for a user to be able to sign into the relying party.
Management of other resource types besides users is outside the scope
of this profile.
1.1. Requirements Language
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 RFC 2119 [RFC2119].
2. General Considerations
A SCIM client in an identity provider will, either upon specific
changes in its database (e.g., when there is a new user), or at
intervals, send queries and changes to the relying party
application's SCIM server. This section covers the basic
requirements for a SCIM client and server implementation. The
sections following this one cover the schema requirements, the
pattern of operations in this profile, and security considerations.
2.1. Endpoints and Payload
A SCIM client and server MUST support HTTPS. A SCIM client and SCIM
server MUST have previously agreed on the HTTPS URI for the SCIM
server's "Users" endpoint, below the Base URI (Base URI is defined in
section 1.3 of RFC 7644 [RFC7644]). Additionally, the client and
server MAY have also previously agreed on the HTTPS URIs for the SCIM
server's "ResourceTypes" and "Schemas" endpoints. These URI MAY
contain the string "v2", for example
"https://api.example.com/scim/tenant/example.org/v2/Users" might be a
base endpoint for Users in a particular application.
A SCIM client implementing this profile MUST use JSON-structured
request bodies and expect JSON-structured responses using the UTF-8
RFC 3629 [RFC3629] encoding, in the Content-Type "application/
scim+json".
These are to be sent via HTTPS using TLS, RFC 8446 [RFC8446].
Wahl Expires December 23, 2019 [Page 4]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
2.2. Authentication and Authorization
This profile is intended for service-to-service communication: a SCIM
client is not acting under the context of an individual person, it is
operating on behalf of the identity provider.
A SCIM client and a SCIM server SHOULD support one or more
authentication mechanisms to authenticate a SCIM client to a SCIM
server. One mechanism SHOULD be bearer tokens.
If a SCIM client supports bearer tokens, then the client SHOULD
include the token in the Authorization header of each request, as
described in section 2.1 of RFC 6750 [RFC6750]. This profile does
not cover establishing common authentication keys, which is assumed
to occur out of band.
A SCIM server does not need to support operations by un-authenticated
clients. A SCIM server MUST only permit a client to query, create,
update and delete one or more User resources, after the token is
validated.
2.3. SCIM Servers With Multiple Identity Providers and Multiple tenants
If a SCIM server supports multiple tenants, then the operations
defined in this profile are relative to a single tenant. If a SCIM
server is part of an application which is affiliated with multiple
independent identity providers, and the operator of that SCIM server
permits each tenant to choose its identity providers, then that SCIM
server MUST ensure that the operations performed by one SCIM client
on behalf of one tenant do not affect another tenant.
A SCIM server SHOULD give each SCIM client a distinct identity and
authorization information.
A SCIM server SHOULD ensure that within a single tenant, or within
the application if the application is not multi-tenanted, each SCIM
client's updates do not affect those of other SCIM clients.
There are several ways for a SCIM server to achieve that. For
example, a SCIM server might have each tenant or each SCIM client use
a unique User endpoint.
For example, if the application had tenants example.com and
example.org, and identity providers A and B, and tenant example.com
used identity providers A and B but tenant example.org only allowed
identity provider B, then identity provider A would be instructed to
use endpoints /example.com/Users and /example.org/Users, and identity
provider B would be instructed to use endpoint /example.org/Users.
Wahl Expires December 23, 2019 [Page 5]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
Or, in another approach, a SCIM server MAY record which SCIM client
identity created each user resource, and only permit user resources
to be queried, updated or deleted by the same client.
2.4. Case Sensitivity in Payloads
As defined in RFC 7644 [RFC7644], attribute names and attribute
operators used in filters are case insensitive.
An implementation of this protocol SHOULD treat all other ABNF US-
ASCII strings as case insensitive. For example, in the following
PATCH body
{
"schemas":
["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":[{
"op":"remove",
"path":"emails[type eq \"work\"]"
}]
}
The case of these strings "schemas", "Operations", "op", "remove" and
"path" are not significant.
Most attribute values are case insensitive when matching, however the
values of the "id" attribute and the "externalID" attribute are case
sensitive.
2.5. Overlapping and Throttling Requests
A SCIM client MAY send multiple requests to a SCIM server, and need
not wait for one a response prior to sending another requests, with
one exception. A SCIM client SHOULD NOT send another PATCH request
for a particular User resource, if there was a PATCH request sent for
that same resource in the last 60 seconds for which the client did
not receive a response. A SCIM server need not process multiple
operations in the order they were sent by the client.
A SCIM server MAY throttle clients who send too many simultaneous
requests or too many requests in a short time interval, by returning
status code 429, as defined in RFC 6585 [RFC6585], to subsequent
requests. A SCIM client which receives status code 429 SHOULD wait
before retrying that request.
Wahl Expires December 23, 2019 [Page 6]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
2.6. Bulk Operations and Service Provider Configuration
A SCIM server MAY support bulk operations, and if it does SHOULD
support querying the service provider configuration. A SCIM server
is not required to support bulk operations or the service provider
configuration, and a server which does not support them SHOULD return
either an error or an empty result for a query for the
ServiceProviderConfig.
A SCIM client MAY query a SCIM server to determine if it supports
bulk operations, by sending a GET for ServiceProviderConfig, as
described in section 4 RFC 7644 [RFC7644]. If a SCIM server returns
an error to this query, then a SCIM client SHOULD assume that SCIM
server does not support bulk operations, and send subsequent requests
not using bulk operations.
2.7. Error Results
If a SCIM server implementing this profile encounters an error when
processing a request from a client, it SHOULD transmit the error in
the HTTP status code of the response, as described in section 3.2 of
RFC 7644 [RFC7644] and RFC 6585 [RFC6585].
2.8. Non-Requirements
A SCIM server implementing this profile MAY implement these or other
features, but a SCIM client SHOULD NOT assume they are supported
unless it has determined otherwise.
o HTTP cookies for authentication, or authentication not related to
OAuth (from RFC 7644 [RFC7644] section 2)
o sorting, paging or queries via POST (from RFC 7644 [RFC7644]
sections 3.4.2 and 3.4.3)
o updates via PUT (from RFC 7644 [RFC7644] sections 3.5.1)
o the Me URI fragment (from RFC 7644 [RFC7644] sections 3.11)
o eTags (from RFC 7644 [RFC7644] sections 3.14)
o anonymous requests (from RFC 7644 [RFC7644] sections 7.6)
3. Minimum Schema and Schema Discovery
SCIM defines a user schema in RFC 7643 [RFC7643]. A SCIM server
implementing this profile need not implement the full set of
Wahl Expires December 23, 2019 [Page 7]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
attributes of that schema, since those attributes are not necessarily
relevant to the application.
A SCIM server that supports a client creating users MUST recognize
the User resource schema, as described in section 4.1 of RFC 7643
[RFC7643], but does not need to support all of the attributes.
A SCIM server SHOULD recognize the Enterprise User schema extension
as described in section 4.3 of RFC 7643 [RFC7643].
From these schemas,
o A SCIM server MUST provide the attribute "ID" for all users.
o A SCIM server that supports a client creating users SHOULD support
the attribute "userName" being supplied by a SCIM client when
creating a user, or when the client is modifying a user.
o A SCIM server SHOULD support the attribute "active", as it allows
a SCIM client to temporarily de-activate a user.
o A SCIM server SHOULD support the attribute "displayName", with
values of at least 128 characters in length, being included when a
user resource is created and subsequently changed.
A SCIM server SHOULD NOT require any additional attributes besides
userName to be supplied by a SCIM client when creating a user.
If email addresses are relevant to a SCIM server application,
o That SCIM server SHOULD support the multi-valued attribute
"emails", for a client providing one value.
o That SCIM server MAY support a client providing more than one
value. As there is no way to indicate this at present, a SCIM
client SHOULD NOT require a SCIM server to support multiple
values.
o That SCIM server SHOULD support each value of "emails" having sub-
attributes "primary", "type" and "value", and SHOULD support sub-
attribute "type" having a value of "work".
For other attributes, if they are relevant to the application, and
can be supplied by the identity provider, then that application's
SCIM server MAY support storing them. In particular,
o A SCIM server MAY support the attribute "externalId", with values
of at least 64 characters in length.
Wahl Expires December 23, 2019 [Page 8]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
o A SCIM server MAY support the complex multi-valued attributes
"addresses" and "phoneNumbers", for a client providing one value
of each, and MAY support a client providing more than one value of
each attribute.
o A SCIM server MAY support the complex attribute "manager".
o A SCIM server MAY support the complex attribute "name", and if it
does, SHOULD support the sub-attributes "formatted", "familyName",
"givenName", "middleName", "honorificPrefix" and
"honorificSuffix".
o A SCIM server MAY support the attributes "title" and
"preferredLanguage".
o A SCIM server MAY support the attribute "department" in the
enterprise 2.0 user schema.
3.1. Additional Considerations for the ID Attribute
A SCIM server SHOULD construct a value for the "ID" attribute which
is unique across all users which that SCIM server has in its
database, and is likely to have in the future. In addition, the
value SHOULD NOT include any characters which would require escaping
if they were included in a HTTPS URI, and be limited to 64 US-ASCII
characters in length. For example, a universally unique identifier
as described in RFC 4122 [RFC4122] would be a better choice for an id
value than an email address or person's display name.
A SCIM server SHOULD NOT change the value of the "ID" attribute once
it has been assigned to a User. Each subsequent GET of that user
SHOULD return the same value.
A SCIM client MUST NOT assign any semantics to the value of the "ID"
attribute which is receives from a SCIM server, other than it is
unique in that server.
3.2. Additional Considerations ExternalId Attribute
A SCIM client MAY construct a value for the "externalId" attribute
for its users. If it does, the values of that attribute SHOULD be
unique across all users which the identity provider has in its
database, and is likely to have in the future. In addition, the
value SHOULD NOT include any characters which would require escaping
if they were to be included in a HTTPS URI, and be limited to 64 US-
ASCII characters in length. For example, a universally unique
identifier as described in RFC 4122 [RFC4122] would be a better
Wahl Expires December 23, 2019 [Page 9]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
choice for an externalId value than an email address or person's
display name.
A SCIM server need not support the "externalId" attribute. If it
does, it SHOULD NOT assign any semantics to the value of the
"externalId" attributes.
3.3. Resources for Schema Discovery
A SCIM server SHOULD support schema discovery through the "Schemas"
and "ResourceTypes" endpoint URIs, as described in section 4 RFC 7644
[RFC7644], that specifies the attributes of the "User" resource type
which it supports.
A SCIM server that supports more than the minimum attributes of this
profile SHOULD publish through schema discovery any additional
attributes which it permits an identity provider to send.
A SCIM client MAY query a SCIM server to determine its schema, by
querying either of those collections with GET requests. If that SCIM
server returns an error to either query, then the SCIM client SHOULD
assume that SCIM server only supports the attributes "userName",
"ID", "active", "displayName" and "emails".
A SCIM server MUST ignore any additional resource types or attributes
in the returned schema which it does not understand.
For example, if "https://example.com/Schemas" was the endpoint for
"Schemas", and an authorized SCIM client sent
GET /Schemas HTTP/1.1
Authorization: Bearer h480djs93hd8
then a SCIM server might return
HTTP/1.1 200 OK
Content-Type: application/scim+json
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 1,
"Resources":[
{
"id":"urn:ietf:params:scim:schemas:core:2.0:User",
Wahl Expires December 23, 2019 [Page 10]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
"name":"User",
"description":"User Account",
"attributes":[
{
"name":"userName",
"type":"string",
"multiValued":false,
"required":true,
"caseExact":false,
"mutability":"readWrite",
"returned":"default",
"uniqueness":"server"
},
{
"name":"displayName",
"type":"string",
"multiValued":false,
"required":false,
"caseExact":false,
"mutability":"readWrite",
"returned":"default",
"uniqueness":"none"
},
{
"name":"active",
"type":"boolean",
"multiValued":false,
"required":false,
"mutability":"readWrite",
"returned":"default"
},
...
]
},
"meta":{
"resourceType":"Schema"
}
}
]
}
Wahl Expires December 23, 2019 [Page 11]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
4. Operations on Users
4.1. When a User Account is added in the Identity Provider
When a user account is added in the identity provider, then
o The identity provider's SCIM client MAY query a SCIM server to
locate the user by externalId. This step is OPTIONAL and a SCIM
client MAY omit it. A SCIM server is not required to support
querying by externalId, and if it does not, SHOULD return an error
for a filter on the "Users" endpoint with the externalId
attribute.
o If the user does already not exist in that SCIM server, or the
client did not query for it, then the identity provider's SCIM
client MAY send a POST to create the user in that SCIM server.
4.1.1. Optionally locating a User by ExternalId
If a SCIM server supports the "externalId" attribute, a SCIM client
MAY query a user by filtering for a value of the "externalId"
attribute. A SCIM server that implements this profile and supports
the "externalId" attribute SHOULD support filtering, as described in
section 3.4.2.22 of RFC 7644 [RFC7644]. That SCIM server MAY support
filtering by an equality match of the "externalId" attribute.
GET /Users?filter=externalId%20eq%201-2 HTTP/1.1
Authorization: Bearer h480djs93hd8
A SCIM client MAY query a SCIM server for a value of "externalId".
If the SCIM server supports this query and the attribute value is not
present on any current User in that SCIM server, the query response
is a successful response with 0 result resources.
HTTP/1.1 200 OK
Content-Type: application/scim+json
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 0,
"Resources":[]
}
Wahl Expires December 23, 2019 [Page 12]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
Otherwise, if there is a matching entry, then the query response is a
successful response with one result resource.
4.1.2. Creating a User with POST
To create a user, a SCIM client sends a POST request to the SCIM
server's "Users" endpoint. The order of fields in the request for
the attributes and metadata is not significant.
For example, if a SCIM client has determined a SCIM server supports
the attributes "email", "name" and "department", the SCIM client
would send
POST /Users HTTP/1.1
Host: example.com
Accept: application/scim+json
Content-Type: application/scim+json
Authorization: Bearer h480djs93hd8
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
"active":true,
"displayName":"Babs Jensen",
"emails":[{"primary":true","type":"work",
"value":"babs@example.com"}],
"meta":{"resourceType":"User"},
"userName":"bjensen@example.com",
"name":{
"formatted":"Ms. Barbara J Jensen III",
"familyName":"Jensen",
"givenName":"Barbara"
},
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User":{
"department":"Retail"
}
}
In addition to the attributes, a SCIM server MAY supply, and a SCIM
server SHOULD permit, the POST payload to contain the "schemas" and
"meta" fields. A SCIM client MUST NOT send the "id" attribute in the
POST request.
Wahl Expires December 23, 2019 [Page 13]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
If the creation was successful, then that server SHOULD return HTTP
status code 201 with a representation of the User resource. The
returned resource SHOULD have an "id" attribute. The returned
resource MAY contain some of the attributes supplied by that SCIM
client, but some attributes might not be returned if they were not
stored by that server, or if that server chooses not to return them.
The returned resource MAY have additional attributes generated by
that server.
HTTP/1.1 201 Created
Content-Type: application/scim+json
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:schemas:core:2.0:User"],
"id":"48af03ac28ad4fb88478"
}
If a user resource earlier existed but had been deleted, then a POST
request for a new User resource with the same userName, externalId or
other attributes as the previously deleted resource SHOULD NOT fail
due to attribute conflict. If it does fail due to an attribute
conflict, that server SHOULD return status code 409.
4.2. When a User Account's Attributes Change
When inside of an identity provider, one or more of a user's
attributes, such as display name, changes to a new value, then
The identity provider's SCIM client MAY query a SCIM server with a
GET to retrieve the user's current attributes, as known to that
server. This step is OPTIONAL and a SCIM client MAY omit it.
The identity provider's SCIM client MAY send a PATCH to update the
user in a SCIM server.
Wahl Expires December 23, 2019 [Page 14]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
If a SCIM client chooses to perform the query prior to the PATCH,
then the sequence of operations would resemble
+--------+ +--------+
| | | |
| |--(1) GET Request with id of user->| |
| | | |
| |<-(2) GET Response of that user----| |
| | | |
| IDP | | RP |
| | | |
| |--(3) PATCH Request for that user->| |
| | | |
| |<-(4) PATCH Response---------------| |
| | | |
+--------+ +--------+
4.2.1. Retrieving a User by ID
A SCIM client MAY query a SCIM server for a user created earlier, by
constructing an URI from the "Users" endpoint and the value of the
"id" attribute returned by that server in an earlier POST response.
For example,
GET /Users/6ba7b810-9dad-11d1-80b4-00c04fd430c8 HTTP/1.1
Authorization: Bearer h480djs93hd8
If that user still exists in that SCIM server, that SCIM server would
return it.
Wahl Expires December 23, 2019 [Page 15]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
HTTP/1.1 200 OK
Content-Type: application/scim+json
{
"schemas":["urn:ietf:params:scim:schemas:core:2.0:User"],
"id":"5d48a0a8e9f04aa38008",
"externalId":"58342554-38d6-4ec8-948c-50044d0a33fd",
"meta": {
"resourceType":"User"
},
"userName":"bjensen@example.com",
"name": {
"formatted":"givenName familyName",
"familyName":"familyName",
"givenName":"givenName",
},
"active": true,
"emails":[{
"value":"bjensen@example.com",
"type":"work",
"primary": true
}]
}
A SCIM client MAY use the returned user resource to determine if a
change it intends to send has already been made to a user.
If the user no longer exists, a SCIM server SHOULD return a 404
error.
If a SCIM client expected that the user was present, but received a
404 error, then that SCIM client MAY attempt to re-create a
replacement user with a POST operation, it cannot PATCH a deleted
user. Note that the new user SHOULD have a different "ID" attribute
value.
4.2.2. Modifying a User with PATCH
A SCIM client sends a PATCH operation to change one or more
attributes of the user. A SCIM server implementing this profile
SHOULD support PATCH, as described in section 3.5 of RFC 7644
[RFC7644].
o A SCIM server SHOULD support the "replace" operation for the
"userName" attribute.
Wahl Expires December 23, 2019 [Page 16]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
o A SCIM server SHOULD support the "add", "remove" and "replace"
operations for the attributes "active" and "displayName". A SCIM
client MUST only send the "add" operation for one of these
attributes if it has not previously set or retrieved that value
for that attribute, and MUST only send the "remove" operation for
one of these attributes if it has previously set or retrieved a
value for that attribute.
o If a SCIM server supports storing email addresses, then that SCIM
server SHOULD support the "add", "remove" and "replace" operations
for attribute "emails", and SHOULD support "replace" changing just
the value sub-attribute.
o A SCIM server MAY support operations on other attributes within
the PATCH.
o A SCIM client MUST NOT assume the response contains any or all of
the user attributes, as that SCIM server MAY choose to not return
the entire user resource and all its attributes in the response.
PATCH /Users/6ba7b810-9dad-11d1-80b4-00c04fd430c8 HTTP/1.1
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",
"value":{
"emails":[
{
"value":"bjensen@example.com",
"type":"work",
"primary":true
}
]
}]
}
A SCIM client MAY include multiple operations for different
attributes in a single PATCH.
Wahl Expires December 23, 2019 [Page 17]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
PATCH /Users/6ba7b810-9dad-11d1-80b4-00c04fd430c8 HTTP/1.1
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":"emails[type eq \"work\"].value",
"value":"bjensen@example.com"
},
{
"op":"Replace",
"path":"name.familyName",
"value":"Jensen"
}
]
}
4.2.3. Indicating User Sign In Blocked
An identity provider MAY wish to indicate that a user is unable to
sign in, and so is temporarily unable to access the application. A
SCIM client would send a change of the "active" attribute to the
value false to indicate the user will be unable to sign in. Later,
if the user is made able to sign in, that SCIM client would send a
new request to change the value of the "active" attribute of true.
Wahl Expires December 23, 2019 [Page 18]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
PATCH /Users/6ba7b810-9dad-11d1-80b4-00c04fd430c8 HTTP/1.1
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",
"value":{
"active":false
}]
}
4.3. When the User's Account is to be Removed
The identity provider MAY wish to indicate to the application that a
user will never be signing in again. As there is no undo, this
SHOULD only be done when the user account has been purged, e.g., if
the user account has been soft-deleted in the identity provider but
might be restored, the "active" attribute SHOULD be used instead of a
delete to indicate the user's undoable change of status.
4.3.1. Removing a User with DELETE
A SCIM client MAY delete a user it had created earlier, using the
DELETE operation.
DELETE /Users/6ba7b810-9dad-11d1-80b4-00c04fd430c8 HTTP/1.1
Host: example.com
Authorization: Bearer h480djs93hd8
If the delete was successful, a SCIM server SHOULD return status code
200.
A SCIM server MAY return an error 404 if the user was already
deleted, and SHOULD return a different error if the delete could not
be performed.
Wahl Expires December 23, 2019 [Page 19]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
4.4. User Account Retrieval from the Relying Party
At intervals, a SCIM client MAY wish to query a SCIM server to ensure
that SCIM server's copy of the user resources matches those expected
by that SCIM client. For example, the identity provider might wish
to reconcile with the application so that it can determine if one or
more changes are needed. This can be done by either querying for
each individual user with a GET operation, or retrieving multiple
users in a single request.
Querying for an individual user was shown in the earlier section,
Retrieving a User by ID.
4.4.1. Retrieving Multiple Users in a Single Request
A SCIM client MAY request to retrieve all users visible to it, by
sending a GET request for the "Users" endpoint.
GET /Users HTTP/1.1
Authorization: Bearer h480djs93hd8
That SCIM server SHOULD either return the result, return the result
in multiple pages, or reject the request if the response would be too
large to return.
HTTP/1.1 200 OK
Content-Type: application/scim+json
Content-Length: ...
{
"schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 1,
"Resources":[{
...
}]
}
5. Security Considerations
The security requirements of sections 7.1, 7.2, 7.3, 7.4, 7.5, 7.7
and 7.8 of RFC 7644 [RFC7644] apply to implementations of this
profile. A SCIM server following this protocol SHOULD NOT support
Wahl Expires December 23, 2019 [Page 20]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
anonymous requests, so section 7.6 of that RFC would not be
applicable.
If a SCIM server in an application is affiliated with multiple
independent identity providers, then multiple SCIM clients could be
making changes and querying the same SCIM server. The application
security model will take into consideration whether user resources
created from one identity provider are intended be visible to a
client acting on behalf of a different identity provider.
6. IANA Considerations
There are no IANA considerations in this document.
7. References
7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
2003, <https://www.rfc-editor.org/info/rfc3629>.
[RFC6585] Nottingham, M. and R. Fielding, "Additional HTTP Status
Codes", RFC 6585, DOI 10.17487/RFC6585, April 2012,
<https://www.rfc-editor.org/info/rfc6585>.
[RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization
Framework: Bearer Token Usage", RFC 6750,
DOI 10.17487/RFC6750, October 2012,
<https://www.rfc-editor.org/info/rfc6750>.
[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>.
Wahl Expires December 23, 2019 [Page 21]
Internet-Draft SCIM Profile for Relying Party Apps June 2019
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>.
7.2. Informative References
[OPENID.OIDC]
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and
C. Mortimore, "OpenID Connect Core 1.0 incorporating
errata set 1", November 2014,
<https://openid.net/specs/openid-connect-core-1_0.html>.
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
Unique IDentifier (UUID) URN Namespace", RFC 4122,
DOI 10.17487/RFC4122, July 2005,
<https://www.rfc-editor.org/info/rfc4122>.
Author's Address
Mark Wahl (editor)
Microsoft Corporation
1 Microsoft Way
Redmond, WA 98052
US
Email: mwahl@microsoft.com
Wahl Expires December 23, 2019 [Page 22]