<?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.7.29 (Ruby 2.6.10) -->


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

<!ENTITY RFC3339 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml">
<!ENTITY RFC7643 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7643.xml">
<!ENTITY RFC7644 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7644.xml">
<!ENTITY RFC8141 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8141.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
]>


<rfc ipr="trust200902" docName="draft-poreddy-scim-role-assignment-01" category="std" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="SCIM RoleAssignment">SCIM RoleAssignment Draft Specification v0.2</title>

    <author initials="P." surname="Poreddy" fullname="Prithvi Poreddy">
      <organization>Individual Contributor</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>prithvikrishnab4u@gmail.com</email>
      </address>
    </author>

    <date year="2025" month="November"/>

    
    
    

    <abstract>


<?line 53?>

<t>SCIM 2.0 defines "roles" and "entitlements" attributes on the User resource, but it lacks a standardized way to bind roles to specific scopes such as projects, tenants, or groups. This gap forces organizations to rely on group sprawl or non-standard encodings, preventing true interoperability. This document introduces a new SCIM resource type, RoleAssignment, which models scoped role bindings as first-class records, enabling portable provisioning, lifecycle governance, and compliance visibility.</t>



    </abstract>



  </front>

  <middle>


<?line 57?>

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

<section anchor="problem-statement"><name>Problem Statement</name>

<t>The SCIM protocol <xref target="RFC7643"/> <xref target="RFC7644"/> defines the User and Group resources and allows global roles to be attached to Users via the "roles" attribute. However, the specification does not provide a standardized way to associate roles with specific scopes such as projects, tenants, or device groups.</t>

<t>This limitation prevents SCIM from modeling the most common real-world requirement: assigning different roles to the same identity in different contexts.</t>

<t>For example, consider a user named Alice:</t>

<figure><artwork><![CDATA[
User: Alice
 +-- Global Role: Power User
 +-- Project A: Maintainer
 +-- Project B: Developer
 +-- Project C: ReadOnly
]]></artwork></figure>

<t>Today, there is no interoperable SCIM method to represent Alice's per-project role bindings. Current workarounds include creating Groups for every {scope x role} combination, which leads to group sprawl and poor interoperability, or embedding scope names into free-form role strings, which are not machine-readable or portable.</t>

<t>These limitations are visible in real-world SCIM implementations: GitLab <xref target="GITLAB-SCIM"/>, Tanium <xref target="TANIUM-RBAC"/>, and scenarios in Microsoft Entra ID <xref target="AZURE-SCIM"/>.</t>

</section>
<section anchor="proposed-solution"><name>Proposed Solution</name>

<t>This document introduces a new SCIM 2.0 resource, <em>RoleAssignment</em>, which makes scoped role bindings a first-class concept. Each RoleAssignment explicitly links a subject (e.g., User), a scope (e.g., Project), and a role (e.g., Developer). Optional metadata such as validity periods, source system, and approver information enable lifecycle management and governance.</t>

<t>By standardizing RoleAssignments:</t>

<t><list style="symbols">
  <t>Identity Providers can provision scoped roles in a portable way.</t>
  <t>Service Providers can expose and consume these assignments consistently.</t>
  <t>Auditors and governance systems can query "who has what role in which scope."</t>
</list></t>

</section>
<section anchor="design-rationale"><name>Design Rationale</name>

<t>This specification introduces RoleAssignment as a standalone resource type rather than extending existing SCIM resources for the following reasons:</t>

<section anchor="why-not-extend-userroles"><name>Why not extend User.roles?</name>
<t>User.roles is a multi-valued attribute without scope information. Extending it would require complex nested structures that don't fit SCIM's flat attribute model and would make querying and lifecycle management difficult.</t>

</section>
<section anchor="why-not-use-groups"><name>Why not use Groups?</name>
<t>Using Groups for every {scope × role} combination leads to group sprawl and poor scalability. A system with 100 projects and 5 roles would require 500 groups. Group membership also lacks the metadata needed for governance (validity periods, approval chains).</t>

</section>
<section anchor="why-a-connection-resource"><name>Why a connection resource?</name>
<t>Unlike SCIM's traditional approach of embedding relationships, RoleAssignments have their own lifecycle, metadata, and audit requirements. They need:
- Independent querying ("show all Developer roles in Project X")
- Temporal validity and expiration
- Approval and provenance tracking
- Status transitions independent of subject or scope</t>

</section>
<section anchor="why-immutable-core-attributes"><name>Why immutable core attributes?</name>
<t>Making subject, scope, and role immutable ensures audit integrity. Each RoleAssignment represents a discrete authorization event. Changes to these core attributes represent new authorization decisions and should be tracked as separate resources.</t>

</section>
</section>
</section>
<section anchor="requirements-language"><name>Requirements Language</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 anchor="overview"><name>Overview</name>

<t>The RoleAssignment resource complements existing SCIM resources. Whereas the User.roles attribute provides only coarse global roles, RoleAssignment expresses who (subject) has what role in which scope. This allows interoperable provisioning of scoped role bindings.</t>

