<?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.39 (Ruby 4.0.5) -->


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

]>


<rfc ipr="trust200902" docName="draft-vicente-oauth-apm-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="OAuth APM">Authorization Posture Mechanism (APM): Per-Transaction Consistency for OAuth 2.0</title>

    <author fullname="Brian Vicente">
      <organization>Sanctum SecOps LLC</organization>
      <address>
        <email>admin@sanctumsecops.com</email>
      </address>
    </author>

    <date year="2026" month="June" day="05"/>

    <area>Security</area>
    <workgroup>OAUTH</workgroup>
    <keyword>oauth</keyword> <keyword>mtls</keyword> <keyword>device posture</keyword> <keyword>continuous access</keyword> <keyword>zero trust</keyword> <keyword>authorization</keyword>

    <abstract>


<?line 65?>

<t>This document describes the Authorization Posture Mechanism (APM), a
method by which an OAuth 2.0 <xref target="RFC6749"/> authorization server, or a
resource server acting on its behalf, re-evaluates the mutual consistency
of three bound factors -- the client certificate, the access token, and
the device posture -- on a per-request basis for privileged operations,
rather than only at session establishment. When re-evaluated posture
degrades relative to the posture under which the token was issued, APM
defines deterministic, least-privilege Graduated Outcomes including scope
reduction and method restriction, rather than a binary allow or deny.</t>



    </abstract>



  </front>

  <middle>


<?line 77?>

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

<t>OAuth 2.0 <xref target="RFC6749"/> and related mechanisms bind tokens to a client at
issuance time. Certificate-bound access tokens <xref target="RFC8705"/> and
Demonstrating Proof of Possession (DPoP) <xref target="RFC9449"/> strengthen the
binding between a token and a key. Step-up authentication <xref target="RFC9470"/>
allows a resource server to demand stronger authentication for specific
requests. These mechanisms are predominantly evaluated per session or per
challenge. Continuous Access Evaluation <xref target="CAEP"/> propagates security-event
signals between providers but does not, by itself, define a per-request
consistency computation across certificate, token, and posture at the
point of enforcement.</t>

<t>APM addresses a complementary problem: at the granularity of an individual
privileged request, re-computing whether the presented certificate, the
presented token, and the current device posture remain mutually consistent
with the posture under which the token was issued, and defining what
happens when they do not.</t>

<t><xref target="I-D.ietf-oauth-attestation-based-client-auth"/> defines attestation-based
client authentication but explicitly leaves device-attestation details out
of scope and operates at authentication time. APM occupies the
intersection: an issuance-time-anchored, per-request consistency check
with deterministic graduated outcomes. APM graduates the authorization
policy rather than applying a binary permit or deny: when posture degrades,
the mechanism reduces to the most permissive authorization the current
posture supports. The specific decision function that maps a degradation to
an outcome class is implementation-defined and out of scope of this
document; see the Applicability section of the corresponding Sanctum
SecOps publication.</t>

</section>
<section anchor="requirements"><name>Requirements</name>

<t>This section specifies functional requirements for an APM solution.
Requirements describe what a conforming mechanism <bcp14>SHOULD</bcp14> satisfy; they
do not constitute a protocol specification.</t>

<dl>
  <dt>REQ-1:</dt>
  <dd>
    <t>For each Privileged Request, the enforcing entity <bcp14>SHOULD</bcp14> assemble a
Consistency View comprising (a) the client certificate or DPoP key
thumbprint, (b) the bound access token's claims including <spanx style="verb">cnf</spanx>, and
(c) an integrity-protected device-posture signal associated with the
request.</t>
  </dd>
  <dt>REQ-2:</dt>
  <dd>
    <t>At token issuance, the authorization server <bcp14>SHOULD</bcp14> record the security
posture of the requesting client as the Issuance Posture, associated
with the token either as a signed claim or as server-side metadata
accessible via token introspection <xref target="RFC7662"/>.</t>
  </dd>
  <dt>REQ-3:</dt>
  <dd>
    <t>The enforcing entity <bcp14>SHOULD</bcp14> evaluate the Consistency View against the
Issuance Posture synchronously with processing of the Privileged
Request.  The evaluation function <bcp14>SHOULD</bcp14> be deterministic: identical
inputs <bcp14>MUST</bcp14> produce the same outcome classification.</t>
  </dd>
  <dt>REQ-4:</dt>
  <dd>
    <t>The enforcing entity <bcp14>SHOULD</bcp14> produce Graduated Outcomes ordered by the
least-privilege principle: Permit, Scope Reduction, Method Restriction,
and Full Denial, applied proportionally to the degree of degradation.</t>
  </dd>
  <dt>REQ-5:</dt>
  <dd>
    <t>Method Restriction <bcp14>SHOULD</bcp14> be a distinct outcome class, expressible in
terms of HTTP methods or RAR <spanx style="verb">actions</spanx> per <xref target="RFC9396"/> §2.2.  The
response <bcp14>MUST</bcp14> convey the permitted method or operation set.</t>
  </dd>
  <dt>REQ-6:</dt>
  <dd>
    <t>Scope Reduction <bcp14>MUST NOT</bcp14> be implemented by modifying the access token.
