Internet DRAFT - draft-hunt-scim-directory
draft-hunt-scim-directory
Network Working Group P. Hunt, Ed.
Internet-Draft Oracle Corporation
Intended status: Informational August 01, 2013
Expires: February 02, 2014
SCIM Directory Services
draft-hunt-scim-directory-01
Abstract
This document describes a directory server that implements the SCIM
protocol and schema [, its capabilities and access control model],
and optional support for LDAPv3 protocol. This specification extends
SCIM from provisioning to a general purpose access protocol in
support of data management applications (e.g. self-service systems)
and RESTful clients that need read/write access to a directory on the
Internet, between domains, or within a cloud.
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 February 02, 2014.
Copyright Notice
Copyright (c) 2013 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
Hunt Expires February 02, 2014 [Page 1]
Internet-Draft SCIM Directory August 2013
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Applications and Directories . . . . . . . . . . . . . . 3
1.2. Requirements Language . . . . . . . . . . . . . . . . . . 3
2. Data Models . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1. SCIM Model . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1. Object Model . . . . . . . . . . . . . . . . . . . . 4
2.1.2. Attributes . . . . . . . . . . . . . . . . . . . . . 5
2.1.3. Directory SCIM Schema Extensions . . . . . . . . . . 5
2.2. LDAP Model . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.1. Syntax Support . . . . . . . . . . . . . . . . . . . 6
2.2.2. Object Classes . . . . . . . . . . . . . . . . . . . 6
2.2.3. Attributes . . . . . . . . . . . . . . . . . . . . . 6
2.2.3.1. Attribute Type Mapping . . . . . . . . . . . . . 7
2.2.3.2. Complex Attributes . . . . . . . . . . . . . . . 7
2.2.3.3. Multi-Valued Attributes . . . . . . . . . . . . . 7
2.2.3.4. Attribute Name Mapping . . . . . . . . . . . . . 8
2.2.4. LDAP Operations . . . . . . . . . . . . . . . . . . . 10
2.2.5. LDAP Controls . . . . . . . . . . . . . . . . . . . . 10
3. Server Topology . . . . . . . . . . . . . . . . . . . . . . . 10
4. SCIM API Support . . . . . . . . . . . . . . . . . . . . . . 10
5. Authentication & Access Control . . . . . . . . . . . . . . . 10
5.1. Authentication . . . . . . . . . . . . . . . . . . . . . 10
5.2. Access Control . . . . . . . . . . . . . . . . . . . . . 11
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11
7. Security Considerations . . . . . . . . . . . . . . . . . . . 11
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 11
8.1. Normative References . . . . . . . . . . . . . . . . . . 11
8.2. Informative References . . . . . . . . . . . . . . . . . 12
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12
Appendix B. Document History . . . . . . . . . . . . . . . . . . 12
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 13
1. Introduction
SCIM is a protocol[I-D.scim-api] and schema[I-D.scim-core-schema]
designed for provisioning applications and repositories. SCIM was
intended to be implemented by applications to enable a common
standard protocol for provisioning. This document describes a SCIM
Directory, a general purpose RESTful server that can be used by
applications as a repository for shared identity information.
Specifically, this document reframes the concepts of a directory
server as expressed in [RFC2251], and describes how a "SCIM
Directory" may simultaneously support LDAPv3 protocol.
Hunt Expires February 02, 2014 [Page 2]
Internet-Draft SCIM Directory August 2013
For a directory servers supporting both SCIM and LDAPv3, the document
describes how SCIM schema, in particular complex attributes is mapped
to the LDAPv3 Data Model. The dual-protocol objective of this
specification enables eased migration to RESTful Identity Services
and avoids the need to run parallel SCIM and LDAPv3 server
infrastructures.
This document will describe the following components:
o Data model for a SCIM Directory
o The basic feature set of a SCIM Directory.
o The access control requirements for a SCIM Directory[TBD].
o [OPTIONAL] support for LDAPv3 clients accessing a directory
implementing the SCIM Data Model
[TBD: Directory replication. Access control - data layer vs. http
layer]
1.1. Applications and Directories
For the purpose of this document, two different types of SCIM
Provider (or server) are implied: being "application providers" and
"directory providers". Whereas an "application" implements the SCIM
API and Core Schema specifications, a "directory" has further
requirements detailed in this document.
1.2. 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. Data Models
This specification bases the SCIM data model upon that of the SCIM
Core Schema specification[I-D.scim-core-schema]. It further extends
and defines how an LDAP Model can be applied within a SCIM Directory
in order to provide dual protocol (LDAPv3 and SCIM) support.
2.1. SCIM Model
The SCIM Protocol defines a schema suitable for exchange using JSON
data objects exchanged over a REST API. SCIM Core Schema provides
minimal core schema for representing resources such as users and
groups encompassing common attributes used by cloud providers,
Hunt Expires February 02, 2014 [Page 3]
Internet-Draft SCIM Directory August 2013
PortableContacts, and LDAP directory services. Further and most
importantly, SCIM Core Schema provides an extension model upon which
more resource types may be defined.
2.1.1. Object Model
A SCIM Directory stores objects based on an extension model where
objects of different types extend a parent object type to create
specialized objects such as Users and Groups. As defined in the SCIM
Core Schema, all objects are extensions of the SCIM Resource object.
SCIM Object Hierarchy
+----------+*id,meta
------------->| Resource |<----------
/ |__________| \
/ ^ \
/ | *externalId \
+-----------+-----------+ +--------+---------+ +-----+----+
| ServiceProviderConfig | | CoreResource | | Schema |
|_______________________| |__________________| |__________|
^ ^
| |
+--+---+ +---+---+
| User | | Group |
|______| |_______|
^
|
+--------+--------+
| Enterprise User |
|_________________|
Figure 1
The root "Resource" object defines a couple of attributes to track
object identifier ("id") and meta-data associated with the object
("meta"). 3 main objects descend from the "Resouce" object type:
ServiceProviderConfig, CoreResource, and Schema.
ServiceProviderConfig and Schema are typically used for discovery,
providing information about the server and contain no user or group
information. CoreResource is the parent object for most entities in
a SCIM Directory (e.g. Users and Groups). SCIM Core Schema defines 2
main objects: Users and Groups, and defines EnterpriseUser which is
an extension of the User object.
For examples of SCIM objects (e.g. Users and Groups) see the SCIM
Core Schema specification [I-D.scim-core-schema].
Hunt Expires February 02, 2014 [Page 4]
Internet-Draft SCIM Directory August 2013
[TBD add additional resources or entities (e.g. Organizations, OUs,
Roles) defined in a SCIM Directory if any]
2.1.2. Attributes
SCIM defines that Resources contain a collection of attributes
identified by one or more object types (or schemas) (e.g. User and
EnterpriseUser). Each SCIM Resource is identified and addressed by a
unique object identifier or 'id'. The value of the id is always
issued by the Service Provider and is a stable, non-reassignable
identifier.
Each SCIM resource supports one or more SCIM attributes. SCIM
Attribute types consist of:
o String - A sequence of characters.
o Boolean - A literal "true" or "false".
o Decimal - A real number with at least one digit to the left and
right of a period.
o Integer - A decimal number with no fractional digits
o Binary - A base64Binary encoded value.
o Complex - A singular or multi-valued attribute whose value is a
composition of one or more simple attributes.
A SCIM directory supports multi-valued attributes which are unordered
lists of attributes. Each attribute MAY contain sub-attributes
(including complex attributes). Multi-valued attributes contain the
following normative sub-attributes as defined in SCIM Core Schema
section 3.2 [I-D.scim-core-schema]: type, primary, display,
operation, value.
2.1.3. Directory SCIM Schema Extensions
[Attribute extensions for for IDM Apps (e.g. self service) to do
password management and password policy functions. --> Note: not
password sync as in provisioning context]
[New Resource a "Credential" - used to hold passwords, X509 certs,
etc. Could be defined as sub entity of Users -> e.g. /Users/cn=phil
hunt,ou=idm,o=oracle.com/Credentials]
2.2. LDAP Model
Hunt Expires February 02, 2014 [Page 5]
Internet-Draft SCIM Directory August 2013
In order to leverage existing data, the SCIM LDAP Model's objective
is to represent data in a SCIM Directory as if it were in a LDAPv3
Directory as defined in [RFC2251] and in [RFC2256] in order to
provide backwards support for LDAPv3 clients and to avoid the need to
develop parallel LDAPv3 & SCIM infrastructure. Not all features from
the SCIM Model are mapped to LDAPv3.The specification provides LDAPv3
compatibility so that existing LDAPv3 clients MAY not need to be
updated.
2.2.1. Syntax Support
While the SCIM Core Schema breaks attribute values into a simple list
of types, in many cases the underlying format for both SCIM and LDAP
is string data and binary data. In many cases, conversion of the
value itself is relatively straight forward. More complex syntaxes
such as PostalAddress (OID 1.3.6.1.4.1.1466.115.121.1.41) may require
more complex value translation.
2.2.2. Object Classes
SCIM's Resource Object model works in a similar way to LDAP's object
class model. Where an analog mapping between SCIM and LDAP exists,
objectclasses SHOULD be mapped to the extent that server schema
configuration allows. For example, a SCIM User is mapped to LDAP
InetOrgPerson. Or in the case of Microsoft AD, a SCIM User is mapped
to an Active Directory User.
Mapping between LDAP Object Classes and SCIM Objects
+--------------------+-------------+
| LDAP Class | SCIM Object |
+--------------------+-------------+
| top | Resource |
| inetOrgPerson | User |
| groupOfUniqueNames | Group |
| organization | [TBD] |
| organizationalUnit | [TBD] |
+--------------------+-------------+
Table 1: Object Mapping
In cases where LDAPv3 objectclass definitions may be in conflict with
SCIM schema, the SCIM schema validation SHALL take precedence.
Objectclass enforcement for SCIM Directories supporting LDAP is
OPTIONAL.
2.2.3. Attributes
Hunt Expires February 02, 2014 [Page 6]
Internet-Draft SCIM Directory August 2013
2.2.3.1. Attribute Type Mapping
LDAP has many more attribute types than SCIM does. The following
table lists a set of default syntax mappings between SCIM and LDAP.
Default Mapping between SCIM Types and LDAP Syntax
+-----------------+------------------------------------------+
| SCIM Type | LDAP Syntax |
+-----------------+------------------------------------------+
| String | IA5 String (case-sensitive) |
| Boolean | Boolean |
| Decimal | Numeric String |
| Integer | INTEGER |
| DateTime | Generalized Time |
| Binary (base64) | Binary (BER encoded) |
| Complex | Mapped by individual sub-attribute type. |
+-----------------+------------------------------------------+
Table 2: Attribute Type Mapping
2.2.3.2. Complex Attributes
Complex attributes SHOULD be represented in LDAP in two ways:
1. The complex attribute MAY be mapped to a single LDAP attribute
using the "value" sub-attribute if present, OR by using '$'
delimited notation whereby sub-attributes are concatenated into a
single LDAP value.
2. A complex attribute is represented as a set of LDAP attributes
whereby each sub-attribute is referenced by parent.subattribute
name format using dotted (".") notation. For example, an LDAP
attribute name of address.street would return the Street name
sub-attribute value.
2.2.3.3. Multi-Valued Attributes
SCIM multi-valued attributes MAY be used to map to LDAPv3.
o For multi-valued attribute that contain the sub-attribute "value"
(the attribute's significant value), the server SHOULD map these
values to a corresponding LDAP attribute value when the LDAP
attribute is multi-valued.
o When the LDAP attribute is single-valued, then the SCIM value
tagged with the sub-attribute "primary" as "true", SHALL be
mapped.
Hunt Expires February 02, 2014 [Page 7]
Internet-Draft SCIM Directory August 2013
o When the LDAP attribute is single-valued, and when the scim sub-
attribute "primary" is not set, the first value in the list SHALL
be used.
o If the SCIM attribute does not use the multi-valued attribute sub-
attribute standards, the values converted MAY be a '$' delimited
concatentation of all sub-attribute fields into a single String
per value.
LDAPv3 clients wishing to return a particular attribute value MAY use
LDAP "Attribute Description Options" (as described in section 4.1.5
of [RFC2251]) to select a SCIM value by SCIM type sub-attribute (e.g.
home, work). For example, to return the SCIM work value of
"phoneNumbers", an LDAPv3 client would request telephoneNumber;work
as the attribute name. An LDAPv3 client would request mail;home to
request the home value of SCIM emails attribute.
2.2.3.4. Attribute Name Mapping
The LDAP Model should maintain a table which allows attributes to be
referenced by OID, or by LDAP attribute and defining which SCIM
Attribute is the equivalent.
The mapping MAY assume the following defaults:
1. If not defined in LDAP, a SCIM Attribute name SHOULD be useable
in LDAP providing there is no naming conflict. Where a conflict
exists, the existing LDAP mapping SHALL take precedence over the
default.
2. Each complex attribute subattribute SHOULD be useable in LDAP by
using the SCIM dotted notation (e.g. address.street).
3. A complex attribute name (e.g. address) SHOULD be accessible in
LDAP. If a "value" sub-attribute is defined, the value returned
is the "value" sub-attribute (equivalent to address.value).
Otherwise, the value returned is a '$' delimeted concatenation of
all sub-attributes in the complex attribute.
The following table provides a list of suggested mappings:
+---------------------------------+---------------------------------+
| SCIM | LDAP |
+---------------------------------+---------------------------------+
| id | dn/distinguishedName |
| externalId | externalId* |
| userName | uid |
| name.formatted | cn |
Hunt Expires February 02, 2014 [Page 8]
Internet-Draft SCIM Directory August 2013
| name.familyName | sn (surname) |
| name.givenName | givenName |
| name.middleName | initials |
| name.honorificPrefix | name.honorificPrefix* |
| name.honorificSuffix | generationQualifier |
| displayName | displayName |
| nickName | nickName* |
| profileUrl | labeledURI |
| employeeNumber | employeeNumber |
| userType | employeeType |
| title | title |
| manager | manager |
| preferredLanguage | preferredLanguage |
| locale | locale* |
| utcOffset | utcOffset* |
| costCenter | costCenter* |
| organization | o |
| division | ou/organizationalUnit |
| department | department* [check this] |
| emails.value (complex) | mail/rfc822address |
| phonenumber.value (complex) | telephoneNumber |
| im | im* |
| photo | jpegPhoto |
| address / address.formatted | postalAddress |
| [difference?] | |
| address.streetAddress | street |
| address.locality | l |
| region | [also defined as locality] |
| address.postalCode | postalCode |
| address.country | c |
| group | memberOf/isMemberOf* [check] |
| entitlements | entitlements* |
| roles | nsRoleDn / roles / |
| | organizationalRole[?] |
| x509Certificates | userCertificate |
| active | active* |
+---------------------------------+---------------------------------+
Note: aliases separated by "/". * means not defined in LDAP
(extension to LDAP)
Table 3: SCIM and LDAP Attribute Names
Hunt Expires February 02, 2014 [Page 9]
Internet-Draft SCIM Directory August 2013
2.2.4. LDAP Operations
All LDAP operations remain unchanged and MUST be implemented. As all
LDAP operations center around a Distinguished Name (DN), the DN MAY
be mapped to the SCIM "Id" field if distinguished names have been
used, or it MAY be mappped to externalId. [Should we force mapping
to id or some other field?]
The LDAP Bind operation which allows authentication information to be
exchanged with the server may need special consideration. The SCIM
server implementation MAY choose to pass this exchange through to the
authentication system supporting the HTTP Authentication (securing
SCIM RESTful access), or it may choose to implement directly by
mapping to SCIM attributes. [Not sure this matters. It does not
affect inter-op IMHO]
2.2.5. LDAP Controls
LDAP Controls MAY be supported. [anything we need to cover here?]
3. Server Topology
A SCIM Directory while appearing to be a single logical server to a
client (e.g. through the use of a proxy), MAY be comprised of several
servers as supported by HTTP 1.1 and HTTP redirection RFC2616
[RFC2616].
[Any issues for Proxy or Firewall/Routing servers?]
4. SCIM API Support
The following OPTIONAL SCIM API components are REQUIRED [or SHOULD]
to be implemented in SCIM Directory implementations.
o Filtering
o Sorting
o PATCH operation
o BULK operation
5. Authentication & Access Control
5.1. Authentication
The SCIM protocol does not directly define authentication.
Authentication for SCIM Directory is based entirely on standard HTTP
Hunt Expires February 02, 2014 [Page 10]
Internet-Draft SCIM Directory August 2013
1.1 authentication models. A SCIM Directory MAY be used as a
credential repository for public keys, and secrets, but the protocol
itself does not define authentication.
SCIM Directories SHOULD support OAuth2 [I-D.ietf-oauth-v2] to support
the authentication of client applications accessing SCIM Directory
resources on their own or on behalf of an authorizing user.
5.2. Access Control
[TBD]
The access control requirements for SCIM Directories are specified by
[RFC2820] and MUST be supported.
[TBD: OAuth2 additional requirements: scope, multiple security
contexts (client app and user)]
[TBD: Federated credentials: ACLs should be able to support approved
security contexts from credentials not bound to the local directory]
6. IANA Considerations
[TO BE DETERMINED]
7. Security Considerations
[TO BE DETERMINED]
8. References
8.1. Normative References
[I-D.scim-api]
Drake, T., Mortimore, C., Ansari, M., Grizzle, K., and E.
Wahlstroem, "System for Cross-Domain Identity
Management:Protocol 1.1", draft-scim-api-01 (work in
progress), August 2012.
[I-D.scim-core-schema]
Mortimore, C., Harding, P., Madsen, P., and T. Drake,
"System for Cross-Domain Identity Management: Core Schema
1.1", draft-scim-core-schema-01 (work in progress), August
2012.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
Hunt Expires February 02, 2014 [Page 11]
Internet-Draft SCIM Directory August 2013
[RFC2251] Wahl, M., Howes, T., and S. Kille, "Lightweight Directory
Access Protocol (v3)", RFC 2251, December 1997.
[RFC2252] Wahl, M., Coulbeck, A., Howes, T., and S. Kille,
"Lightweight Directory Access Protocol (v3): Attribute
Syntax Definitions", RFC 2252, December 1997.
[RFC2256] Wahl, M., "A Summary of the X.500(96) User Schema for use
with LDAPv3", RFC 2256, December 1997.
[RFC2820] Stokes, E., Byrne, D., Blakley, B., and P. Behera, "Access
Control Requirements for LDAP", RFC 2820, May 2000.
8.2. Informative References
[I-D.ietf-oauth-v2]
Hardt, D., "The OAuth 2.0 Authorization Framework", draft-
ietf-oauth-v2-31 (work in progress), August 2012.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC4513] Harrison, R., "Lightweight Directory Access Protocol
(LDAP): Authentication Methods and Security Mechanisms",
RFC 4513, June 2006.
Appendix A. Acknowledgements
The author would like to thank the members of the SCIM WG for input
to this document. Thanks to Chris Phillips, Kelly Grizzle, Trey
Drake, and Paul Madsen for contributions on LDAP vs. SCIM Attribute
Naming. Particular thanks to those that participated in the SCIM
Directory discussions at IETF Vancouver and more recently by email:
o Bert Greevenbosch, Huawei
o Alexey Melnikov, Isode
o Prateek Mishra, Oracle
o Chuck Mortimore, Salesforce.com
o Tony Nadalin, Microsoft
Appendix B. Document History
[[This section to be removed after approval by the editor]]
Hunt Expires February 02, 2014 [Page 12]
Internet-Draft SCIM Directory August 2013
00 - Initial Version
01 - Rev'd the date as the document expired
Author's Address
Phil Hunt (editor)
Oracle Corporation
Vancouver
CA
Email: phil.hunt@yahoo.com
Hunt Expires February 02, 2014 [Page 13]