Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
270 changes: 270 additions & 0 deletions IL1-SCIM.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
---
title: IPSIE IL1 SCIM 2.0 Profile - draft

ipr: none
cat: std
wg: IPSIE

coding: us-ascii
pi:
toc: yes
sortrefs: yes
symrefs: yes
private: yes

author:
-
ins: M. Maguire
name: Mark Maguire
org: Aujas Cybersecurity
email: mark.maguire@aujas.com
-
ins: J. Schreiber
name: Jen Schreiber
org: Workday
email: jennifer.winer@workday.com
normative:
ISODIR2:
RFC7523:
RFC7643:
RFC7644:
RFC6749:
RFC8414:

--- abstract

This document defines a profile for SCIM 2.0 to meet the security and interoperability requirements for identity lifecycle management within enterprises. Within the context of SCIM, The profile establishes requirements for provisioning, account management, client authentication, and identity synchronization.

--- middle

## Introduction

This document defines the IPSIE Identity Lifecycle 1 (IL1) Profile for SCIM 2.0. It provides a clear reference for SCIM deployments that require a well-defined security baseline meeting best practices for interoperable enterprise identity management.

The profile addresses critical aspects of secure identity management, with particular emphasis on:

* Client authentication
* Retrieve, add, and modify Users.
* Retrieve, add, and modify Groups.
* Synchronization of data from the Identity Service to the Application

By adhering to this profile, organizations can implement SCIM-based integrations that meet stringent security requirements while ensuring interoperability across different implementations.

## Conventions and Definitions

The keywords "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "MAY", and "CAN" in this document are to be interpreted as described in ISO Directive Part 2 {{ISODIR2}}. These keywords are not used as dictionary terms such that any occurrence of them shall be interpreted as keywords and are not to be interpreted with their natural language meanings.

### Terminology

SCIM
> The System for Cross-domain Identity Management as defined in {{RFC7643}} and {{RFC7644}}

SCIM Client
> An application that uses the SCIM protocol to manage identity data maintained by the service provider. The client initiates SCIM HTTP requests to
a target service provider.

SCIM Service Provider
> An HTTP web application that provides identity information via the SCIM protocol.

Role
> TODO: Add definition

Identity Service
> Acts as the SCIM client, initiating all provisioning operations.

Application
> Acts as the SCIM service provider, hosting SCIM endpoints and processing all provisioning requests.

Note: When SCIM is applied to the context of IPISIE, the Identity Service acts as the SCIM client and the Application acts as the SCIM service provider. The document will use the Role terms below for consistency between across IPSIE Profiles.

## Profile

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll want to normalize these to IETF style language using uppercase terminology in a future version.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just went through and capitalized

### Authentication and Authorization {#authn-authz}

The Identity Service and Application MUST use OAuth 2.0 {{RFC6749}} for authentication and authorization of SCIM protocol.

// TODO: Should this link back to SL1?
// TODO: Expand Section

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although SCIM uses these terms, there's a draft of use cases that covers a much richer set of interaction styles. We should consider whether or not to include references to those more complex patterns here as well. https://datatracker.ietf.org/doc/draft-ietf-scim-use-cases-reloaded/

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think sticking with "Application" and "Identity Service" will help with understandability, that draft looks like it introduces a lot of new language which has not been discussed in any IPSIE meetings to date

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair enough.

Is there ever a scenario where the App will be the client and the Identity service the service? I'm thinking about IL2/3 and the mapping of app specific roles to groups where the app may want to push those to the identity service.

The following requirements ensure consistent and secure handling of access tokens and authorization server configuration:

// TODO: Be more explicit with token names.

* OAuth 2.0 interactions MUST comply with JWT Client Authentication as defined in {{RFC7523}}
* The token SHALL exchange a signed JWT for an access token and present that token in the {Authorization: Bearer} header on all subsequent SCIM requests.
* The token MUST contain a "token_endpoint" value which is the URL of the Identity Service's OAuth 2.0 token endpoint.
* The Acess Token MUST include the "scim" scope and not grant broader permissions.
* All Authorization Server parameters SHOULD be discovered from OAuth Authorization Server metadata as defined in {{RFC8414}}.
* The Identity Service SHOULD expose a jwks_uri to allow the Application to perform signature verification

### SCIM Interoperability Requirements

#### General Requirements

