<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.16 (Ruby 2.7.0) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-scim-cursor-pagination-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SCIM Cursor Pagination">Cursor-based Pagination of SCIM Resources</title>

    <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="2024" month="January" day="10"/>

    <area>IETF</area>
    <workgroup>SCIM</workgroup>
    <keyword>Internet-Draft</keyword> <keyword>SCIM</keyword>

    <abstract>


<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>


<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 [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>

</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>

<texttable title="Query Parameters">
      <ttcol align='left'>Parameter</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>cursor</c>
      <c>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. This value may only contained characters from the unreserved characters set defined in section 2.2 of [RFC3986]</c>
      <c>count</c>
      <c>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.</c>
</texttable>

<t>The following table describes cursor-based pagination attributes
returned in a paged query response:</t>

<texttable title="Response Attributes">
      <ttcol align='left'>Element</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>nextCursor</c>
      <c>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.</c>
      <c>previousCursor</c>
      <c>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>.</c>
</texttable>

<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>

<figure><artwork><![CDATA[
     GET /Users?filter=userName%20sw%20J&cursor&count=10
     Host: example.com
     Accept: application/scim+json
     Authorization: Bearer U8YJcYYRMjbGeepD
]]></artwork></figure>

<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>

<figure><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></figure>

<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>

<figure><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></figure>

<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 [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 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 [RFC7644].  Most pagination error conditions would
   generate an 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>

<texttable title="Pagination Errors">
      <ttcol align='left'>scimType</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Applicability</ttcol>
      <c>invalidCursor</c>
      <c>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.</c>
      <c>GET (Section 3.4.2 of [RFC7644])</c>
      <c>expiredCursor</c>
      <c>Cursor has expired. Do not wait longer than cursorTimeout (600 sec) to request additional pages.</c>
      <c>GET (Section 3.4.2 of [RFC7644])</c>
      <c>invalidCount</c>
      <c>Count value is invalid. Count value must be between 1 - and maxPageSize (500)</c>
      <c>GET (Section 3.4.2 of [RFC7644])</c>
</texttable>

</section>
<section anchor="sorting"><name>Sorting</name>

<t>If sorting is implemented as described Section 3.4.2.3 of [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>

<figure><artwork><![CDATA[
      GET /Users
      Host: example.com
      Accept: application/scim+json

]]></artwork></figure>

<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>

<figure><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></figure>

</section>
</section>
<section anchor="querying-resources-using-http-post"><name>Querying Resources using HTTP POST</name>

<t>Section 3.4.2.4 of [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>

<figure><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></figure>

<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>

<figure><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></figure>

</section>
<section anchor="service-provider-configuration"><name>Service Provider Configuration</name>

<t>The /ServiceProviderConfig resource defined in Section 4 of [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 pagination.
 <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>maxPageSize</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. The maximum number of results returned may be further 
 restricted by other criteria. <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>

<figure><artwork><![CDATA[
      GET /ServiceProviderConfig
      Host: example.com
      Accept: application/scim+json

]]></artwork></figure>
<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 [RFC7643]
   has been omitted for brevity):</t>

<figure><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></figure>

<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 the number of
   cursors that can be allocated by a client or enforce cursor lifetimes.</t>

</section>
<section anchor="change-log"><name>Change Log</name>

<t>v03 - January 2024 - Minor grammatical/typo fixes, rename + changes to maxPageSize SCP definition
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>

<t>Aaron Parecki
Okta</t>

<t>David Brossard
Axiomatics</t>

<t>Dean H. Saxe
Amazon Web Services</t>

<t>Pamela Dingle
Microsoft</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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>