</section>
<section anchor="schema"><name>Schema</name>

<section anchor="resource-type"><name>Resource Type</name>

<figure><sourcecode type="json"><![CDATA[
{
  "name": "RoleAssignment",
  "endpoint": "/RoleAssignments",
  "schema": "urn:ietf:params:scim:schemas:core:2.0:RoleAssignment",
  "schemaExtensions": []
}
]]></sourcecode></figure>

</section>
<section anchor="attributes-top-level"><name>Attributes (Top-Level)</name>

<t>The RoleAssignment resource defines the following top-level attributes.</t>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>subject</c>
      <c>complex</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>The subject receiving the role.</c>
      <c>scope</c>
      <c>complex</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>The scope where the role applies.</c>
      <c>role</c>
      <c>complex</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>The role granted within the scope.</c>
      <c>priority</c>
      <c>integer</c>
      <c>no</c>
      <c>no</c>
      <c>readWrite</c>
      <c>Conflict resolution (higher wins). Default 0.</c>
      <c>grant</c>
      <c>complex</c>
      <c>no</c>
      <c>no</c>
      <c>readWrite</c>
      <c>Assignment metadata (source, reason, approver).</c>
      <c>validity</c>
      <c>complex</c>
      <c>no</c>
      <c>no</c>
      <c>readWrite</c>
      <c>Validity window in UTC.</c>
      <c>status</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>readOnly</c>
      <c>Computed lifecycle status.</c>
</texttable>

<t>"The common attributes (id, externalId, meta) defined in RFC 7643 Section 3.1 are inherited by RoleAssignment and are not redefined here."
<em>Priority usage guidance:</em> When multiple active assignments exist for the same subject and scope, the assignment with the highest priority takes precedence. If priorities are equal, implementation-defined resolution rules apply.</t>

</section>
<section anchor="subject-sub-attributes"><name>subject Sub-Attributes</name>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>value</c>
      <c>string</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>Identifier of the subject. If the subject is a resource, value <bcp14>MUST</bcp14> equal the id attribute of that resource.</c>
      <c>$ref</c>
      <c>reference</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>URI to the subject resource, if the subject is a resource.</c>
      <c>type</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>Subject type. If the subject is a resource, type <bcp14>MUST</bcp14> equal the resource type name of that resource.</c>
      <c>display</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>A human-readable name for the subject.</c>
</texttable>

</section>
<section anchor="scope-sub-attributes"><name>scope Sub-Attributes</name>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>type</c>
      <c>string</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>Scope type. Common: "project", "tenant", "organization", "application", "environment".</c>
      <c>value</c>
      <c>string</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>Provider-meaningful identifier of the scope.</c>
      <c>$ref</c>
      <c>reference</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>URI to the scope resource, if available. Optional when scope is opaque.</c>
      <c>display</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>A human-readable name for the scope.</c>
</texttable>

</section>
<section anchor="role-sub-attributes"><name>role Sub-Attributes</name>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>value</c>
      <c>string</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>Stable identifier for the role. If the role is a resource, value <bcp14>MUST</bcp14> equal the id attribute of that resource.</c>
      <c>display</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>Human-readable name of the role.</c>
      <c>$ref</c>
      <c>reference</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>URI to a role catalog entry or role resource, if the role is a resource.</c>
      <c>type</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>Role type. If the role is a resource, type <bcp14>MUST</bcp14> equal the resource type name of that resource.</c>
</texttable>

<t><em>Role Discovery Guidance:</em> Since role.$ref is optional, servers <bcp14>SHOULD</bcp14> support filtering on role and scope to enable discovery, for example:</t>

<figure><artwork><![CDATA[
GET /RoleAssignments?attributes=role,scope&
    filter=scope.type eq "project"
]]></artwork></figure>

<t>Providers that expose a role catalog <bcp14>MAY</bcp14> align discovery with the SCIM Roles and Entitlements approach <xref target="SCIM-ROLES-ENTITLEMENTS"/>.</t>

</section>
<section anchor="grant-sub-attributes"><name>grant Sub-Attributes</name>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>source</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>Originating system or process.</c>
      <c>reason</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>readWrite</c>
      <c>Human-readable justification.</c>
      <c>approver</c>
      <c>complex</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>The approver of this assignment.</c>
</texttable>

<section anchor="approver-sub-attributes"><name>approver Sub-Attributes</name>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>value</c>
      <c>string</c>
      <c>yes</c>
      <c>no</c>
      <c>immutable</c>
      <c>Identifier of the approver. If the approver is a resource, value <bcp14>MUST</bcp14> equal the id attribute of that resource.</c>
      <c>$ref</c>
      <c>reference</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>URI to the approver resource, if the approver is a resource.</c>
      <c>type</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>Approver type. If the approver is a resource, type <bcp14>MUST</bcp14> equal the resource type name of that resource.</c>
      <c>display</c>
      <c>string</c>
      <c>no</c>
      <c>no</c>
      <c>immutable</c>
      <c>A human-readable name for the approver.</c>
</texttable>