* The Identity Service SHALL implement the required functionality of a SCIM client as defined in {{RFC7643}} and {{RFC7644}}.
* The Application SHALL implement the required functionality of a SCIM service provider as defined in {{RFC7643}} and {{RFC7644}}.
* All SCIM operations SHALL be authenticated and authorized via OAuth 2.0 as specified in {{authn-authz}}.
* Local modifications to Users or Groups in the Application are prohibited.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Local modifications to Users or Groups in the Application are prohibited" - But generally this is not the case right? SCIM does not mandate whether local admins inside the application can or cannot make changes. There can be scenarios where the customer wants to maintain additional information for a user or a group , or they would want to maintain derived or computed attributes?


#### User Provisioning Operations

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/authenticated/authorized/ on line 42

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

The Application MUST provide support all User provisioning operations defined in this section.

##### Create User (POST /Users)

User creation is performed by the SCIM operation POST /Users.

In addition to the user attributes required by {{RFC7643}}, the following attributes are required to be part of the User schema:

// TODO: Should we keep this vauge or refer be explicit with attributes we are requiring? email vs emails?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My recommendation would be to explicitly restrict some basic or core attribute name , similar to openid scopes - profile, email etc.,


* An attribute which contains a unique identifier used by the enterprise to distinguish the owner of the account, such as "externalId."
* An attribute which contains the primary email address of the user, such as "email"

##### Update User (PATCH /Users/{id})

User updates are performed by the SCIM operation PATCH /Users/{id}

##### Deactivate or Reactivate User (PATCH /Users/{id})

Changes to the user activation status, such deactivation and reactivation, are performed by the SCIM operation PATCH /Users/{id}

The Identity Service SHOULD propagate user deactivation events to the Application within 5 minutes of the user being deactivated.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this something that would change at different levels? Service Level Objective (SLO) targets feel like something that would make more sense at the IPSIE level vs at the protocol level if we want to define these.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the best way to handle this is to introduce SLOs in IPSIE IL3 and for SCIM IL1 Profile we can cut the "5 min" requirements

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, we can include SLOs in the common requirements.


The Application SHOULD respond to user deactivation events by revoking the ability for the user to continue accessing the Application, including the revocation of currently active sessions. The revocation mechanism outside the scope of this profile. Revocation SHOULD occur within 5 minutes of receiving the deactivation request.

When a user account is deactivated, all access mechanisms and authorizations associated with that account MUST also be deactivated. This includes, but is not limited to:

* Web sessions
* API tokens
* Refresh tokens
* Personal access tokens
* SSH keys associated with the user
* Device-based authentication credentials

The Application MUST allow reactivation of a deactivated user.

##### Delete User (DELETE /Users/{id})

User deletions are performed by the SCIM operation DELETE /Users/{id}

After a user is deleted, the Application MUST allow the creation of a new user with the same username.
// TODO: this could be tricky RE: maintianing the user's data

##### Get All Users (GET /Users)

Get all users in the system is performed by the SCIM operation GET /Users

This endpoint ensures that all users are managed by the Identity Service.

To ensure that large amounts of data can be read from the Application, the application must support with index-based or cursor-based pagination for the GET /Users request. To ensure system stability and prevent abuse, the Application SHALL enforce rate limits on this endpoint and must respond with appropriate headers, such as "429 Too Many Requests" and "Retry-After," when limits are exceeded.

##### Get User By ID (GET /Users/{id})

User searches by id are performed by the SCIM operation GET /Users/{id}

##### List Users By Alternate Identifier (GET /Users?)

User searches by alternate identifier are performed via the SCIM operation: GET /Users?filter={filterExpression}

Application Providers MUST support the following filter expressions:

* username eq {username}
* externalId eq {externalId}
* emails[value eq {email}]

#### Group (Role) Provisioning Operations

The Application MUST provide support all Group provisioning operations defined in this section.

**Note**: Within the IPSIE standard, Application permissions are referred to as "Roles." Within SCIM, Application permissions are referred to as "Groups." The term "Role" in IPSIE is functionally equivalent to the term "Group" in SCIM.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had a different understanding. Groups may act as Roles but Apps are free to have Groups and Roles as separate entities. Groups can be assigned to Roles but so can individual users.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll also get into the discussion of entitlements, further muddying the terminology if we're not careful. At IETF122 @aaronpk mentioned that the entitlements draft was being resurrected. I've seen no updates yet.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the IPSIE IL definitions, my understanding is that "Role" is the term used for any application permissions - role does not mean bundling of numerous permissions together (although that is a common definition - role and group are both overloaded terms. I maintain "Entitlement" is a better choice than either, but that would require us updating the IPSIE IL definition)