It <bcp14>MUST</bcp14> be applied by the resource server or APM Enforcement Point as
an additional constraint during request processing.</t>
  </dd>
  <dt>REQ-7:</dt>
  <dd>
    <t>A deployment <bcp14>SHOULD</bcp14> define a policy that maps posture degradation
dimensions to outcome classes in a deterministic, auditable manner
independent of transient state beyond the Consistency View and
Issuance Posture.</t>
  </dd>
  <dt>REQ-8:</dt>
  <dd>
    <t>The device-posture signal <bcp14>MUST</bcp14> be integrity-protected.  Integrity
protection <bcp14>SHOULD</bcp14> be cryptographic.  The signing authority <bcp14>SHOULD</bcp14> be
distinct from the client itself.</t>
  </dd>
  <dt>REQ-9:</dt>
  <dd>
    <t>An APM mechanism <bcp14>MUST</bcp14> operate as an additive layer over existing
sender-constraining mechanisms.  It <bcp14>MUST NOT</bcp14> weaken the <spanx style="verb">cnf/x5t#S256</spanx>
binding of <xref target="RFC8705"/> or the <spanx style="verb">cnf/jkt</spanx> binding of <xref target="RFC9449"/>.
Implementations that do not recognize APM parameters <bcp14>MUST</bcp14> ignore them.</t>
  </dd>
  <dt>REQ-10:</dt>
  <dd>
    <t>A Scope Reduction or Method Restriction outcome <bcp14>MUST NOT</bcp14> be interpreted
as a token revocation event.  The token remains valid for subsequent
requests, which may yield different outcome classifications if posture
is restored.</t>
  </dd>
</dl>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</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?>

<t>The following terms are used throughout this document:</t>

<dl>
  <dt>Consistency View:</dt>
  <dd>
    <t>the tuple of (client certificate, access token and its bound claims,
current device-posture signal) assembled for a single privileged
request.</t>
  </dd>
  <dt>Issuance Posture:</dt>
  <dd>
    <t>the device-posture state recorded at the time the access token was
issued.</t>
  </dd>
  <dt>Posture Degradation:</dt>
  <dd>
    <t>a determination that the current device-posture signal is materially
weaker than the Issuance Posture.</t>
  </dd>
  <dt>Graduated Outcome:</dt>
  <dd>
    <t>one of a defined set of deterministic, least-privilege responses to a
detected Posture Degradation: scope_reduction, method_restriction, or
full_denial.</t>
  </dd>
  <dt>APM Enforcement Point:</dt>
  <dd>
    <t>an authorization server or resource server that implements the
consistency-view evaluation described in this document.</t>
  </dd>
</dl>

</section>
<section anchor="mechanism-overview"><name>Mechanism Overview</name>

<t>For each privileged request, an APM Enforcement Point executes the
following five-step state machine:</t>

<figure><artwork><![CDATA[
         +----------------------+
         |   Request Received   |
         +----------+-----------+
                    |
                    v
         +----------+-----------+
         |  Step 1: Assemble    |
         |  Consistency View    |
         +----------+-----------+
                    |
         +----------v-----------+
         | Step 2: Cert         |
         | Thumbprint Check     |
         +----------+-----------+
               |           |
            PASS         FAIL -----> FULL_DENIAL
               v
         +----------+-----------+
         | Step 3: DPoP Key     |
         | Binding Check        |
         +----------+-----------+
               |           |
            PASS         FAIL -----> FULL_DENIAL
               v
         +----------+-----------+
         | Step 4: Posture vs.  |
         | Issuance Posture     |
         +----------+-----------+
               |           |
         CONSISTENT    DEGRADED
               |           |
               v           v
            200 OK    Step 5: Dispatch
                      Graduated Outcome
                      (scope_red | method_rest | full_deny)
]]></artwork></figure>

<t>An endpoint determines which requests are "privileged" by local policy.
APM is a defense-in-depth control expected to be applied to a subset of
high-value operations. Applying APM to every request increases the
side-channel surface described in <xref target="side-channel"/>.</t>

<t>When Posture Degradation is detected, an APM Enforcement Point applies one
of the following Graduated Outcome classes, ordered from least restrictive
to most restrictive:</t>

<t><list style="symbols">
  <t>scope_reduction: narrowing the effective authorization per <xref target="RFC9396"/>;</t>
  <t>method_restriction: limiting the permitted HTTP method;</t>
  <t>full_denial: refusing the request.</t>
</list></t>

<t>Policy authors <bcp14>MUST</bcp14> design graduated outcomes so that every downgrade path
leads to a safe, self-consistent authorization state. Each Graduated
Outcome <bcp14>MUST</bcp14> correspond to a complete access control policy, not a partial
policy derived by removing permissions from the full policy.</t>

<t>The pseudocode below specifies the normative evaluation procedure:</t>