</section>
</section>
<section anchor="validity-sub-attributes"><name>validity Sub-Attributes</name>

<texttable>
      <ttcol align='left'>Attribute</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Req</ttcol>
      <ttcol align='left'>Multi</ttcol>
      <ttcol align='left'>Mutability</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>validFrom</c>
      <c>dateTime</c>
      <c>no</c>
      <c>no</c>
      <c>readWrite</c>
      <c>Start of validity window (<xref target="RFC3339"/> format with optional timezone offset).</c>
      <c>validTo</c>
      <c>dateTime</c>
      <c>no</c>
      <c>no</c>
      <c>readWrite</c>
      <c>End of validity window (<xref target="RFC3339"/> format with optional timezone offset).</c>
</texttable>

</section>
<section anchor="resource-mutability"><name>Resource Mutability</name>

<t>RoleAssignment resources have restricted mutability to maintain audit integrity:</t>

<t>IMMUTABLE attributes (cannot be changed after creation):
- subject, scope, role: The core binding cannot change
- grant.source, grant.approver: Provenance must be preserved</t>

<t>MUTABLE attributes (can be updated via PATCH/PUT):
- priority: Allow conflict resolution
- validity: Allow time-bound extensions
- grant.reason: Allow justification updates</t>

<t>To change immutable attributes, clients <bcp14>MUST</bcp14> delete the existing assignment
and create a new one. This ensures each role grant is an explicit, auditable event.</t>

</section>
<section anchor="status-semantics"><name>status Semantics</name>

<t>The "status" attribute is readOnly and computed by the server. Clients cannot set this value directly.</t>

<t>Status computation rules (evaluated in order):</t>

<t><list style="numbers" type="1">
  <t>If the resource has been soft-deleted (see Section 4.9): status = "revoked"</t>
  <t>If the referenced subject.active is false: status = "suspended"</t>
  <t>If current time &lt; validity.validFrom: status = "pending"</t>
  <t>If current time &gt; validity.validTo: status = "expired"</t>
  <t>Otherwise: status = "active"</t>
</list></t>

<t>Special cases:</t>

<t><list style="symbols">
  <t>If validity.validFrom is null, the assignment is immediately eligible.</t>
  <t>If validity.validTo is null, the assignment does not expire.</t>
</list></t>

<t>Required status values:</t>

<t><list style="symbols">
  <t>"active": assignment is currently effective</t>
  <t>"expired": validity window has ended</t>
  <t>"pending": assignment created but not yet effective</t>
  <t>"suspended": subject inactive or assignment temporarily disabled</t>
  <t>"revoked": assignment was explicitly withdrawn via DELETE operation</t>
</list></t>

