<?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-00" category="info">

  <front>
    <title abbrev="SCIM Roles and Entitlements Extension">SCIM Roles and Entitlements 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="28"/>

    <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",
            "referentialValueURI" : "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 2022: Initial version</t>

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

<t>TO-DO</t>

</section>


  </middle>

  <back>





  </back>

<!-- ##markdown-source:
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
Nwl3I7h+mdF/fP0JgqENmcobAAA=

-->

</rfc>

