<?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-02" 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>brian@sanctumsecops.io</email>
      </address>
    </author>

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

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

-->

</rfc>