<figure><sourcecode type="pseudocode"><![CDATA[
function EvaluateConsistencyView(request, token, postureSignal):

  # Step 1: Assemble Consistency View.
  view = ConsistencyView {
      cert:    request.mtlsClientCertificate,
      token:   token,
      posture: postureSignal
  }

  # Step 2: RFC 8705 cert thumbprint check.
  tokenCertHash     = token.cnf["x5t#S256"]
  presentedCertHash = BASE64URL(SHA256(DER_ENCODE(view.cert)))
  if tokenCertHash != presentedCertHash:
      return FULL_DENIAL("cert_thumbprint_mismatch")

  # Step 3: RFC 9449 DPoP key binding check (if applicable).
  if token.isDPoP:
      dpopProof          = request.header["DPoP"]
      dpopKey            = dpopProof.header["jwk"]
      tokenKeyThumbprint = token.cnf["jkt"]
      proofKeyThumbprint = JWK_SHA256_THUMBPRINT(dpopKey)
      if tokenKeyThumbprint != proofKeyThumbprint:
          return FULL_DENIAL("dpop_key_mismatch")
      if not ValidateDPoP(dpopProof, request.method, request.uri, token):
          return FULL_DENIAL("dpop_proof_invalid")

  # Step 4: Posture consistency evaluation.
  issuancePosture   = token.claims["apm_issuance_posture"]
  currentPosture    = view.posture
  degradationResult = ComputePostureDegradation(
                          issuancePosture, currentPosture)
  # ComputePostureDegradation is implementation-defined.
  # Its parameters, scoring, and thresholds are out of scope.

  if degradationResult == CONSISTENT:
      return GRANT(token.scope)

  # Step 5: Decision-function dispatch (implementation-defined).
  outcome = DispatchGraduatedOutcome(degradationResult)

  if outcome.class == "scope_reduction":
      effectiveScope = outcome.effective_scope
      if request.requiresScope NOT IN effectiveScope:
          return HTTP_403(authorizationDetails(outcome))
      else:
          return HTTP_200_WITH_REDUCED_SCOPE(effectiveScope,
                                             authorizationDetails(outcome))

  if outcome.class == "method_restriction":
      permittedMethods = outcome.permitted_methods
      if request.method NOT IN permittedMethods:
          return HTTP_405(allow=permittedMethods,
                          authorizationDetails(outcome))
      else:
          return HTTP_200_WITH_METHOD_RESTRICTION(
                          authorizationDetails(outcome))

  if outcome.class == "full_denial":
      return HTTP_403(authorizationDetails(outcome))
]]></sourcecode></figure>

<t>Implementations <bcp14>MUST NOT</bcp14> cache introspection responses for tokens where
APM is active, or <bcp14>MUST</bcp14> use a freshness window for cached responses shorter
than the expected posture-change window.</t>

</section>
<section anchor="wire-format"><name>Wire Format</name>

<section anchor="authorizationdetails-object"><name>authorization_details Object</name>

<t>APM outcomes <bcp14>MUST</bcp14> be conveyed as typed <spanx style="verb">authorization_details</spanx> objects per
<xref target="RFC9396"/>. The <spanx style="verb">type</spanx> value for APM Graduated Outcomes is:</t>

<figure><artwork><![CDATA[
urn:apm:graduated-outcome:v1
]]></artwork></figure>

<t>The following JSON Schema defines the APM outcome object:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "type": "urn:apm:graduated-outcome:v1",
  "class": "<scope_reduction | method_restriction | full_denial>",
  "original_scope": "<space-separated OAuth scope string>",
  "effective_scope": "<space-separated reduced scope string>",
  "permitted_methods": ["<HTTP method>"],
  "reason_code": "<implementation-defined string>",
  "apm_decision_id": "<opaque identifier>"
}
]]></sourcecode></figure>

<t>Field semantics:</t>

<figure><artwork><![CDATA[
+-----------------------+--------+----------+---------------------------+
| Field                 | Type   | Presence | Semantics                 |
+-----------------------+--------+----------+---------------------------+
| type                  | string | REQUIRED | Always                    |
|                       |        |          | urn:apm:graduated-outcome |
|                       |        |          | :v1                       |
+-----------------------+--------+----------+---------------------------+
| class                 | string | REQUIRED | One of scope_reduction,   |
|                       |        |          | method_restriction,       |
|                       |        |          | full_denial               |
+-----------------------+--------+----------+---------------------------+
| original_scope        | string | REQUIRED | Scope at token issuance   |
+-----------------------+--------+----------+---------------------------+
| effective_scope       | string | REQUIRED | Reduced scope; present    |
|                       |        | if class | only if class is          |
|                       |        | = scope_ | scope_reduction           |
|                       |        | reduction|                           |
+-----------------------+--------+----------+---------------------------+
| permitted_methods     | array  | REQUIRED | Permitted HTTP methods;   |
|                       |        | if class | present only if class is  |
|                       |        | = method | method_restriction        |
|                       |        | _restrict|                           |
+-----------------------+--------+----------+---------------------------+
| reason_code           | string | RECOM-   | Opaque code identifying   |
|                       |        | MENDED   | degradation category.     |
|                       |        |          | MUST NOT encode scoring   |
|                       |        |          | weights or thresholds.    |
+-----------------------+--------+----------+---------------------------+
| apm_decision_id       | string | RECOM-   | Opaque identifier for     |
|                       |        | MENDED   | audit-log correlation;    |
|                       |        |          | not interpretable by      |
|                       |        |          | the client.               |
+-----------------------+--------+----------+---------------------------+
]]></artwork></figure>

<t>The <spanx style="verb">reason_code</spanx> field <bcp14>MUST NOT</bcp14> include decision-function parameters,
scoring weights, thresholds, or posture metric values. Acceptable
enumerated codes include POSTURE_DEGRADED, ATTESTATION_CLASS_CHANGED,
and CERT_THUMBPRINT_MISMATCH.</t>

