<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.37 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-scim-cursor-pagination-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="SCIM Cursor Pagination">Cursor-based Pagination of SCIM Resources</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-scim-cursor-pagination-02"/>
    <author initials="D." surname="Zollner" fullname="Danny Zollner" role="editor">
      <organization>Microsoft</organization>
      <address>
        <email>zollnerd@microsoft.com</email>
      </address>
    </author>
    <author initials="A." surname="Sehgal" fullname="Anjali Sehgal">
      <organization>Amazon Web Services</organization>
      <address>
        <email>anjalisg@amazon.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>IETF</area>
    <workgroup>SCIM</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>SCIM</keyword>
    <abstract>
      <?line 36?>

<t>This document defines additional SCIM (System for Cross-Domain Identity Management) query parameters and result
   attributes to allow use of cursor-based pagination in SCIM
   implementations that are implemented with existing code bases,
   databases, or APIs where cursor-based pagination is already well-
   established.</t>
    </abstract>
  </front>
  <middle>
    <?line 45?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>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
   SCIM service providers are commonly implemented as an
   interoperability layer on top of already existing application
   codebases, databases, and/or APIs that already have a well-
   established pagination pattern.</t>
      <t>Translating from an underlying cursor-based pagination pattern to the
   index-based pagination defined in Section 3.4.2.4 of <xref target="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"
   dramatically 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.</t>
      <t>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-application identity management
   interoperability by encouraging SCIM service provider implementations
   for applications and identity systems where cursor-based pagination
   is already well-established.</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="query-parameters-and-response-attributes">
      <name>Query Parameters and Response Attributes</name>
      <t>The following table describes the URL pagination parameters requests for using cursor-based pagination:</t>
      <table>
        <name>Query Parameters</name>
        <thead>
          <tr>
            <th align="left">Parameter</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">cursor</td>
            <td align="left">The string value of the nextCursor attribute from a previous result page. The cursor value <bcp14>MUST</bcp14> be empty or omitted for the first request of a cursor-paginated query. Since cursor is a query parameter it will follow the unreserved characters set defined in section 2.2 of <xref target="RFC3986"/></td>
          </tr>
          <tr>
            <td align="left">count</td>
            <td align="left">A positive integer. Specifies the desired maximum number of query results per page, e.g., count=10. When specified, the service provider <bcp14>MUST NOT</bcp14> return more results than specified, although it <bcp14>MAY</bcp14> return fewer results. If count is not specified in the query, the maximum number of results is set by the service provider.</td>
          </tr>
        </tbody>
      </table>
      <t>The following table describes cursor-based pagination attributes
returned in a paged query response:</t>
      <table>
        <name>Response Attributes</name>
        <thead>
          <tr>
            <th align="left">Element</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">nextCursor</td>
            <td align="left">A cursor value string that <bcp14>MAY</bcp14> be used in a subsequent request to obtain the next page of results. Service providers supporting cursor-based pagination <bcp14>MUST</bcp14> include nextCursor in all paged query responses except when returning the last page. nextCursor is omitted from a response only to indicate that there are no more result pages.</td>
          </tr>
          <tr>
            <td align="left">previousCursor</td>
            <td align="left">A cursor value string that <bcp14>MAY</bcp14> be used in a subsequent request to obtain the previous page of results. Use of previousCursor is <bcp14>OPTIONAL</bcp14>.</td>
          </tr>
        </tbody>
      </table>
      <t>Cursor values are opaque; clients <bcp14>MUST</bcp14> not make assumptions about their structure. When the client wants to retrieve
   another result page for a query, it should 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 Service Provider in a previous response.</t>
      <t>For example, to retrieve the first 10 Users with userName starting
   with "J", use an empty cursor and set the count to 10:</t>
      <artwork><![CDATA[
     GET /Users?filter=userName%20sw%20J&cursor&count=10
     Host: example.com
     Accept: application/scim+json
     Authorization: Bearer U8YJcYYRMjbGeepD
]]></artwork>
      <t>The SCIM provider in response to the query above returns metadata regarding pagination similar
