<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-saxe-wimse-token-exchange-and-translation-00" category="info" consensus="true" submissionType="IETF" number="1" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <link href="https://datatracker.ietf.org/doc/draft-saxe-wimse-token-exchange-and-translation-00" rel="prev"/>
  <front>
    <title abbrev="WIMSE Token Exchange &amp; Translation">WIMSE Token Exchange and Translation Protocol</title>
    <seriesInfo name="RFC" value="1"/>
    <author fullname="Dean H. Saxe">
      <organization/>
      <address>
        <email>dean@thesax.es</email>
      </address>
    </author>
    <author fullname="George Fletcher">
      <organization>Capital One</organization>
      <address>
        <email>george.fletcher@capitalone.com</email>
      </address>
    </author>
    <author fullname="Andrii Deinega">
      <organization/>
      <address>
        <email>andrii.deinega@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>workload identity</keyword>
    <keyword>token exchange</keyword>
    <keyword>token translation</keyword>
    <abstract>
      <?line 67?>

<t>The specification defines the processes of token exchange and token translation for workloads.  Token exchange is introduced in <xref target="RFC8693"/>, allowing the exchange of access tokens, OpenID Connect ID Tokens, and SAML assertions for new OAuth access tokens. However, for workloads, there exist a broad array of input and output token types which must be considered beyond the input types supported by <xref target="RFC8693"/>.  These token types include, but are not limited to, SPIFFE SVIDs, x.509 certificates, Kerberos service tickets, Amazon sigv4A, macaroons, &lt;...&gt;.  Further, these tokens may be encoded in formats including JWT OAuth 2.0 Acesss Tokens <xref target="RFC9068"/>, CWT <xref target="RFC8392"/>, and protocol buffers (protobufs).  Given the variety and complexity of input and output token types and encoding, a strict token exchange that maintains all of the contextual information from the input token to the output token may not be possible.  We define these non-RFC8693 use cases with potentially lossy conversions as "token translation" (e.g. information may be lost in translation).   In this document we describe a workload profile for token exchange, using the mechanisms in <xref target="RFC8693"/>, and a new set of translations between arbitrary token types.  Additionally, we define mechanisms to enrich tokens during translation to support the use cases defined in (todo: add link to use cases doc).</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://deansaxe.github.io/wimse-token-exchange-and-translation/draft-saxe-wimse-token-exchange-and-translation.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-saxe-wimse-token-exchange-and-translation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments Working Group mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wimse-token-exchange-and-translation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This specification defines a protocol for converting from one security token to another with support for both lossless and lossy conversions.  We refer to the lossless exchange as "token exchange" following the model defined in OAuth 2.0 Token Exchange <xref target="RFC8693"/>.  In this document we profile <xref target="RFC8693"/> to enable OAuth token exchange for workloads where the output is an OAuth Access Token or Refresh Token where no data is lost during the exchange.  "Token translation" describes all other conversions, including those where data loss may occur during conversion.  The terms Security Token, Security Token Service (STS), delegation, and impersonation are used in this document following the definitions in <xref target="RFC8693"/>.</t>
      <t>Within the realm of workload identities, there are numerous types of security tokens that are commonly used including SPIFFE SVIDs, OAuth 2.0 Bearer Access Tokens <xref target="RFC6750"/>, and x.509 certificates. Additionally, security tokens are encoded in multiple formats such as JSON, CBOR, and protobufs.  In order to provide a mechanism for interoperability between different workloads we require the ability to convert from one token type or encoding to another for use across disparate systems.</t>
      <t>In addition to translating security tokens between different types and formats, workload identity systems must be able to support changing the cryptographic properties of tokens, embedding tokens in one another, change the embedded context in a token, change the validity constraints, change or add subjects to the token, or add sender constraints.  This set of use cases for token exchange and translation are further described in https://github.com/yaroslavros/wimse-tokentranslation-requirements/blob/main/draft-rosomakho-wimse-tokentranslation-requirements.md. (todo: replace with a link to the ID once published.)</t>
    </section>
    <section anchor="notational-conventions">
      <name>Notational Conventions</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>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>TODO: Define terms used by this specification</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>Token translation fills a gap that development teams must solve for themselves today without standardized mechanisms.  For example, a common SPIFFE use case is to have a Kubernetes workload assume an AWS IAM role to access an S3 bucket.  This is accomplished by creating an OpenID Provider (OP) in the Kubernetes cluster and configuring AWS IAM as a Relying Party (RP) to obtain an ID token from the SPIFFE service. Using the id token, AWS STS AssumeRoleWithWebIdentity generates temporary sigV4 credentials for AWS allowing the workload to assume an AWS role and any permissions assigned to that role.  Similar mechanisms have been designed to support multiple cloud providers in the absence of standardized protocols.</t>
      <t>Token translation accounts for different token types, formats, encodings, and encyryption allowing for translation between most, but not all, token types using token translation profiles. This protocol does not define the specifics of token translation between arbitrary token types.  Profiles must be defined to describe token translations between different token types, including any loss of context during translation.  Where the input and output token are of the same type and the conversion is lossless, the protocol defined within this document is sufficient to meet the use cases defined in "USE CASES DOC".  Not all token input/output pairs are expected to be profiled.</t>
      <section anchor="token-context-enrichment">
        <name>Token Context Enrichment</name>
        <t>TODO - what context do we enrich tokens with during translation? Embedding tokens, attestations, assertions, validity, change/add subject, sender constraints.  This doc can give specific guidance on adding context to a scoped set of token types that are common. Maybe a reference to the use cases is sufficient, along with a short description of any fields that the translation endpoint <bcp14>MUST</bcp14> add to a newly issued token.</t>
      </section>
      <section anchor="lossy-translation">
        <name>Lossy Translation</name>
        <t>TODO - define what we mean by lossy.  What's lost?  Does this mean that some token translations lose valuable information?