</section>
<section anchor="www-authenticate-challenge"><name>WWW-Authenticate Challenge</name>

<t>When a Graduated Outcome is accompanied by an invitation to
re-authenticate (step-up per <xref target="RFC9470"/>), the resource server <bcp14>SHOULD</bcp14>
return a <spanx style="verb">WWW-Authenticate</spanx> challenge:</t>

<t>For Bearer-bound tokens:</t>

<figure><artwork><![CDATA[
WWW-Authenticate: Bearer
    error="insufficient_user_authentication",
    error_description="Device posture degraded; re-authentication required",
    acr_values="<acceptable ACR values>",
    scope="<scope hint for step-up>"
]]></artwork></figure>

<t>For DPoP-bound tokens:</t>

<figure><artwork><![CDATA[
WWW-Authenticate: DPoP
    error="insufficient_user_authentication",
    acr_values="<acceptable ACR values>"
]]></artwork></figure>

</section>
<section anchor="http-status-mapping"><name>HTTP Status Mapping</name>

<figure><artwork><![CDATA[
+--------------------+-------------------+-----------------------------+
| APM Outcome Class  | HTTP Status       | Rationale                   |
+--------------------+-------------------+-----------------------------+
| scope_reduction    | 200 OK or         | If effective_scope permits  |
|                    | 403 Forbidden     | the resource, 200 with      |
|                    |                   | reduced scope. If not, 403. |
+--------------------+-------------------+-----------------------------+
| method_restriction | 405 Method Not    | Allow header SHOULD list    |
|                    | Allowed           | permitted_methods.          |
+--------------------+-------------------+-----------------------------+
| full_denial        | 403 Forbidden     | Explicit denial regardless  |
|                    |                   | of token validity.          |
+--------------------+-------------------+-----------------------------+
| Step-up invitation | 401 Unauthorized  | When re-authentication at   |
|                    | with WWW-         | higher assurance would      |
|                    | Authenticate      | restore access.             |
+--------------------+-------------------+-----------------------------+
]]></artwork></figure>

</section>
</section>
<section anchor="posture-signal-abstraction"><name>Posture-Signal Abstraction</name>

<t>APM treats the posture signal as an opaque, integrity-protected input. The
specific attestation format, measurement protocol, and trust chain for the
posture signal are outside the scope of this document.</t>

<t>An APM Enforcement Point <bcp14>MUST</bcp14> require that:
(1) the posture signal is integrity-protected (signed or MAC'd by a
trusted posture authority);
(2) the posture signal includes an <spanx style="verb">iat</spanx> (issued-at) claim for freshness
evaluation;
(3) the posture signal includes a subject identifier binding it to the
device or client instance;
(4) the posture signal <bcp14>SHOULD</bcp14> include a unique identifier (<spanx style="verb">jti</spanx>) for
replay detection.</t>

<t>While not mandating a specific format, this document recommends the
following JWT shape for implementations requiring an interoperable
baseline:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "iss": "https://posture.example.com",
  "sub": "device-12345",
  "iat": 1735689600,
  "jti": "4f9a2b1c-e8d7-4a3b-9c2e-1d0f8a7b6c5d",
  "posture": {
    "attestation_class": "hardware_tpm",
    "device_compliance": "compliant",
    "last_attestation_iat": 1735689590,
    "binding_cert_thumbprint_s256": "OKy4RNzHvwY..."
  }
}
]]></sourcecode></figure>

<t>This schema <bcp14>MUST NOT</bcp14> include scoring weights, risk-band thresholds, or
decision budgets. The fields above expose only the observable posture
properties. The <spanx style="verb">attestation_class</spanx> field is an implementation-defined
string (e.g., hardware_tpm, software_tee, none); ordering and thresholds
are implementation-defined and out of scope.</t>

</section>
<section anchor="interaction-matrix"><name>Interaction Matrix</name>

<t>The following table describes how APM relates to each relevant protocol:</t>

<figure><artwork><![CDATA[
+----------------------------------+--------------------------------------+
| Mechanism                        | Relationship and What APM Adds       |
+----------------------------------+--------------------------------------+
| RFC 8705 mTLS Certificate-Bound  | APM consistency view includes the    |
| Tokens                           | mTLS cert thumbprint check (Step 2). |
|                                  | APM re-verifies per privileged       |
|                                  | request; RFC 8705 binds at issuance. |
+----------------------------------+--------------------------------------+
| RFC 9449 DPoP                    | APM consistency view includes DPoP   |
|                                  | proof validation (Step 3). APM       |
|                                  | re-verifies per request.             |
+----------------------------------+--------------------------------------+
| RFC 9470 Step-Up Authentication  | APM MAY trigger step-up by returning |
|                                  | 401 + WWW-Authenticate with          |
|                                  | acr_values. RFC 9470 defines the     |
|                                  | challenge; APM decides when to use   |
|                                  | it based on posture evaluation.      |
+----------------------------------+--------------------------------------+
| RFC 9396 Rich Authorization      | APM graduated outcomes are conveyed  |
| Requests                         | as urn:apm:graduated-outcome:v1      |
|                                  | authorization_details objects.       |
+----------------------------------+--------------------------------------+
| RFC 7662 Token Introspection     | Orthogonal. Introspection determines |
|                                  | token validity; APM determines       |
|                                  | posture consistency within the       |
|                                  | valid-token window. APM is layered   |
|                                  | on top of introspection.             |
+----------------------------------+--------------------------------------+
| draft-ietf-oauth-attestation-    | Orthogonal. Attestation-based client |
| based-client-auth                | auth operates at authentication time.|
|                                  | APM extends attestation into per-    |
|                                  | request enforcement throughout the   |
|                                  | token lifetime.                      |
+----------------------------------+--------------------------------------+
| OpenID CAEP 1.0                  | Composable. CAEP provides async      |
|                                  | event-push; APM provides synchronous |
|                                  | per-request enforcement. CAEP events |
|                                  | can feed APM's posture-state cache.  |
|                                  | CAEP SETs MUST be signed and         |
|                                  | verified against a trusted-issuer    |
|                                  | allowlist before use as posture      |
|                                  | inputs.                              |
+----------------------------------+--------------------------------------+
]]></artwork></figure>