to the following example (actual resources removed for brevity):</t>
      <artwork><![CDATA[
     HTTP/1.1 200 OK
     Content-Type: application/scim+json
     
     {
       "totalResults":100,
       "itemsPerPage":10,
       "nextCursor":"VZUTiyhEQJ94IR",
       "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
       "Resources":[{
          ...
        }]
     }
]]></artwork>
      <t>Given the example above, to request the next page or results, use the
   same query parameters and values except set the cursor to the value
   of nextCursor ("VZUTiyhEQJ94IR"):</t>
      <artwork><![CDATA[
     GET /Users?filter=username%20sw%20J&cursor=VZUTiyhEQJ94IR&count=10
     Host: example.com
     Accept: application/scim+json
     Authorization: Bearer U8YJcYYRMjbGeepD

         HTTP/1.1 200 OK
         Content-Type: application/scim+json
         
     {
       "totalResults":100,
       "itemsPerPage":10,
       "previousCursor: "ze7L30kMiiLX6x"
       "nextCursor":"YkU3OF86Pz0rGv",
       "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
       "Resources":[{
          ...
        }]
     }
]]></artwork>
      <t>In the example above, the response includes the <bcp14>OPTIONAL</bcp14>
   previousCursor indicating that the Service Provider supports forward
   and reverse traversal of result pages.</t>
      <t>As described in Section 3.4.1 of <xref target="RFC7644"/> Service Providers <bcp14>SHOULD</bcp14>
   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 <bcp14>MAY</bcp14> choose to omit the totalResults attribute.</t>
      <section anchor="pagination-errors">
        <name>Pagination errors</name>
        <t>If a Service Provider encounters an invalid pagination query
   parameters (invalid cursor value, count value, etc), or other error
   condition, the Service Provider <bcp14>SHOULD</bcp14> return the appropriate HTTP
   response status code and detailed JSON error response as defined in
   Section 3.12 of <xref target="RFC7644"/>.  Most pagination error conditions would
   generate HTTP response with status code 400.  Since many pagination
   error conditions are not user recoverable, error messages <bcp14>SHOULD</bcp14>
   focus on communicating error details to the SCIM client developer.</t>
        <t>For HTTP status code 400 (Bad Request) responses, the following detail error types are defined. These error types extend the list of error types defined in RFC 7644 Section 3.12, Table 9: SCIM Detail Error Keyword Values.</t>
        <table>
          <name>Pagination Errors</name>
          <thead>
            <tr>
              <th align="left">scimType</th>
              <th align="left">Description</th>
              <th align="left">Applicability</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">invalidCursor</td>
              <td align="left">Cursor value is invalid. Cursor value should be empty to request the first page and set to the nextCursor or previousCursor value for subsequent queries.</td>
              <td align="left">GET (Section 3.4.2 of <xref target="RFC7644"/>)</td>
            </tr>
            <tr>
              <td align="left">expiredCursor</td>
              <td align="left">Cursor has expired. Do not wait longer than cursorTimeout (600 sec) to request additional pages.</td>
              <td align="left">GET (Section 3.4.2 of <xref target="RFC7644"/>)</td>
            </tr>
            <tr>
              <td align="left">invalidCount</td>
              <td align="left">Count value is invalid. Count value must be between 1 - and maximumPageSize (500)</td>
              <td align="left">GET (Section 3.4.2 of <xref target="RFC7644"/>)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sorting">
        <name>Sorting</name>
        <t>If sorting is implemented as described Section 3.4.2.3 of <xref target="RFC7644"/> ,
   then cursor-paged results <bcp14>SHOULD</bcp14> be sorted.</t>
      </section>
      <section anchor="cursors-as-the-only-pagination-method">
        <name>Cursors as the Only Pagination Method</name>
        <t>A SCIM Service Provider <bcp14>MAY</bcp14> 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.</t>
        <t>For example:</t>
        <artwork><![CDATA[
      GET /Users
      Host: example.com
      Accept: application/scim+json

]]></artwork>
        <t>The SCIM 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):</t>
        <artwork><![CDATA[
     HTTP/1.1 200 OK
     Content-Type: application/scim+json
     
     {
       "totalResults":5000,
       "itemsPerPage":100,
       "nextCursor":"HPq72Pax3JUaNa",
       "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
       "Resources":[{
          ...
        }]
     }
]]></artwork>
      </section>
    </section>
    <section anchor="querying-resources-using-http-post">
      <name>Querying Resources using HTTP POST</name>
      <t>Section 3.4.2.4 of <xref target="RFC7644"/> defines how clients <bcp14>MAY</bcp14> execute the HTTP
   POST method combined with the "/.search" path extension to issue
   execute queries without passing parameters on the URL.  When using
   "/.search", the client would pass the parameters defined in Section 2</t>
      <artwork><![CDATA[
     POST /User/.search
     Host: example.com
     Accept: application/scim+json
     Authorization: Bearer U8YJcYYRMjbGeepD
     
     {
       "schemas": [
         "urn:ietf:params:scim:api:messages:2.0:SearchRequest"],
       "attributes": ["displayName", "userName"],
       "filter":
          "displayName sw \"smith\"",
       "cursor": "",
       "count": 10
     }
]]></artwork>
      <t>Which would return a result containing a "nextCursor" value which may
   be used by the client in a subsequent call to return the next page of
   resources</t>
      <artwork><![CDATA[
     HTTP/1.1 200 OK
     Content-Type: application/scim+json
     
     {
       "totalResults":100,
       "itemsPerPage":10,
       "nextCursor":"VZUTiyhEQJ94IR",
       "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
       "Resources":[{
          ...
        }]
     }
]]></artwork>
    </section>
    <section anchor="service-provider-configuration">
      <name>Service Provider Configuration</name>
      <t>The /ServiceProviderConfig resource defined in Section 4 of <xref target="RFC7644"/>
   facilitates discovery of SCIM service provider features.  A SCIM
   Service provider implementing cursor-based pagination <bcp14>SHOULD</bcp14> include
   the following additional attribute in JSON document returned by the
   /ServiceProviderConfig endpoint:</t>
      <dl>
        <dt>pagination</dt>
        <dd>
          <t>A complex type that indicates pagination configuration options.