</section>
<section anchor="json-schema-representation"><name>JSON Schema representation</name>
<figure><sourcecode type="json"><![CDATA[
{
  "id": "urn:ietf:params:scim:schemas:core:2.0:RoleAssignment",
  "name": "RoleAssignment",
  "description": "SCIM RoleAssignment Resource",
  "attributes": [
    {
      "name": "subject",
      "type": "complex",
      "description": "The subject receiving the role",
      "required": true,
      "mutability": "immutable",
      "returned": "always",
      "uniqueness": "none",
      "subAttributes": [
        {
          "name": "value",
          "type": "string",
          "description": "Identifier of the subject. If the subject is a resource, value MUST equal the id attribute of that resource.",
          "required": true,
          "mutability": "immutable",
          "returned": "always",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "$ref",
          "type": "reference",
          "description": "URI to the subject resource, if the subject is a resource",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "referenceTypes": ["User", "Group"],
          "uniqueness": "none"
        },
        {
          "name": "type",
          "type": "string",
          "description": "Subject type. If the subject is a resource, type MUST equal the resource type name of that resource.",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "caseExact": false,
          "canonicalValues": ["User", "Group"],
          "uniqueness": "none"
        },
        {
          "name": "display",
          "type": "string",
          "description": "A human-readable name for the subject",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "caseExact": false,
          "uniqueness": "none"
        }
      ]
    },
    {
      "name": "scope",
      "type": "complex",
      "description": "The scope where the role applies",
      "required": true,
      "mutability": "immutable",
      "returned": "always",
      "uniqueness": "none",
      "subAttributes": [
        {
          "name": "type",
          "type": "string",
          "description": "Scope type. Common values include 'project', 'tenant', 'organization', 'application', 'environment'",
          "required": true,
          "mutability": "immutable",
          "returned": "always",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "value",
          "type": "string",
          "description": "Provider-meaningful identifier of the scope. If the scope is a resource, value MUST equal the id attribute of that resource.",
          "required": true,
          "mutability": "immutable",
          "returned": "always",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "$ref",
          "type": "reference",
          "description": "URI to the scope resource, if the scope is a resource",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "referenceTypes": [],
          "uniqueness": "none"
        },
        {
          "name": "display",
          "type": "string",
          "description": "A human-readable name for the scope",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "caseExact": false,
          "uniqueness": "none"
        }
      ]
    },
    {
      "name": "role",
      "type": "complex",
      "description": "The role granted within the scope",
      "required": true,
      "mutability": "immutable",
      "returned": "always",
      "uniqueness": "none",
      "subAttributes": [
        {
          "name": "value",
          "type": "string",
          "description": "Stable identifier for the role. If the role is a resource, value MUST equal the id attribute of that resource.",
          "required": true,
          "mutability": "immutable",
          "returned": "always",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "display",
          "type": "string",
          "description": "Human-readable name of the role",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "$ref",
          "type": "reference",
          "description": "URI to a role catalog entry or role resource, if available",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "referenceTypes": [],
          "uniqueness": "none"
        },
        {
          "name": "type",
          "type": "string",
          "description": "Role type. If the role is a resource, type MUST equal the resource type name of that resource.",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "caseExact": false,
          "uniqueness": "none"
        }
      ]
    },
    {
      "name": "priority",
      "type": "integer",
      "description": "Conflict resolution priority. Higher values take precedence. Default is 0.",
      "required": false,
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none"
    },
    {
      "name": "grant",
      "type": "complex",
      "description": "Assignment metadata",
      "required": false,
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none",
      "subAttributes": [
        {
          "name": "source",
          "type": "string",
          "description": "Originating system or process",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "reason",
          "type": "string",
          "description": "Human-readable justification for the assignment",
          "required": false,
          "mutability": "readWrite",
          "returned": "default",
          "caseExact": false,
          "uniqueness": "none"
        },
        {
          "name": "approver",
          "type": "complex",
          "description": "The approver of this assignment",
          "required": false,
          "mutability": "immutable",
          "returned": "default",
          "uniqueness": "none",
          "subAttributes": [
            {
              "name": "value",
              "type": "string",
              "description": "Identifier of the approver. If the approver is a resource, value MUST equal the id attribute of that resource.",
              "required": true,
              "mutability": "readWrite",
              "returned": "default",
              "caseExact": false,
              "uniqueness": "none"
            },
            {
              "name": "$ref",
              "type": "reference",
              "description": "URI to the approver resource, if the approver is a resource",
              "required": false,
              "mutability": "readWrite",
              "returned": "default",
              "referenceTypes": ["User"],
              "uniqueness": "none"
            },
            {
              "name": "type",
              "type": "string",
              "description": "Approver type. If the approver is a resource, type MUST equal the resource type name of that resource.",
              "required": false,
              "mutability": "readWrite",
              "returned": "default",
              "caseExact": false,
              "canonicalValues": ["User"],
              "uniqueness": "none"
            },
            {
              "name": "display",
              "type": "string",
              "description": "A human-readable name for the approver",
              "required": false,
              "mutability": "readWrite",
              "returned": "default",
              "caseExact": false,
              "uniqueness": "none"
            }
          ]
        }
      ]
    },
    {
      "name": "validity",
      "type": "complex",
      "description": "Validity window",
      "required": false,
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none",
      "subAttributes": [
        {
          "name": "validFrom",
          "type": "dateTime",
          "description": "Start of validity window (RFC3339 format with optional timezone offset)",
          "required": false,
          "mutability": "readWrite",
          "returned": "default",
          "uniqueness": "none"
        },
        {
          "name": "validTo",
          "type": "dateTime",
          "description": "End of validity window (RFC3339 format with optional timezone offset)",
          "required": false,
          "mutability": "readWrite",
          "returned": "default",
          "uniqueness": "none"
        }
      ]
    },
    {
      "name": "status",
      "type": "string",
      "description": "Computed lifecycle status",
      "required": false,
      "mutability": "readOnly",
      "returned": "default",
      "caseExact": true,
      "canonicalValues": ["active", "expired", "pending", "suspended", "revoked"],
      "uniqueness": "none"
    }
  ]
}
]]></sourcecode></figure>

</section>
<section anchor="soft-delete-and-audit-trail"><name>Soft Delete and Audit Trail</name>

<t>RoleAssignment resources support soft deletion to maintain audit trails and compliance records.</t>

<t>When a DELETE operation is performed on a RoleAssignment:
- The resource is NOT physically removed from the system
- The status is set to "revoked"
- The meta.lastModified timestamp is updated
- The resource remains queryable but is typically excluded from standard operational queries</t>

<t>Servers <bcp14>SHOULD</bcp14> support filtering to exclude revoked assignments from normal operations:
  GET /RoleAssignments?filter=status ne "revoked"</t>

<t>Servers <bcp14>MAY</bcp14> implement retention policies to permanently delete revoked assignments after a configurable period (e.g., 90 days, 1 year) for compliance purposes.</t>

<t>Clients performing access control decisions <bcp14>MUST</bcp14> exclude assignments with status="revoked".</t>

</section>
<section anchor="complete-example"><name>Complete Example</name>