<t>The <bcp14>RECOMMENDED</bcp14> layering for deployments that combine all mechanisms is:
Layer A (token validity) per <xref target="RFC7662"/>; Layer B-core (cert binding) per
<xref target="RFC8705"/>; Layer C (DPoP) per <xref target="RFC9449"/> where applicable; Layer D (APM
consistency) per this document.</t>

</section>
<section anchor="prior-art"><name>Relationship to Prior Art</name>

<t>The following table enumerates gaps in existing mechanisms and how APM
addresses each.</t>

<figure><artwork><![CDATA[
+---------------------------+------------------------------+---------------------------+
| Prior art                 | Gap                          | How APM addresses it      |
+---------------------------+------------------------------+---------------------------+
| RFC 8705 mTLS cert-bound  | Proves key possession at     | APM adds per-request      |
| tokens                    | issuance; does not re-check  | cert-thumbprint check     |
| (https://www.rfc-editor   | cert validity, revocation,   | (Step 2) and per-request  |
| .org/rfc/rfc8705)         | or device posture per        | posture evaluation        |
|                           | request (RFC 8705 §6.5).     | (Steps 4-5).              |
+---------------------------+------------------------------+---------------------------+
| RFC 9449 DPoP             | Proves key possession and    | APM extends DPoP          |
| (https://www.rfc-editor   | method/URI binding per       | per-request enforcement   |
| .org/rfc/rfc9449)         | request; does not evaluate   | to include device-posture |
|                           | device posture               | consistency evaluation.   |
|                           | (RFC 9449 §11.7, §11.11).    |                           |
+---------------------------+------------------------------+---------------------------+
| RFC 9470 Step-Up          | Reactive, fires on           | APM produces graduated    |
| Authentication            | authentication failures;     | outcomes (scope_reduction,|
| (https://www.rfc-editor   | outcome is binary (re-auth   | method_restriction) for   |
| .org/rfc/rfc9470)         | or deny); no device posture. | minor degradations rather |
|                           |                              | than binary deny.         |
+---------------------------+------------------------------+---------------------------+
| RFC 9396 Rich             | Fine-grained initial grants  | APM applies post-issuance |
| Authorization Requests    | are static for the token     | narrowing of effective    |
| (https://www.rfc-editor   | lifetime; no post-issuance   | scope and methods via     |
| .org/rfc/rfc9396)         | narrowing on posture change  | Graduated Outcomes.       |
|                           | (RFC 9396 §5.3).             |                           |
+---------------------------+------------------------------+---------------------------+
| OpenID CAEP 1.0           | Asynchronous event push;     | APM provides synchronous  |
| (https://openid.net/specs | temporal gap between event   | per-request enforcement;  |
| /openid-caep-1_0-final    | and enforcement; binary      | CAEP events MAY feed      |
| .html)                    | compliance vocabulary; no    | APM's posture-state cache |
|                           | per-request posture check.   | (composable).             |
+---------------------------+------------------------------+---------------------------+
| draft-ietf-oauth-         | Attestation operates at      | APM extends attestation   |
| attestation-based-client- | authentication time; no      | into per-request          |
| auth                      | normative mechanism to force | enforcement throughout    |
| (https://datatracker.ietf | re-attestation on posture    | the token lifetime.       |
| .org/doc/draft-ietf-oauth | degradation within a JWT's   |                           |
| -attestation-based-client | validity window.             |                           |
| -auth/)                   |                              |                           |
+---------------------------+------------------------------+---------------------------+
]]></artwork></figure>

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

<t>APM is a defense-in-depth mechanism and <bcp14>MUST NOT</bcp14> weaken any binding
defined by <xref target="RFC8705"/> or <xref target="RFC9449"/>. The posture signal is an input to an
authorization decision and <bcp14>MUST</bcp14> be integrity-protected; an APM Enforcement
Point <bcp14>MUST NOT</bcp14> base a Graduated Outcome on an unauthenticated posture
signal. Specific tuning parameters used by implementations of this
mechanism are out of scope of this document; see the Applicability section
of the corresponding Sanctum SecOps publication.</t>

