RFC 9865: Cursor-Based Pagination of System of Cross-domain Identity Management (SCIM) Resources
- M. Peterson, Ed.,
- D. Zollner,
- A. Sehgal
Abstract
This document updates RFCs 7643 and 7644 by defining additional System for Cross-Domain Identity Management (SCIM) query parameters and result attributes to allow use of cursor-based pagination in SCIM service providers that are implemented with existing codebases, databases, or APIs where cursor-based pagination is already well established.¶
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2025 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://
1. Introduction
The two common patterns for result pagination are index-based pagination
and cursor-based pagination. Rather than
attempt to compare and contrast the advantages and disadvantages of
competing pagination patterns, this document simply recognizes that
System for Cross-Domain Identity Management (SCIM) service providers are commonly implemented as an
interoperabilit
Translating from an underlying cursor-based pagination pattern to the index-based pagination defined in Section 3.4.2.4 of [RFC7644] ultimately requires the SCIM service provider to fully iterate the underlying cursor, store the results, and then serve indexed pages from the stored results. This task of "pagination translation" increases complexity and memory requirements for implementing a SCIM service provider, and may be an impediment to SCIM adoption for some applications and identity systems.¶
This document defines a simple addition to the SCIM protocol that
allows SCIM service providers to reuse underlying cursors without
expensive translation. Support for cursor-based pagination in SCIM
encourages broader cross
This document updates RFCs 7643 and 7644 because it adds attributes to existing structures from those documents, as described in Section 2. These changes are invoked when using the "cursor" parameter when making SCIM search requests using GET or POST methods.¶
1.1. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
1.2. Definitions
This document uses the terms defined in Section 1.2 of [RFC7643].¶
2. Query Parameters and Response Attributes
The following table describes the URL pagination query parameters for requesting cursor-based pagination:¶
The following table describes cursor-based pagination attributes returned in a paged query response:¶
Cursor values are URL-safe strings that are opaque to the client.
To retrieve another result page for a query, the client MUST query the same service
provider endpoint with all query parameters and values being
identical to the initial query with the exception of the cursor value,
which SHOULD be set to a nextCursor (or previousCursor) value that
was returned by the service provider in a previous response.¶
For example, to retrieve the first 10 users with userName starting
with J, use an empty cursor and set the count to 10:¶
The SCIM service provider in response to the query above returns metadata regarding pagination similar to the following example (Resources omitted for brevity):¶
Given the example above, to request the next page of results, use the
same query parameters and values except set the cursor to the value
of nextCursor (VZUTiyhEQJ94IR):¶
The service provider responds with:¶
In the example above, the response includes the optional previousCursor indicating that the service provider supports forward and reverse traversal of result pages.¶
As described in Section 3.4.1 of [RFC7644], service providers should return an accurate value for totalResults, which is the total number of resources for all pages. Service providers implementing cursor pagination that are unable to estimate totalResults MAY choose to omit the totalResults attribute.¶
2.1. Pagination Errors
If a service provider encounters invalid pagination query parameters (invalid cursor value, count value, etc) or other error conditions, the service provider SHOULD return the appropriate HTTP response status code and detailed JSON error response as defined in Section 3.12 of [RFC7644].¶
For HTTP status code 400 (Bad Request) responses, the following detail error types are defined. These error types extend the list defined in Table 9 ("SCIM Detail Error Keyword Values") of Section 3.12 of [RFC7644]¶
2.2. Sorting
If sorting is implemented as described Section 3.4.2.3 of [RFC7644], then cursor-paged results should be sorted.¶
2.3. Implementing Cursors as the Only Pagination Method
A service provider MAY require cursor-based pagination to
retrieve all results for a query by including a nextCursor value in
the response, even when the query does not include the cursor
parameter.¶
For example:¶
The service provider may respond to the above query with a page
containing defaultPageSize results and a nextCursor value as shown
in the below example (Resources omitted for brevity):¶
2.4. Implementing Both Cursors and Index Pagination
When a service provider supports both index-based and cursor-based pagination, clients can use the 'startIndex' or 'cursor' query parameters to request a specific method. Additionally, service providers supporting both pagination methods MUST choose a default pagination method to use when responding to requests that have not specified a pagination query parameter.¶
Implementers of SCIM service providers that previously supported only index-based pagination and are adding support for cursor-based pagination should use index as the default pagination method to avoid incompatibility with clients that expect index-based pagination behaviors when no pagination query parameters are specified.¶
SCIM clients can query the Service Provider Configuration (Section 4) endpoint to determine if index-based, cursor-based, or both types of pagination are supported and which of these is the default.¶
3. Querying Resources Using HTTP POST
Section 3.4.3 of [RFC7644] defines how clients may execute queries without passing parameters on the URL by using the POST verb combined with the /.search path extension execute. When posting to /.search, the client would pass the parameters defined in Section 2 in the body of the POST request. For example:¶
Which would return a result containing a nextCursor value that may
be used by the client in a subsequent call to return the next page of
resources:¶
4. Service Provider Configuration
The /Service resource defined in Section 4 of [RFC7644]
facilitates discovery of SCIM service provider features. A SCIM
service provider implementing cursor-based pagination SHOULD include
the following additional attribute in a JSON document returned by the
/Service endpoint:¶
- pagination
- A complex type that indicates pagination configuration options. OPTIONAL.¶
The following sub-attributes are defined:¶
- cursor
-
A Boolean value specifying support of cursor-based pagination. REQUIRED.¶
- index
-
A Boolean value specifying support of index-based pagination. REQUIRED.¶
- default
Pagination Method -
A string value specifying the type of pagination that the service provider defaults to when the client has not specified which method it wishes to use. Possible values are "cursor" and "index". OPTIONAL.¶
- defaultPageSize
-
Positive integer value specifying the default number of results returned in a page when a count is not specified in the query. OPTIONAL.¶
- maxPageSize
-
Positive integer specifying the maximum number of results returned in a page regardless of what is specified for the count in a query. The maximum number of results returned may be further restricted by other criteria. OPTIONAL.¶
- cursorTimeout
-
Positive integer specifying the minimum number of seconds that a cursor is valid between page requests. Clients waiting too long between cursor pagination requests may receive an invalid cursor error response. No value being specified may mean that there is no cursor timeout or that the cursor timeout is not a static duration. OPTIONAL.¶
Service providers may choose not to advertise Service Provider Configuration information regarding default pagination method, page size, or cursor validity. Clients MUST NOT interpret the lack of published Service Provider Configuration values to mean that no defaults or limits on page sizes or cursor lifetimes exist, or that there is no default pagination method. Service providers may choose not to publish values for the pagination sub-attributes for many reasons. Examples include:¶
Before using cursor-based pagination, a SCIM client MAY fetch the Service Provider Configuration document from the SCIM service provider and verify that cursor-based pagination is supported.¶
For example:¶
A service provider supporting both cursor-based pagination and index-
based pagination would return a document similar to the following
(full Service schema defined in Section 5 of [RFC7643]
has been omitted for brevity):¶
5. Security Considerations
This section elaborates on the security considerations associated with the implementation of cursor pagination in SCIM. This document is under the same security and privacy considerations of those described in [RFC7644]. It is imperative that implementers additionally consider the following security aspects to safeguard against both deliberate attacks and inadvertent misuse that may compromise the system's security posture.¶
5.1. Threat Model and Security Environment
The threat landscape is characterized by two primary types of actors:¶
5.2. Confidentiality
To ensure that confidential data remains appropriately secured:¶
5.3. Availability
The concern for availability primarily stems from the potential for Denial
To mitigate risks, the following strategies are recommended for service providers:¶
5.4. Other Security References
Using URIs to describe and locate resources has its own set of security considerations, as discussed in Section 7 of [RFC3986]. Implementations should also refer to [BCP195] and [RFC9110] for additional security considerations that are relevant for underlying TLS and HTTP protocols.¶
6. IANA Considerations
IANA has amended the "System for Cross-domain Identity Management (SCIM) Schema URIs" registry group established by [RFC7643] as described below.¶
IANA has updated the "SCIM Schema URIs for Data Resources" registry as follows:¶
IANA has updated the "SCIM Server-Related Schema URIs" registry as follows:¶
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 , , <https:///RFC2119 www >..rfc -editor .org /info /rfc2119 - [RFC3986]
-
Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10
.17487 , , <https:///RFC3986 www >..rfc -editor .org /info /rfc3986 - [RFC6585]
-
Nottingham, M. and R. Fielding, "Additional HTTP Status Codes", RFC 6585, DOI 10
.17487 , , <https:///RFC6585 www >..rfc -editor .org /info /rfc6585 - [RFC7643]
-
Hunt, P., Ed., Grizzle, K., Wahlstroem, E., and C. Mortimore, "System for Cross-domain Identity Management: Core Schema", RFC 7643, DOI 10
.17487 , , <https:///RFC7643 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 , , <https:///RFC7644 www >..rfc -editor .org /info /rfc7644 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10
.17487 , , <https:///RFC8174 www >..rfc -editor .org /info /rfc8174
7.2. Informative References
- [BCP195]
-
Best Current Practice 195, <https://
www >..rfc -editor .org /info /bcp195
At the time of writing, this BCP comprises the following:Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS 1.1", BCP 195, RFC 8996, DOI 10.17487 , , <https:///RFC8996 www >..rfc -editor .org /info /rfc8996 Sheffer, Y., Saint-Andre, P., and T. Fossati, "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", BCP 195, RFC 9325, DOI 10.17487 , , <https:///RFC9325 www >..rfc -editor .org /info /rfc9325 - [RFC9110]
-
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., "HTTP Semantics", STD 97, RFC 9110, DOI 10
.17487 , , <https:///RFC9110 www >..rfc -editor .org /info /rfc9110
Acknowledgments
The authors would also like to acknowledge the following individuals who provided valuable feedback while reviewing the document: Aaron Parecki, David Brossard, Dean H. Saxe, and Pamela Dingle.¶
Contributors
The authors would like to acknowledge the contribution of Paul Lanzi (IDenovate) in leading the writing of the Security Considerations section.¶