<figure><sourcecode type="json"><![CDATA[
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:RoleAssignment"],
  "id": "assignment-12345",
  "externalId": "ext-assign-001",
  "subject": {
    "value": "alice@company.com",
    "$ref": "https://example.com/scim/v2/Users/alice",
    "type": "User"
  },
  "scope": {
    "type": "project",
    "value": "web-app-proj",
    "$ref": null
  },
  "role": {
    "display": "Developer",
    "value": "developer",
    "$ref": null
  },
  "priority": 100,
  "grant": {
    "source": "HR-System",
    "reason": "New team member onboarding",
    "approver": {
    "value": "manager@company.com",
    "$ref": "https://example.com/scim/v2/Users/manager",
    "type": "User",
    "display": "Alice Manager"
  }
  },
  "validity": {
    "validFrom": "2025-09-01T00:00:00Z",
    "validTo": "2026-09-01T00:00:00Z"
  },
  "status": "active"
}
]]></sourcecode></figure>
<t>Note: When this assignment is deleted via DELETE, the resource will remain with status changed to "revoked" and meta.lastModified updated, rather than being removed from the system.</t>

</section>
</section>
<section anchor="operations"><name>Operations</name>

<t>RoleAssignment resources support standard SCIM operations with the following requirements:</t>

<section anchor="create-post"><name>Create (POST)</name>
<t>Servers <bcp14>MUST</bcp14> validate that subject, scope, and role reference valid resources or identifiers. Missing required attributes cause 400 Bad Request per RFC 7644.</t>

</section>
<section anchor="read-get"><name>Read (GET)</name>
<t>Servers <bcp14>MUST</bcp14> support retrieval of individual RoleAssignment resources by id.</t>

</section>
<section anchor="replace-put"><name>Replace (PUT)</name>
<t>Servers <bcp14>MUST</bcp14> support full resource replacement. Attempts to modify immutable attributes (subject, scope, role, grant.source, grant.approver) <bcp14>MUST</bcp14> result in 400 Bad Request with appropriate error detail.</t>

</section>
<section anchor="patch-patch"><name>Patch (PATCH)</name>
<t>If PATCH is supported (per ServiceProviderConfig), servers <bcp14>MUST</bcp14>:
- Prevent modification of immutable attributes
- Validate that changes do not create invalid states
- Return 400 Bad Request for operations attempting to modify immutable attributes</t>

</section>
<section anchor="delete-delete"><name>Delete (DELETE)</name>
<t>Servers <bcp14>MUST</bcp14> implement soft deletion: the DELETE operation sets status="revoked" and updates meta.lastModified rather than physically removing the resource. The resource remains queryable for audit purposes. Servers <bcp14>MUST</bcp14> immediately revoke the associated permissions in the target system.</t>

</section>
<section anchor="filter-get-with-filter-parameter"><name>Filter (GET with filter parameter)</name>
<t>If filtering is supported (per ServiceProviderConfig), servers <bcp14>MUST</bcp14> support filters on:
- subject.value
- scope.value
- scope.type
- role.value
- status</t>

<t>Example: <spanx style="verb">GET /RoleAssignments?filter=subject.value eq "alice@company.com" and status ne "revoked"</spanx></t>

</section>
<section anchor="pagination-and-sorting"><name>Pagination and Sorting</name>
<t>Servers <bcp14>MUST</bcp14> support pagination using startIndex and count parameters per RFC 7644.</t>

<t>If sorting is supported (per ServiceProviderConfig), servers <bcp14>SHOULD</bcp14> support sorting by:
- meta.created
- meta.lastModified
- validity.validFrom
- validity.validTo</t>

</section>
<section anchor="bulk-operations"><name>Bulk Operations</name>
<t>Bulk operations <bcp14>MAY</bcp14> be supported per RFC 7644. Support is indicated in ServiceProviderConfig. Clients using bulk operations <bcp14>SHOULD</bcp14> populate externalId to enable idempotent retry of failed bulk requests.</t>

</section>
<section anchor="common-query-patterns"><name>Common Query Patterns</name>

<section anchor="users-assignments-excluding-revoked"><name>User's assignments (excluding revoked):</name>
<t><spanx style="verb">
GET /RoleAssignments?filter=subject.value eq "alice@company.com" and status ne "revoked"
</spanx></t>

</section>
<section anchor="all-assignments-in-a-scope"><name>All assignments in a scope:</name>
<t><spanx style="verb">
GET /RoleAssignments?filter=scope.value eq "project-x"
</spanx></t>

</section>
<section anchor="role-discovery-within-a-scope-type"><name>Role discovery within a scope type:</name>
<t><spanx style="verb">
GET /RoleAssignments?attributes=role,scope&amp;filter=scope.type eq "project"
</spanx></t>

</section>
<section anchor="expiring-assignments"><name>Expiring assignments:</name>
<t><spanx style="verb">
GET /RoleAssignments?filter=validity.validTo le "2025-12-31T23:59:59Z" and status ne "revoked"
</spanx></t>

</section>
<section anchor="audit-trail-recently-revoked-assignments"><name>Audit trail - recently revoked assignments:</name>
<t><spanx style="verb">
GET /RoleAssignments?filter=status eq "revoked" and meta.lastModified ge "2025-09-01T00:00:00Z"
</spanx></t>