<bcp14>OPTIONAL</bcp14>.
</t>
          <dl>
            <dt>cursor</dt>
            <dd>
              <t>A Boolean value specifying support of cursor-based paginations.
 <bcp14>REQUIRED</bcp14>.</t>
            </dd>
            <dt>index</dt>
            <dd>
              <t>A Boolean value specifying support of index-based pagination.
 <bcp14>REQUIRED</bcp14>.</t>
            </dd>
            <dt>defaultPageSize</dt>
            <dd>
              <t>Non-negative integer value specifying the default number of results
 returned in a page when a count is not specified in the query.<br/>
                <bcp14>OPTIONAL</bcp14>.</t>
            </dd>
            <dt>maximumPageSize</dt>
            <dd>
              <t>Non-negative integer specifying the maximum number of results 
 returned in a page regardless of what is specified for the count 
 in a query.  <bcp14>OPTIONAL</bcp14>.</t>
            </dd>
            <dt>cursorTimeout</dt>
            <dd>
              <t>Non-negative integer specifying the maximum number 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.  <bcp14>OPTIONAL</bcp14>.</t>
            </dd>
          </dl>
          <t>Before using cursor-based pagination, a SCIM client <bcp14>MAY</bcp14> fetch the
 Service Provider Configuration document from the SCIM service
 provider and verify that cursor-based pagination is supported.</t>
          <t>For example:</t>
        </dd>
      </dl>
      <artwork><![CDATA[
      GET /ServiceProviderConfig
      Host: example.com
      Accept: application/scim+json

]]></artwork>
      <t>A service provider supporting both cursor-based pagination and index-
   based pagination would return a document similar to the following
   (full ServiceProviderConfig schema defined in Section 5 of <xref target="RFC7643"/>
   has been omitted for brevity):</t>
      <artwork><![CDATA[
        HTTP/1.1 200 OK
        Content-Type: application/scim+json
        
        {
       "schemas": [
         "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"],

         ...

       "pagination": {
          "cursor": true,
          "index": true
       },

       ...

      }
]]></artwork>
      <t>Service Provider implementors <bcp14>SHOULD</bcp14> ensure that misuse of pagination
   by a SCIM client does not deplete Service Provider resources or
   prevent valid requests from other clients being handled.  Defenses
   for a SCIM Service Provider are similar those used to protect other
   Web API services -- including the use of a "Web API gateway" layer,
   to provide authentication, rate limiting, IP allow/block lists,
   logging and monitoring, response caching, etc.</t>
      <t>For example, an obvious protection against abuse is for the Service
   Provider to require client authentication in order to retrieve large
   result sets and enforce an overriding totalResults limit for non-
   authenticated clients.  Another example, would be for a Service
   Provider that implements cursor pagination to restrict number of
   cursors that can be allocated by a client or enforce cursor lifetime.</t>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <t>v02 - July 2023 - Typos/semantics, acknowledgements, expansion of cursorTimeout SCP definition