<section anchor="replay-posture"><name>Replay of Stale Posture Signals</name>

<t>A posture signal valid at token-issuance time may be captured and replayed
by an adversary to make the resource server believe posture has not
degraded. Mitigations: (1) the posture signal <bcp14>MUST</bcp14> include an <spanx style="verb">iat</spanx> claim;
the APM Enforcement Point <bcp14>SHOULD</bcp14> reject signals with an <spanx style="verb">iat</spanx> older than
an implementation-defined freshness window; (2) the resource server <bcp14>MAY</bcp14>
include a server-generated nonce in a challenge, providing challenge-
response-based replay protection; (3) if the posture signal is bound to
the access token via the same DPoP key <xref target="RFC9449"/>, replaying it under a
different token requires breaking the binding. The formal model for replay
resistance in authenticated protocols is established in <xref target="BellareRogaway"/>.</t>

</section>
<section anchor="downgrade-forcing"><name>Downgrade-Forcing Attacks</name>

<t>An adversary who can manipulate the posture-signal channel can inject a
degraded posture signal to obtain a downgraded token -- for example,
obtaining a scoped-down token that avoids audit scrutiny, or triggering a
method_restriction outcome that permits read access without the write-
access audit trail. Mitigations: (1) the posture signal <bcp14>MUST</bcp14> be integrity-
protected; (2) policy authors <bcp14>SHOULD</bcp14> design graduated outcomes so that
every downgrade path leads to a safe, self-consistent authorization state;
an operation that is only safe at full authorization <bcp14>SHOULD</bcp14> map to
full_denial rather than scope_reduction when posture degrades.</t>

</section>
<section anchor="confused-deputy"><name>Confused-Deputy Under Graduated Downgrade</name>

<t>The confused-deputy problem arises in APM when a partially-authorized
(downgraded) request is processed by a resource server that believes it is
acting on behalf of a fully-authorized principal. Each Graduated Outcome
<bcp14>MUST</bcp14> correspond to a complete access control policy, not a partial policy
derived by removing permissions from the full policy. Policy authors <bcp14>MUST</bcp14>
audit every graduated outcome in isolation, not only relative to the
full-authorization policy.</t>

</section>
<section anchor="side-channel"><name>Side-Channel Leakage of Device State</name>

<t>Because APM re-evaluates posture on every privileged request, the resource
server observes the posture signal at high frequency. Implementations <bcp14>MUST
NOT</bcp14> return different response codes or timing based solely on posture
quality in a way that leaks posture details not already visible from the
authorization outcome. APM <bcp14>SHOULD</bcp14> be applied only to operations designated
as privileged. The principle that authenticated key exchange security
requires binding identities to session keys via signatures and MACs
together (<xref target="Krawczyk2003"/>) is analogous to APM's multi-factor consistency
check; the same binding-integrity properties <bcp14>SHOULD</bcp14> be maintained
throughout the APM enforcement path.</t>

<t>The remaining threat considerations (compromise of the posture-signal
channel, DPoP and mTLS binding compromise, CAEP signal injection) are
addressed by the posture-signal integrity requirements in
<xref target="mechanism-overview"/>, the trusted-issuer allowlist requirement for CAEP
inputs in <xref target="interaction-matrix"/>, and the independence requirement that
the posture signal used by APM <bcp14>SHOULD</bcp14> be a direct attestation from the
device itself, not solely derived from CAEP events.</t>

</section>
</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>This section records the status of known implementations of the protocol
defined by this specification at the time of posting, as required by
<xref target="RFC7942"/>.</t>

<t>Organization: Sanctum SecOps LLC</t>

<t>Description: An experimental Go implementation of the APM Consistency View
assembly and graduated-outcome dispatch, covering the certificate-thumbprint
check (Step 2), DPoP-key-binding check (Step 3), and graduated-outcome
application for all three outcome classes defined in <xref target="mechanism-overview"/>.
The wire format encoding of <spanx style="verb">authorization_details</spanx> per <xref target="wire-format"/> and
the <spanx style="verb">WWW-Authenticate</spanx> challenge format per <xref target="RFC9470"/> are implemented.
Located at <spanx style="verb">poc/apm/</spanx> in the companion repository at
https://github.com/Sanc-Admin/sanctum-ietf (private until counsel
hand-off).</t>

<t>Coverage: Consistency View assembly and all five steps of the algorithm in
<xref target="mechanism-overview"/>, wire-format encoding of APM outcome objects, and
HTTP status code mapping per <xref target="wire-format"/>.</t>

<t>Maturity: Experimental reference implementation. This implementation is
provided for early interoperability testing only and <bcp14>MUST NOT</bcp14> be deployed
in production or used for security-critical operations without review by
qualified security and legal counsel.</t>

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

<section anchor="authorizationdetails-type-registration"><name>authorization_details Type Registration</name>

<t>IANA is requested to register the following <spanx style="verb">authorization_details</spanx> type in
the OAuth Authorization Details Types registry established by <xref target="RFC9396"/>:</t>

<figure><artwork><![CDATA[
Type name:    urn:apm:graduated-outcome:v1
Change controller: IETF
Specification document: This document (TBD2)
Description: APM graduated-outcome object conveying the outcome class,
             effective scope, permitted methods, and audit correlation
             identifier for a per-request posture consistency evaluation.
]]></artwork></figure>