</section>
<section anchor="all-active-assignments-operational-query"><name>All active assignments (operational query):</name>
<t><spanx style="verb">
GET /RoleAssignments?filter=status eq "active"
</spanx>
# Error Handling</t>

<t>RoleAssignment operations follow standard SCIM error handling per RFC 7644 Section 3.12. This section describes RoleAssignment-specific error conditions.</t>

</section>
</section>
<section anchor="invalid-validity-window"><name>Invalid Validity Window</name>

<t>Status: 400 Bad Request
scimType: invalidValue</t>

<t>Occurs when:
- validity.validFrom is after validity.validTo
- Date formats are invalid</t>

<t>Example:
<spanx style="verb">json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "400",
  "scimType": "invalidValue",
  "detail": "validity.validFrom must be before validity.validTo"
}
</spanx></t>

</section>
<section anchor="invalid-resource-reference"><name>Invalid Resource Reference</name>

<t>Status: 400 Bad Request
scimType: invalidValue</t>

<t>Occurs when:
- subject.value references a non-existent or invalid resource
- scope.value references a non-existent or invalid scope
- role.value references a non-existent or invalid role</t>

<t>Example:
<spanx style="verb">json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "400",
  "scimType": "invalidValue",
  "detail": "subject.value 'alice@example.com' does not reference a valid User resource"
}
</spanx></t>

</section>
<section anchor="duplicate-active-assignment"><name>Duplicate Active Assignment</name>

<t>Status: 409 Conflict
scimType: uniqueness</t>

<t>Occurs when attempting to create an assignment that would result in multiple active assignments with the same subject, scope, and role combination (unless distinguished by priority or validity windows).</t>

<t>Example:
<spanx style="verb">json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "409",
  "scimType": "uniqueness",
  "detail": "Active assignment already exists for subject 'alice@company.com' with role 'Developer' in scope 'project-x'"
}
</spanx></t>

</section>
<section anchor="immutable-attribute-modification"><name>Immutable Attribute Modification</name>

<t>Status: 400 Bad Request
scimType: mutability</t>

<t>Occurs when attempting to modify immutable attributes (subject, scope, role, grant.source, grant.approver) via PUT or PATCH operations.</t>

<t>Example:
<spanx style="verb">json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "400",
  "scimType": "mutability",
  "detail": "Attribute 'subject' is immutable and cannot be modified. Delete and recreate the assignment to change the subject."
}
</spanx></t>

</section>
</section>
<section anchor="backward-compatibility"><name>Backward Compatibility</name>

<t>Providers <bcp14>MAY</bcp14> continue to expose global roles via User.roles and coarse-grained membership via Groups. Providers <bcp14>SHOULD</bcp14> offer mapping guidance between legacy models and RoleAssignments.</t>

<t>During migration, providers are <bcp14>RECOMMENDED</bcp14> to:
- Maintain both User.roles and RoleAssignments representations (dual-writing)
- Use RoleAssignments for new scoped role grants
- Gradually migrate existing Group-based role patterns to RoleAssignments
- Preserve audit history when converting legacy role assignments</t>

<t>Clients transitioning to RoleAssignments <bcp14>SHOULD</bcp14>:
- Query both User.roles and RoleAssignments during migration periods
- Implement fallback logic for providers not yet supporting RoleAssignments
- Use externalId to correlate legacy role grants with new RoleAssignment resources</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t><list style="symbols">
  <t>RoleAssignment creation and modification are privileged operations.</t>
  <t>Servers <bcp14>MUST</bcp14> validate references to prevent privilege escalation.</t>
  <t>Lifecycle events <bcp14>SHOULD</bcp14> be logged with actor and justification.</t>
  <t>Replay and bulk abuse <bcp14>MUST</bcp14> be mitigated with rate limiting and idempotency.</t>
  <t>Soft deletion preserves audit trails but increases storage requirements and query complexity.
Servers <bcp14>MUST</bcp14> ensure that revoked assignments are excluded from authorization decisions, even
though they remain in the data store. Servers <bcp14>SHOULD</bcp14> implement periodic cleanup of old revoked
assignments according to organizational retention policies. Access to revoked assignments
<bcp14>SHOULD</bcp14> be restricted to auditors and compliance personnel.</t>
</list></t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>RoleAssignments may expose organizational structures and access patterns. Sensitive metadata <bcp14>SHOULD</bcp14> follow least-privilege disclosure.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This specification requests registration of the following SCIM schema:</t>

<t><list style="symbols">
  <t>URN: urn:ietf:params:scim:schemas:core:2.0:RoleAssignment</t>
  <t>Specification: this document</t>
  <t>Contact: IETF SCIM Working Group</t>
  <t>Change Controller: IESG</t>
</list></t>

<t>Experimental namespace <bcp14>MAY</bcp14> also be used:</t>

<t><list style="symbols">
  <t>URN: urn:ietf:params:scim:schemas:extension:role:1.0:RoleAssignment</t>
</list></t>

<t>URNs are assigned and interpreted in accordance with <xref target="RFC8141"/>.</t>

</section>
<section anchor="conformance"><name>Conformance</name>