TODO - provide a specific lossy scenario and use case.</t>
        <t>Translation may be lossless, such as when exchanging an input token for an output token of the same format, or lossy when exchanging an input token for an output token of a different format. An example of lossy translation is detailed in the example above.  In this case, the aud claim of the id token maps to the AWS IAM role used to create the AWS temporary credentials.
The aud (if no azp claim is present), sub, and amr claims are mapped to STS Session Keys with the same name. Other claims in the id token are dropped, resulting in an loss of context.</t>
        <t>Lossy translation may impact downstream systems.  Implementers must be aware of the risks of lost context through token translation.</t>
      </section>
    </section>
    <section anchor="token-translation-endpoint">
      <name>Token Translation Endpoint</name>
      <t>TODO - Define a new translation endpoint.</t>
    </section>
    <section anchor="token-translation-profiles">
      <name>Token Translation Profiles</name>
      <t>TODO - this draft does not define normative specs for translating from arbitrary format to another arbitrary format.  Profiles describing specific token translations must be developed and their names (possibly?) registered with IANA.  Profiles will define any losses that may occur during translation and the risks associated with the loss of context.  Not all token pairs can be translated, some may only be translatable in one direction.</t>
    </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?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>As countermeasures against replay attacks and various forms of misuse, an authorization server performing token exchange
- <bcp14>MUST</bcp14> ensure a client (whether it is an OAuth client or a workload) is allowed to perform such operation.
- <bcp14>SHOULD</bcp14> ensure that a provided security token allows to perform such operation on it.
- <bcp14>SHOULD</bcp14> ensure it itseld, as an AS, is the intended audience of a token being exchanged. It is typical for self-contained tokens to include the aud claim (an array of strings) representing their intended audience (other types of tokens provide other means for the same).
- a value in the subject_token_type parameter <bcp14>MUST</bcp14> correspond to an actual type of a security token provided in the subject_token parameter (<xref target="RFC8693"/>).
These countermeasures become even more significant when an entity issuing security tokens and an AS performing exchange of them reside in different security domains.</t>
      <t>An extra care should be taken for tokens that can be passed around using the front channel, and for those tokens that do not explicitly define their type. Examples here would be OpenID Connect ID Token, and various assertions represented as JWTs.</t>
      <t>TODO Security - data loss in token translation may impact authZ decisions.  Be careful when allowing multiple token translations since losses may grow over each step of translation.</t>
      <t>Embedding input tokens into output tokens can reduce this risk by allowing more complete context, at the risk of expanding the token size beyond what is practical.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="appendices">
      <name>Appendices</name>
      <section anchor="appendix-1-non-normative-token-exchange-examples">
        <name>Appendix 1 - Non-normative token exchange examples</name>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <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="RFC6750">
        <front>
          <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="D. Hardt" initials="D." surname="Hardt"/>
          <date month="October" year="2012"/>
          <abstract>
            <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6750"/>
        <seriesInfo name="DOI" value="10.17487/RFC6750"/>
      </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="RFC8392">
        <front>
          <title>CBOR Web Token (CWT)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <date month="May" year="2018"/>
          <abstract>
            <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8392"/>
        <seriesInfo name="DOI" value="10.17487/RFC8392"/>
      </reference>
      <reference anchor="RFC8693">
        <front>
          <title>OAuth 2.0 Token Exchange</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
          <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="January" year="2020"/>
          <abstract>
            <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8693"/>
        <seriesInfo name="DOI" value="10.17487/RFC8693"/>
      </reference>
      <reference anchor="RFC9068">
        <front>
          <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
          <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
          <date month="October" year="2021"/>
          <abstract>
            <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9068"/>
        <seriesInfo name="DOI" value="10.17487/RFC9068"/>
      </reference>
      <reference anchor="OIDC" target="https://openid.net/specs/openid-connect-core-1_0.html">
        <front>
          <title>OpenID Connect Core 1.0 incorporating errata set 2</title>
          <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
            <organization>NRI</organization>
          </author>
          <author initials="J." surname="Bradley" fullname="John Bradley">
            <organization>Ping Identity</organization>
          </author>
          <author initials="M." surname="Jones" fullname="Mike Jones">
            <organization>Microsoft</organization>
          </author>
          <author initials="B. de" surname="Medeiros" fullname="B. de Medeiros">
            <organization>Google</organization>
          </author>
          <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
            <organization>Salesforce</organization>
          </author>
          <date year="2014" month="November"/>
        </front>
      </reference>
    </references>
    <?line 169?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
kLHV8JfgDrKdibz9DxXjnK64KgAA

-->

</rfc>