v01 - May 2023 - Updated after Httpdir review.
v00 - December 2022 - Adopted by SCIM WG.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The editor would like to acknowledge the tremendous contribution of Matt Peterson for his work in authoring the original versions of this draft and in providing continuing feedback after stepping back.</t>
      <t>Matt Peterson
One Identity</t>
      <t>The editor would also like to acknowledge the contributions of the following individuals who provided valuable feedback while reviewing the draft:</t>
      <dl>
        <dt>Aaron Parecki</dt>
        <dd>
          <t>Okta</t>
        </dd>
        <dt>David Brossard</dt>
        <dd>
          <t>Axiomatics</t>
        </dd>
        <dt>Dean H. Saxe</dt>
        <dd>
          <t>Amazon Web Services</t>
        </dd>
        <dt>Pamela Dingle</dt>
        <dd>
          <t>Microsoft</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC7643">
        <front>
          <title>System for Cross-domain Identity Management: Core Schema</title>
          <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
          <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The System for Cross-domain Identity Management (SCIM) specifications are designed to make identity management in cloud-based applications and services easier. The specification suite builds upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. Its intent is to reduce the cost and complexity of user management operations by providing a common user schema and extension model as well as binding documents to provide patterns for exchanging this schema using HTTP.</t>
            <t>This document provides a platform-neutral schema and extension model for representing users and groups and other resource types in JSON format. This schema is intended for exchange and use with cloud service providers.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7643"/>
        <seriesInfo name="DOI" value="10.17487/RFC7643"/>
      </reference>
      <reference anchor="RFC7644">
        <front>
          <title>System for Cross-domain Identity Management: Protocol</title>
          <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
          <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
          <author fullname="M. Ansari" initials="M." surname="Ansari"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The System for Cross-domain Identity Management (SCIM) specification is an HTTP-based protocol that makes managing identities in multi-domain scenarios easier to support via a standardized service. Examples include, but are not limited to, enterprise-to-cloud service providers and inter-cloud scenarios. The specification suite seeks to build upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. SCIM's intent is to reduce the cost and complexity of user management operations by providing a common user schema, an extension model, and a service protocol defined by this document.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7644"/>
        <seriesInfo name="DOI" value="10.17487/RFC7644"/>
      </reference>
      <reference anchor="RFC3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
          <author fullname="R. Fielding" initials="R." surname="Fielding"/>
          <author fullname="L. Masinter" initials="L." surname="Masinter"/>
          <date month="January" year="2005"/>
          <abstract>
            <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