<t>The value TBD2 is a placeholder to be assigned upon RFC publication. For
early interoperability, implementations <bcp14>MAY</bcp14> use the type string
<spanx style="verb">urn:apm:graduated-outcome:v1</spanx> directly; this string is stable and does
not depend on the IANA OID arc. The publicly registered Sanctum SecOps
PEN (1.3.6.1.4.1.65953) is used for any experimental OID-based
identifiers and <bcp14>MUST NOT</bcp14> be relied upon as a permanent registration.</t>

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

</section>


  </middle>

  <back>


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

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



<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="RFC6749">
  <front>
    <title>The OAuth 2.0 Authorization Framework</title>
    <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
    <date month="October" year="2012"/>
    <abstract>
      <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6749"/>
  <seriesInfo name="DOI" value="10.17487/RFC6749"/>
</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>
<reference anchor="RFC8705">
  <front>
    <title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
    <date month="February" year="2020"/>
    <abstract>
      <t>This document describes OAuth client authentication and certificate-bound access and refresh tokens using mutual Transport Layer Security (TLS) authentication with X.509 certificates. OAuth clients are provided a mechanism for authentication to the authorization server using mutual TLS, based on either self-signed certificates or public key infrastructure (PKI). OAuth authorization servers are provided a mechanism for binding access tokens to a client's mutual-TLS certificate, and OAuth protected resources are provided a method for ensuring that such an access token presented to it was issued to the client presenting the token.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8705"/>
  <seriesInfo name="DOI" value="10.17487/RFC8705"/>
</reference>
<reference anchor="RFC9449">
  <front>
    <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
    <author fullname="D. Fett" initials="D." surname="Fett"/>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="D. Waite" initials="D." surname="Waite"/>
    <date month="September" year="2023"/>
    <abstract>
      <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9449"/>
  <seriesInfo name="DOI" value="10.17487/RFC9449"/>
</reference>
<reference anchor="RFC9470">
  <front>
    <title>OAuth 2.0 Step Up Authentication Challenge Protocol</title>
    <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <date month="September" year="2023"/>
    <abstract>
      <t>It is not uncommon for resource servers to require different authentication strengths or recentness according to the characteristics of a request. This document introduces a mechanism that resource servers can use to signal to a client that the authentication event associated with the access token of the current request does not meet its authentication requirements and, further, how to meet them. This document also codifies a mechanism for a client to request that an authorization server achieve a specific authentication strength or recentness when processing an authorization request.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9470"/>
  <seriesInfo name="DOI" value="10.17487/RFC9470"/>
</reference>
<reference anchor="RFC9396">
  <front>
    <title>OAuth 2.0 Rich Authorization Requests</title>
    <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
    <author fullname="J. Richer" initials="J." surname="Richer"/>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <date month="May" year="2023"/>
    <abstract>
      <t>This document specifies a new parameter authorization_details that is used to carry fine-grained authorization data in OAuth messages.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9396"/>
  <seriesInfo name="DOI" value="10.17487/RFC9396"/>
</reference>
<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>



    </references>

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



<reference anchor="RFC7662">
  <front>
    <title>OAuth 2.0 Token Introspection</title>
    <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
    <date month="October" year="2015"/>
    <abstract>
      <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7662"/>
  <seriesInfo name="DOI" value="10.17487/RFC7662"/>
</reference>

<reference anchor="I-D.ietf-oauth-attestation-based-client-auth">
   <front>
      <title>OAuth 2.0 Attestation-Based Client Authentication</title>
      <author fullname="Tobias Looker" initials="T." surname="Looker">
         <organization>MATTR</organization>
      </author>
      <author fullname="Paul Bastian" initials="P." surname="Bastian">
         <organization>Bundesdruckerei</organization>
      </author>
      <author fullname="Christian Bormann" initials="C." surname="Bormann">
         <organization>SPRIND</organization>
      </author>
      <date day="25" month="May" year="2026"/>
      <abstract>
	 <t>   This specification defines an extension to the OAuth 2.0 protocol
   [RFC6749] that enables a client instance to include a key-bound
   attestation when interacting with an Authorization Server or Resource
   Server.  This mechanism allows a client instance to prove its
   authenticity verified by a client attester without revealing its
   target audience to that attester.  It may also serve as a mechanism
   for client authentication as per OAuth 2.0.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-attestation-based-client-auth-09"/>
   
</reference>

<reference anchor="NIST.SP.800-207" target="https://csrc.nist.gov/pubs/sp/800/207/final">
  <front>
    <title>Zero Trust Architecture</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2020" month="August"/>
  </front>
  <seriesInfo name="NIST Special Publication" value="800-207"/>
</reference>
<reference anchor="CAEP" target="https://openid.net/specs/openid-caep-1_0-final.html">
  <front>
    <title>OpenID Continuous Access Evaluation Profile (CAEP) 1.0</title>
    <author >
      <organization></organization>
    </author>
    <date year="2025"/>
  </front>
</reference>
<reference anchor="BellareRogaway" target="https://cseweb.ucsd.edu/~mihir/papers/eakd.pdf">
  <front>
    <title>Entity Authentication and Key Distribution</title>
    <author initials="M." surname="Bellare">
      <organization></organization>
    </author>
    <author initials="P." surname="Rogaway">
      <organization></organization>
    </author>
    <date year="1993"/>
  </front>
  <seriesInfo name="Advances in Cryptology -- CRYPTO 1993" value="LNCS 773"/>