##### Create Group (POST /Groups)

Group creation is performed by the SCIM operation POST /Group.

// TODO: Add more details

##### Get All Groups (GET /Groups)

A search for all groups in the system is performed by the SCIM operation GET /Groups

This endpoint ensures that all groups are managed by the Identity Service.

To ensure that large amounts of data can be read from the Application, the application MUST support with index-based or cursor-based pagination for the GET /Groups request. To ensure system stability and prevent abuse, the Application SHALL enforce rate limits on this endpoint and MUST respond with appropriate headers, such as "429 Too Many Requests" and "Retry-After," when limits are exceeded.

##### Get Group By ID (GET /Group/{id})

Group searches by id are performed by the SCIM operation GET /Group/{id}?excludedAttributes=members

##### List Groups By Alternate Identifier (GET /Groups?)

User lookups by alternate identifier are performed by the SCIM operation GET /Groups?filter={filterExpression}&excludedAttributes=members

Application Providers MUST support the following filter expressions:

// TODO: Add what filters are required to be supported

##### Add or Remove Group Members (PATCH /Group/{id})

Members are added or removed from Groups via the SCIM operation PATCH /Groups/{id}

For each Operation in the PATCH:

The op attribute MUST contain either "add" or "remove".

* When the op is "add":
* The path attribute MUST be "members".
* The value attribute MUST be an array of Group member elements, as defined in Section 4.2 of the SCIM Core Schema {{RFC7643}}. Each member MUST contain a value subattribute with the id of the resource being added to the group.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Each member MUST contain a value sub attribute with the id of the resource being added to the group. - probably an example could help here? The sentence is a bit confusing.


* When the op is "remove":
* The path attribute MUST be either:
* "members" (to remove all members)
* "members[value eq \"{id}\"]" (to remove a single member)
* The value attribute MUST be unspecified.

### Metadata Endpoints

#### ResourceTypes

Application MUST host a /ResourceTypes endpoint, as defined in Section 4 of {{RFC7644}}.

The supported ResourceTypes MUST include Users and Groups.

#### ServiceProviderConfig

Application Providers MUST host a /ServiceProviderConfig endpoint to describe the operations they support, as defined in Section 4 of {{RFC7644}}

The operations MUST include, at minimum, the set of SCIM capabilities required for compatibility with this IPSIE profile.

#### Schemas

Application Providers MUST host a /Schemas endpoint to describe the supported schemas, as defined in Section 4 of {{RFC7644}}. There must be a schema for both Users and Groups. The schemas must include all required attributes from RFC 7643 and from Section 3.2.3 (Create User).

### Security Considerations

For SCIM security considerations, see {{RFC7643}} and {{RFC7644}}

Additionally, the following requierements are included to address security considerations.

* **Transport Security**: All endpoints SHALL enforce TLS 1.2 or later with strong cipher suites and certificate validation.
* **Error Handling**: Error responses SHALL use the SCIM error format and SHALL NOT leak internal details.
* **Replay Resistance**: Access tokens SHALL expire and nonces SHALL be validated to prevent replay.
* **Auditing**: All provisioning actions and responses SHALL be logged for audit and troubleshooting.
* **Rate Limiting**: All endpoints SHALL enforce rate limiting and must respond with "429 Too Many Requests" when limits are exceeded.

## Compliance Statement

Implementation of all mandatory requirements in this profile will result in a SCIM 2.0 deployment that satisfies IPSIE Identity Lifecycle Level 1 (IL1). Specifically:

* **Identity Service (SCIM client)**
* SHALL initiate all CRUD operations for Users and Groups.
* SHALL adhere to the security considerations above.

* **Application (SCIM service provider)**
* SHALL host all SCIM endpoints with full support for User and Group provisioning.
* SHALL prevent local modifications outside of SCIM.
* SHALL enforce OAuth 2.0 JWT Profile for Authentication {{RFC7523}}.
* SHALL adhere to the security considerations above.

By conforming to this profile, implementations will achieve a consistent, secure, and interoperable baseline for enterprise identity lifecycle management.