<section anchor="server"><name>Server</name>

<t>A conformant SCIM server implementation:</t>

<t><list style="symbols">
  <t><bcp14>MUST</bcp14> implement RoleAssignment resource type and advertise it in /ResourceTypes</t>
  <t><bcp14>MUST</bcp14> validate subject, scope, and role references on all operations</t>
  <t><bcp14>MUST</bcp14> enforce authorization on RoleAssignment operations</t>
  <t><bcp14>MUST</bcp14> support GET, POST, PUT, DELETE operations</t>
  <t><bcp14>MUST</bcp14> enforce immutability of subject, scope, role, grant.source, and grant.approver attributes</t>
  <t><bcp14>MUST</bcp14> implement soft deletion: DELETE operations set status="revoked" rather than removing resources</t>
  <t><bcp14>MUST</bcp14> exclude status="revoked" assignments from authorization decisions</t>
  <t><bcp14>MUST</bcp14> support filtering on subject.value, scope.value, scope.type, role.value, and status (if filtering is supported per ServiceProviderConfig)</t>
  <t><bcp14>SHOULD</bcp14> support PATCH operations per RFC 7644</t>
  <t><bcp14>SHOULD</bcp14> support sorting by meta.created, meta.lastModified, and validity fields (if sorting is supported per ServiceProviderConfig)</t>
  <t><bcp14>SHOULD</bcp14> support bulk operations per RFC 7644</t>
  <t><bcp14>MAY</bcp14> implement retention policies for permanent deletion of old revoked assignments</t>
</list></t>

</section>
<section anchor="client"><name>Client</name>

<t>A conformant SCIM client implementation:</t>

<t><list style="symbols">
  <t><bcp14>MUST</bcp14> construct RoleAssignments with all required attributes per the schema</t>
  <t><bcp14>MUST</bcp14> process error responses per RFC 7644 Section 3.12</t>
  <t><bcp14>MUST NOT</bcp14> use assignments with status="revoked" for access control decisions</t>
  <t><bcp14>MUST NOT</bcp14> attempt to modify immutable attributes (subject, scope, role, grant.source, grant.approver)</t>
  <t><bcp14>SHOULD</bcp14> use externalId for idempotency, especially in bulk operations</t>
  <t><bcp14>SHOULD</bcp14> honor ETag preconditions for conditional updates</t>
  <t><bcp14>SHOULD</bcp14> filter out revoked assignments in operational queries using filter=status ne "revoked"</t>
  <t><bcp14>MAY</bcp14> query revoked assignments for audit and compliance purposes</t>
</list></t>

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

<section anchor="draft-poreddy-scim-role-assignment-01"><name>draft-poreddy-scim-role-assignment-01</name>

<t>Second version. Major changes based on working group feedback:
- Added complete JSON Schema definitions with mutability specifications
- Implemented soft deletion for audit trail preservation
- Made subject, scope, and role immutable; priority and validity mutable
- Restructured grant.approver as complex attribute with full reference pattern
- Added explicit resource mutability section and design rationale
- Updated all attribute tables to reflect immutability decisions
- Enhanced error handling with RoleAssignment-specific scenarios
- Clarified Operations section with ServiceProviderConfig references
- Added comprehensive conformance requirements for servers and clients</t>

</section>
<section anchor="draft-poreddy-scim-role-assignment-00"><name>draft-poreddy-scim-role-assignment-00</name>

<t>Initial version. Defines RoleAssignment schema, attributes, and operations. Adds priority, complete example, error examples, and query patterns. Includes error handling, backward compatibility, and IANA registration. Updates BCP14 boilerplate; replaces non-ASCII; converts ASCII tables to RFCXML tables; updates Roles/Entitlements reference to -02; cites RFC8141.</t>

</section>
</section>
<section anchor="authors-address"><name>Author's Address</name>

<t>Prithvi Poreddy
Email: prithvikrishnab4u@gmail.com</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

&RFC3339;
&RFC7643;
&RFC7644;
&RFC8141;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="GITLAB-SCIM" target="https://docs.gitlab.com/administration/settings/scim_setup/">
  <front>
    <title>Set up SCIM for GitLab groups</title>
    <author >
      <organization>GitLab Documentation</organization>
    </author>
    <date year="2025" month="September"/>
  </front>
</reference>
<reference anchor="TANIUM-RBAC" target="https://help.tanium.com/bundle/ug_console_cloud/page/platform_user/console_roles.html">
  <front>
    <title>Role-based access control in the Tanium Console</title>
    <author >
      <organization>Tanium Documentation</organization>
    </author>
    <date year="2025" month="September"/>
  </front>
</reference>
<reference anchor="AZURE-SCIM" target="https://learn.microsoft.com/en-us/answers/questions/1632657/issue-provisioning-multiple-roles-to-a-scim-app">
  <front>
    <title>Issue provisioning multiple roles to a SCIM app</title>
    <author >
      <organization>Microsoft Learn</organization>
    </author>
    <date year="2025" month="September"/>
  </front>