</reference>
<reference anchor="Krawczyk2003" target="https://www.iacr.org/archive/crypto2003/27290399/27290399.pdf">
  <front>
    <title>SIGMA: The SIGn-and-MAc Approach to Authenticated Diffie-Hellman and Its Use in the IKE Protocols</title>
    <author initials="H." surname="Krawczyk">
      <organization></organization>
    </author>
    <date year="2003"/>
  </front>
  <seriesInfo name="Advances in Cryptology -- CRYPTO 2003" value="LNCS 2729"/>
</reference>


    </references>

</references>


<?line 725?>

<section anchor="worked-example"><name>Worked Example: Compliance Downgrade -- scope_reduction Outcome</name>

<t>All JWT and certificate thumbprints are synthetic. No real credentials are
used.</t>

<t>Context: Device compliance has dropped (MDM reports a policy violation).
Current posture has <spanx style="verb">device_compliance = non_compliant</spanx> while the Issuance
Posture had <spanx style="verb">compliant</spanx>.</t>

<t>Current posture signal JWT payload (synthetic):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "iss": "https://posture.example.com",
  "sub": "device-12345",
  "iat": 1735689700,
  "jti": "9e8d7c6b-5a4f-3e2d-1c0b-9a8f7e6d5c4b",
  "posture": {
    "attestation_class": "hardware_tpm",
    "device_compliance": "non_compliant",
    "last_attestation_iat": 1735689690
  }
}
]]></sourcecode></figure>

<t>APM Consistency View evaluation:</t>

<figure><artwork><![CDATA[
Step 2: cert.thumbprint matches token cnf -- PASS
Step 3: DPoP not bound -- SKIP
Step 4: issuancePosture.device_compliance = compliant
        currentPosture.device_compliance  = non_compliant -- DEGRADED
Step 5: DispatchGraduatedOutcome -> scope_reduction
        effective_scope = "read" (admin and write removed)
]]></artwork></figure>

<t>Response (resource requires write scope, not in effective_scope):</t>

<figure><artwork><![CDATA[
HTTP/1.1 403 Forbidden
Content-Type: application/json
WWW-Authenticate: Bearer
    error="insufficient_user_authentication",
    acr_values="urn:example:acr:high-assurance",
    scope="read write"

{
  "error": "insufficient_scope",
  "error_description": "Device posture degraded; authorization reduced",
  "authorization_details": [{
    "type": "urn:apm:graduated-outcome:v1",
    "class": "scope_reduction",
    "original_scope": "read write admin",
    "effective_scope": "read",
    "reason_code": "DEVICE_COMPLIANCE_CHANGED",
    "apm_decision_id": "apm-7f3c2b1a-0d9e-4c8b-a2f1-3d4e5f6a7b8c"
  }]
}
]]></artwork></figure>

<t>The client <bcp14>MUST</bcp14> obtain a new token after re-establishing device posture at
the required compliance level before accessing write-scoped resources.</t>

</section>
<section anchor="zta-mapping"><name>Appendix B. Mapping to NIST SP 800-207 Zero Trust Architecture</name>

<t>NIST SP 800-207 <xref target="NIST.SP.800-207"/> defines a three-component decision
plane for Zero Trust Architecture. APM maps to this architecture as
follows:</t>

<figure><artwork><![CDATA[
+---------------------+------------------------------------------------+
| ZTA Component       | APM Role                                       |
+---------------------+------------------------------------------------+
| Policy Enforcement  | The APM Enforcement Point (resource server or  |
| Point (PEP)         | co-located component). Assembles the           |
|                     | Consistency View (REQ-1), executes sender-      |
|                     | constraint verification (Steps 2-3), and        |
|                     | enforces the Graduated Outcome. Corresponds     |
|                     | to NIST SP 800-207 Section 3 PEP.              |
+---------------------+------------------------------------------------+
| Policy Engine (PE)  | Consumes the Consistency View and Issuance     |
|                     | Posture and produces an outcome class. May be  |
|                     | co-located with the PEP or queried per-request.|
|                     | Implements the deterministic outcome mapping   |
|                     | required by REQ-7.                             |
+---------------------+------------------------------------------------+
| Policy              | Communicates scope-reduction and method-        |
| Administrator (PA)  | restriction policy from the authorization      |
|                     | server to the PEP. Also records the Issuance   |
|                     | Posture at token issuance time (REQ-2).        |
+---------------------+------------------------------------------------+
]]></artwork></figure>

<t>APM does not introduce new architectural roles beyond those defined in
<xref target="NIST.SP.800-207"/>. It specifies the information flows -- specifically,
the Consistency View and Issuance Posture -- that enable the PE to make
the per-request graduated-outcome decisions that ZTA requires.</t>

<t>Informative reference: <xref target="NIST.SP.800-207"/>.</t>

</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks the OAuth Working Group for the certificate-binding,
proof-of-possession, and step-up foundations on which this mechanism
builds.</t>

</section>


  </back>

<!-- ##markdown-source:
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
E3mRAAA=

-->

</rfc>

