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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-zollner-scim-referential-value-location-01" category="info">

  <front>
    <title abbrev="SCIM Referential Value Location Extension">SCIM Referential Value Location Extension</title>

    <author initials="D." surname="Zollner" fullname="Danny Zollner">
      <organization>Microsoft</organization>
      <address>
        <email>danny@zollnerd.com</email>
      </address>
    </author>

    <date year="2022" month="July" day="29"/>

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

    <abstract>


<t>The System for Cross-domain Identity Management standard's schema RFC [RFC7643], as well as custom schemas, may have attribute values that have a finite set of acceptable values. These acceptable values are frequently tied to a value on another resource. For instance, an organization may only allow values in the Enterprise User schema's costCenter attribute that are valid identifiers of cost centers defined in another location. This draft aims to provide a way for a SCIM client to determine if an attribute in a schema is limited to a specific set of values, and where those values may be located on another SCIM resource type.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>The System for Cross-domain Identity Management standard's schema RFC [RFC7643], as well as custom schemas, may have attribute values that have a finite set of acceptable values. These acceptable values are frequently tied to a value on another resource. For instance, an organization may only allow values in the Enterprise User schema's costCenter attribute that are valid identifiers of existing cost centers defined in another location. This draft aims to provide a way for a SCIM client to determine if an attribute in a schema is limited to a specific set of values, and where those values may be located on another SCIM resource type.</t>

<t>The mechanism that this draft proposes is an extension to the schema of [RFC7643]'s "attributes" attribute in the schema definition. This extension will define three new sub-attributes of the "attributes" attribute. These attributes will indicate if the attribute is constrained by a referential relationship, and if it is what resource type and attribute is the value linked to.</t>

<t>This problem that this aims to solve is a problem of discovery and efficiency. Without a standardized way to determine when an attribute is constrained by the existence of and linked to the values of another resource's attribute, a SCIM client cannot know which values will be accepted and which will fail. This leads to failed requests due to invalid values being provided for attributes in requests, and reduces efficiency and success rate of requests being made.</t>

</section>
<section anchor="serviceproviderconfig-extension"><name>ServiceProviderConfig Extension</name>

<t>SCIM Service Providers that have implemented this extension must advertise its availability via the following serviceProviderConfig attribute:</t>

<dl>
  <dt>
referentialValueLocation  </dt>
  <dd>
    <t>A complex type that specifies configuration related to referential
value location information.  REQUIRED.
</t>

    <dl>
      <dt>
supported      </dt>
      <dd>
        <t>A boolean type that indicates if the referential value 
  location extension has been implemented.  REQUIRED.</t>
      </dd>
    </dl>
  </dd>
</dl>

</section>
<section anchor="schema-definition-extension"><name>Schema Definition Extension</name>

<t>This extension implements the following new sub-attributes of the "attributes" attribute in urn:ietf:params:scim:schemas:core:2.0:Schema as defined in [RFC7643]. These attributes are:</t>

<dl>
  <dt>
referentialValue  </dt>
  <dd>
    <t>A complex type that indicates if the value of the attribute is 
constrained by values present on a SCIM resource type.  REQUIRED.
</t>

    <dl>
      <dt>
required      </dt>
      <dd>
        <t>A boolean type that indicates if the attribute's allowed 
  values are constrained by those present on a SCIM resource type.</t>
      </dd>
      <dt>
referentialValueURI      </dt>
      <dd>
        <t>A reference type that contains the URI of the SCIM schema 
  attribute that the attribute is constrained against.  REQUIRED 
  if required is true.</t>
      </dd>
      <dt>
referentialValueResourceType      </dt>
      <dd>
        <t>A reference type that contains the relative URI of the root 
  resource type that is referenced.  REQUIRED if required is true.</t>
      </dd>
    </dl>
  </dd>
</dl>

</section>
<section anchor="normative-examples"><name>Normative Examples</name>

<section anchor="manager-example"><name>Manager Example</name>

<t>The following example shows a section of the core user schema adapted to support the referential value location attributes in this extension for the user resource's "manager" attribute.</t>

<figure><artwork><![CDATA[
{
        "name" : "manager",
        "type" : "complex",
        "multiValued" : false,
        "description" : "The User's manager.  A complex type that
optionally allows service providers to represent organizational
hierarchy by referencing the 'id' attribute of another User.",
        "required" : false,
        "subAttributes" : [
          {
            "name" : "value",
            "type" : "string",
            "multiValued" : false,
            "description" : "The id of the SCIM resource representing
the User's manager.  REQUIRED.",
            "required" : false,
            "caseExact" : false,
            "mutability" : "readWrite",
            "returned" : "default",
            "uniqueness" : "none"
            "referentialValue" : {
                "required" : true,
                "referentialValueURI" : "urn:ietf:params:scim:
                    schemas:core:2.0:User:id",
                "referentialValueResourceType" : "Users"
            }
          }
          ...
]]></artwork></figure>

<t>In the above example, the extension indicates that the value of the user resource's "manager" attribute is constrained by the id value of the core schema's User resource located at &lt;baseUrl&gt;/Users.</t>

<t>A request of GET &lt;baseUrl&gt;/Users would return a list of results containing all visible cost centers. The id value of any of the users returned should be valid for the value of the user resource's "manager" attribute.</t>

</section>
</section>
<section anchor="cost-center-example"><name>Cost Center Example</name>

<t>The following example shows a section of the Enterprise User schema adapted to support the referential value location attributes in this extension for the user resource's enterprise costCenter attribute.</t>

<figure><artwork><![CDATA[
      {
        "name" : "costCenter",
        "type" : "string",
        "multiValued" : false,
        "description" : "Identifies the name of a cost center.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none",
        "referentialValue" : {
            "required" : true,
            "referentialValueURI" : "urn:foo:bar:schema:corporate:
                costCenter:displayName",
            "referentialValueResourceType" : "costCenters"
        }
      },
        ...
]]></artwork></figure>

<t>In the above example, the extension indicates that the value of urn:ietf:params:scim:schemas:enterprise:2.0:User:costCenter is constrained by the displayName value of a custom resource located at &lt;baseUrl&gt;/costCenters.</t>

<t>A request of GET &lt;baseUrl&gt;/costCenters would return a list of results containing all visible cost centers. The displayName values of any of the cost centers returned by the request should be valid for the value of the user resource's urn:ietf:params:Scim:schemas:enterprise:2.0:User:costCenter attribute.</t>

</section>
<section anchor="change-log"><name>Change Log</name>
<t>v00 - July 28, 2022: Initial version
v00 - July 29, 2022: Fixes of small errors in initial draft's examples and incorrect title</t>

</section>
<section anchor="references"><name>References</name>

<t>TO-DO</t>

</section>


  </middle>

  <back>





  </back>

<!-- ##markdown-source:
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
7pdCb9FVvMa468j1y4x+dfsdX+paKk8cAAA=

-->

</rfc>