</reference>
<reference anchor="SCIM-ROLES-ENTITLEMENTS" >
  <front>
    <title>Roles and Entitlements Extension for SCIM</title>
    <author initials="C." surname="Zöllner" fullname="C. Zöllner">
      <organization></organization>
    </author>
    <date year="2025" month="June"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-zollner-scim-roles-entitlements-extension-02"/>
</reference>


    </references>

</references>



  </back>

<!-- ##markdown-source:
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
baG7F43h12/+uGY6mQLhgunL9rnTi9ibFct+wxLgSA03wvQqXCr3rsqSv1cy
A28F32Yggd07mNRBe+H+4msAINK3rWsgYJOv/q4BhQ8Zfq5PZAVcbwTb6+BL
71FoHb8CZoMPSPbW3nZgwL5+21sPcnQ0uiFuFcBaoN85nr4Sgu313RqEMW/x
NT/Q60ELnohxA7f1MX5LWVYb378zoBII70rGH2K/4IMDfz0Bg1WUZ2Aopn8m
3fdecaP9yDuj50ZbJr8w+K6Fl/7r+8CDXls1oTNzR8W0Jn/g41FN92Pp1kaT
tvLsOYJNHWfd7IlN3nbCv/xtJ/ztbTvhT2/bafNXo5DuZwPcahPtxPv1/zbB
+7EJ2ruMK0D+C7AHPholUxPGHwpe71vF1F2V22iYtZlkH4+KuZ/k+7AbzL8a
WXdfTr1mx/xj4tIPoxVungNg01F+VarhXobk+81j+JiI9UYqxexxtNWKTiZe
qVa68ohNbwPxDScUaxse80RraaImwxjQsjvo1D+1xTaAaTfQuhVQE5ArwbQK
KKQob69oO7Ke/xVLu6ty7TIyb8F4a7M0Pia+uUY68Q7eu9KG9R1Au/Fej6Xf
BXBtQvpXA87s1XaDrslcXbC7JsPmgxPZGuaj96sZsAmkGqDaVm4NUh1E1gWs
D5uS057OGou3AwXd5HojNNBHa8l2FbJqn7zt3Qw7LSOvhpxuQ68LP/dIRloL
7O7Vv1tor9oo+P69Qb1lE9agfkOW+DC5WP9y7FzPCyt3E94fAru8yDvh8EYZ
ax8BDq4FrPfr+1ta9Sa54fY2bONM3cdkv9oElW4Dw6TjXRciWpEQqLPxbpaL
98GttntuJ2A+zj2gtiqH8SOG2Y3YTCe7tZisIcranvOKk6Z34jZMrLshs/lC
qRbf7dIHOrGq55Kmei4xqudnO/Vc3tL36xg7MJC1x9UxV+kC61gdcRIj5gdS
+SExKsIkXZO3ak6BUBUsSuBD/6mdslpiP6pZwE+XAxwEAZ2YbWdRoS0AfyPh
SqwwAZ/Up4L5oSPfIIAGWKlhMVsqBGS6hFdzUEUxV6ijYDt5xbqhTmXDMkiY
6Zh7GYb8AYYQBmmoyrM8RjM+Jo6BZvMFttJpq81pFFjXNlNc7YX0IxWSVGiw
6HnJV7ShqidmazjatQNvYusEM1Evrjt7gydtuD+h5187b0xDUN3b1A2gqIpt
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
XeL34Q87nFd183jCW/3GbgP7R3HtuZTuWm1QhutmlmfQ8ngUTuk0oY3V6qys
zF67Zkop2pZ6/xEv5usy1bBeYDv/TW8MrclKYzJlO7Ez/81uuDZNIL3/SiqL
NfBpPiUK5YuoF3xXvbuIuu/lZO3uYT4cLligLUg1i8/CnxAIeqOcnTcgniut
7vkqvomUMTo66EMdxGiXRiarzK8ZR7dzJF5aiKcAaiZPzY3CAn0169utnjc7
tDVubo47C+M1ytBS4RcualaTRfo1eRDWAmxrHWWrN9fvaDS5GSZeqc1FCxhT
cc/pex8ImjVxQjHfbmmIByf0QtcURaHgRqXpaiN6klKtKl+z+tx5nM1CKizZ
2O6gia/awbB3xKJVl8JftO9z7itRnjX10immPROkRiGFnKH1dimd1IwaDhMF
A7VvQsTOXv2NSXo3CE6Q5vCyQUPTR/peqoZtw7K0V6uJSjfBOe8W564s4fQc
mdvrmhmy+qfugBnZOQ4nXHtINdDQE2MTwIr8ABZ3Qt6C7wEMND0ovNZu76EY
5+BlFAuMDXxhcoIU7QgcgCI6+cIETZSg3x7dgGr4y9mpfvCFzRqhYvE7tULx
jq6hWX93HzpN6FM2lslUPiBzZ1MhrAoKpYMrVs4uE/GMMRUcgxOaDhGM+Phl
kahZFo4fVn+c4gsM8gb/B+NIVOQ4hAAA

-->

</rfc>

