From nobody Mon Nov 30 08:29:28 2020
Return-Path: <dick.hardt@gmail.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id C8B4D3A0E31
 for <oauth@ietfa.amsl.com>; Mon, 30 Nov 2020 08:29:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.096
X-Spam-Level: 
X-Spam-Status: No, score=-2.096 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 HTML_FONT_LOW_CONTRAST=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key)
 header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44])
 by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id niTsbyZjy-wI for <oauth@ietfa.amsl.com>;
 Mon, 30 Nov 2020 08:29:24 -0800 (PST)
Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com
 [IPv6:2a00:1450:4864:20::22d])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id 5D4203A0E24
 for <oauth@ietf.org>; Mon, 30 Nov 2020 08:29:24 -0800 (PST)
Received: by mail-lj1-x22d.google.com with SMTP id r18so18860885ljc.2
 for <oauth@ietf.org>; Mon, 30 Nov 2020 08:29:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; 
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to; 
 bh=lry4zoq5cRrZ/Fqeg/Ue2Eww/wqQR65STcu5kMZ1XpQ=;
 b=mRSEZvyQXPvacAY5VqcvVB4otqtL04EsiIOVmp1Ejtxe5LuJdSuLsS0H8ARjRlrBZO
 fsa+SVCMY8vxQdGaWOFsXgtmTP8/REVzfqKE4xvMqKfTOLbdzJfbFSqZpeBcNdHof0O+
 +3W/HWfSH+mzfsBHNEkzJClluNhtwVFFknBOzdxbXY8hn8e25D7ju/oZN0l7WpAA6hJL
 3emPOMGZAXHdMneVs1pPvFRJbE655mmA1BHeibkRYRXK5/g4zZMII2KAR1iYGu8TvGq9
 XWBANGJafDA/NxTZHxChkL7qjquDst6JGB2heuC24FVSmib53XBmooJX2X4sVO4fuTi5
 rTvQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to;
 bh=lry4zoq5cRrZ/Fqeg/Ue2Eww/wqQR65STcu5kMZ1XpQ=;
 b=VOJanzpptgLQfuMZt8sP2+9CT1VwfO6sQ19wXSqkyJLLQNZwczDitj4Cgyzbs+ELWH
 JTzqMuGeeUhV/yncaeFFkZUpwoZfn+Bb+5KovauWh1qmfVqRAd4tQwBCCinrh5ZkUCN7
 AAmwr5p8xzyTfjmhIPyTnDLXmS8WrAbjkFKU74gp+orz/+iP9T+UkdHYSKmJnlXeSRQj
 +tXX78vRZwD2JyZQIU8oFuw6qo5D8xrYNgicjzpVqIMxtEvRJvs2WxDZDB4C7bRKwcPc
 yD5/Rj31sFdLAOAjjMioCg6fOS1eUyXHk53yGw9yn3oQS3e1LgA0/jCRoM7XmDHe7oKg
 2FKg==
X-Gm-Message-State: AOAM532ZLx/9argXPu5ZpPhDkP9OpdqZoErqOhRKOTuMm41vQnfxcfPU
 L+LqG3z1kS4p5BMl/RZStQqyS6HdI3uHJ0k7cNR22ALBPDU=
X-Google-Smtp-Source: ABdhPJyN1ZAzuWKT5YNgsL/dgLymm43Zzozrz57p9JIyd1kbw6P+NN+pqezYmWQWiIv2xluKn+CpZq9ibo/BYyrN8NM=
X-Received: by 2002:a2e:9793:: with SMTP id y19mr9998402lji.437.1606753761865; 
 Mon, 30 Nov 2020 08:29:21 -0800 (PST)
MIME-Version: 1.0
References: <CAD9ie-t6-fN+r75AkJCkfQOLWSYJYQsUXrKz88pK+bsr7KGnQQ@mail.gmail.com>
In-Reply-To: <CAD9ie-t6-fN+r75AkJCkfQOLWSYJYQsUXrKz88pK+bsr7KGnQQ@mail.gmail.com>
From: Dick Hardt <dick.hardt@gmail.com>
Date: Mon, 30 Nov 2020 08:28:45 -0800
Message-ID: <CAD9ie-umWM6uCoyE6198L9EbQQBzL7TB2+90Ofz0-t0=mbRscw@mail.gmail.com>
To: oauth@ietf.org
Content-Type: multipart/alternative; boundary="00000000000037bc7305b55583d0"
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/bn7XFf1QCspAcVzsj-OmreBYR5E>
Subject: Re: [OAUTH-WG] DPoP Binding JWT proposal
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>,
 <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/oauth/>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>,
 <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 30 Nov 2020 16:29:27 -0000

--00000000000037bc7305b55583d0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Pushing this to the top of the stack in case there is interest in
separating the binding mechanism from the RT / AT so that existing RTs /
ATs can be used.
=E1=90=A7

On Fri, Nov 6, 2020 at 2:12 PM Dick Hardt <dick.hardt@gmail.com> wrote:

> Hello
>
> After reviewing the DPoP spec, and reflecting on implementations I have
> worked with, I wanted to see if there was interest in a DPoP Binding JWT.
>
> The use case is to enable existing deployments to add support for DPoP
> without having to replace their existing refresh token and access tokens,
> and the processing of them as the DPoP Binding JWT processing can be adde=
d
> as an independent software layer.
>
> The processing overhead is minimized as the DPoP Binding JWT
> verification can be cached for an access token,
> adding only one JWT verification for the lifetime of the access token.
>
> DPoP Binding JWTs using asymmetric cryptographic algorithms, provide the
> increased security of public / private key for existing deployments using
> access tokens signed with shared secrets such as HMAC.
>
> /Dick
>
>
> *X. DPoP Binding JWT*
>     Deployments that do not want to modify their existing access tokens o=
r
> resource tokens to contain
>     the DPoP thumbprint can include DPoP Binding JWTs in the response fro=
m
> the AS and present them in
>     calls to the RS. A DPoP Binding JWT contains the DPoP thumbprint and =
a
> hash of the access token
>     or refresh token, and is signed by the AS.
>
>     The use of DPoP Binding JWTs enables existing deployments to add
> proof-of-possession assurance to
>     existing deployments by adding a middle layer service or software
> without modifying the processing
>     of refresh tokens or access tokens.
>
>
>
> *X.1 DPoP Binding JWT Syntax*
>     * "typ": type header, value "dpop-binding+jwt"
>
>     * "jti": unique id
>     * "iat": time created
>     * "jkt": JWK SHA-256 Thumbprint of the DPoP public key
>
>     If binding an access token
>         * "ath": SHA-256 hash of the access token
>
>     If binding an refresh token
>         * "rth": SHA-256 hash of the refresh token
>
>     Example DPoP Binding JWT for an access token:
>
>     {
>         "typ":"dpop-binding+jwt",
>         "alg":"ES256",
>         "jwk": {
>         "kty":"EC",
>         "x":"l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs",
>         "y":"9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA",
>         "crv":"P-256"
>         }
>     }.{
>         "jti":"-BwC3ESc6acc2lTc",
>         "iat":1562262616,
>         "jkt":"0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I",
>         "ath":"N0d2HglBV3uiguA4I0ZcOCORZNYy-DWpqq30jZyJGHT"
>     }
>
>
>
> *X.2 Checking DPoP Bindings*
>     Check the DPoP Binding JWT is valid
>     Check the DPoP Binding JWT "jkt" value matches the thumbprint of the
> DPoP public key
>     Check the DPoP Binding JWT "ath" value matches the SHA-256 hash of th=
e
> access token
>       or
>     Check the DPoP Binding JWT "rth" value matches the SHA-256 hash of th=
e
> refresh token
>
>
> *X.3 Token Response*
>     The AS sets the "token_type" parameter to "DPoP-Binding".
>     The AS returns the DPoP Binding JWT for the access token in the
> "access_token_binding" parameter,
>     and the DPoP Binding JWT for the refresh token in the
> "refresh_token_binding" parameter.
>
>      HTTP/1.1 200 OK
>      Content-Type: application/json;charset=3DUTF-8
>      Cache-Control: no-store
>      Pragma: no-cache
>
>      {
>        "access_token":"2YotnFZFEjr1zCsicMWpAA",
>        "access_token_binding":"eyJ0eXAiOiJkcG9w....",
>        "token_type":"DPoP-Binding",
>        "expires_in":3600,
>        "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
>        "refresh_token_binding":"eyJ0eXAiOiJkcG9w....."
>        "example_parameter":"example_value"
>      }
>
>
> *X.4 Resource access*
>     The client presents the access token DPoP Binding JWT in the
> "DPoP-Binding" HTTP header.
>
>     GET /protectedresource HTTP/1.1
>     Host: resource.example.org
>     Authorization: DPoP eyJhbGciOiJFUzI1NiIsImtpZCI6IkJlQUxrYiJ9.eyJzdWI
>         iOiJzb21lb25lQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhh=
bX
>         BsZS5jb20iLCJhdWQiOiJodHRwczovL3Jlc291cmNlLmV4YW1wbGUub3JnIiwibmJ=
mI
>         joxNTYyMjYyNjExLCJleHAiOjE1NjIyNjYyMTYsImNuZiI6eyJqa3QiOiIwWmNPQ0=
9S
>         Wk5ZeS1EV3BxcTMwalp5SkdIVE4wZDJIZ2xCVjN1aWd1QTRJIn19.vsFiVqHCyIkB=
Yu
>         50c69bmPJsj8qYlsXfuC6nZcLl8YYRNOhqMuRXu6oSZHe2dGZY0ODNaGg1cg-kVig=
zY
>         hF1MQ
>     DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik
>         VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVd=
CR
>         nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1=
JE
>         QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRt=
Ij
>         oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN=
0Z
>         WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOH0.lNhmpAX1WwmpBvwhok4E74kWCi=
GB
>         NdavjLAeevGy32H3dbF0Jbri69Nm2ukkwb-uyUI4AUg1JSskfWIyo4UCbQ
>     DPoP-Binding: eyJ_an_example_DPoP_binding_JWT_0eXAiOiJkcG9wK2p3dCIsI
>         VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVd=
CR
>         nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1=
JE
>         QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRt=
Ij
>         oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN=
0Z
>         WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOH0.lNhmpAX1WwmpBvwhok4E74kWCi=
GB
>         NdavjLAeevGy32H3dbF0Jbri69Nm2ukkwb-uyUI4AUg1JSskfWIyo4UCbQ
>
>
>
> =E1=90=A7
>

--00000000000037bc7305b55583d0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Pushing this to the top of the stack in case there is inte=
rest in separating the binding mechanism from the RT / AT so that existing =
RTs / ATs can be used.</div><div hspace=3D"streak-pt-mark" style=3D"max-hei=
ght:1px"><img alt=3D"" style=3D"width:0px;max-height:0px;overflow:hidden" s=
rc=3D"https://mailfoogae.appspot.com/t?sender=3DaZGljay5oYXJkdEBnbWFpbC5jb2=
0%3D&amp;type=3Dzerocontent&amp;guid=3Da60ebb34-65a0-469a-a8c6-e16650fe8864=
"><font color=3D"#ffffff" size=3D"1">=E1=90=A7</font></div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, Nov 6, 2020 =
at 2:12 PM Dick Hardt &lt;<a href=3D"mailto:dick.hardt@gmail.com">dick.hard=
t@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><div dir=3D"ltr"><div>Hello</div><div><br></div><div>After revie=
wing the DPoP spec, and reflecting on implementations I have worked with, I=
 wanted to see if there was interest in a=C2=A0DPoP Binding JWT.</div><div>=
<br></div><div>The use case is to enable existing deployments to add suppor=
t for DPoP without having to replace their existing refresh token and acces=
s tokens, and the processing of them as the DPoP Binding JWT processing can=
 be added as an independent=C2=A0software layer.=C2=A0</div><div><br></div>=
<div>The processing overhead is minimized as the DPoP Binding JWT verificat=
ion=C2=A0can be cached for an access token,=C2=A0</div><div>adding only one=
 JWT verification for the lifetime of the access token.</div><div><br></div=
><div>DPoP Binding JWTs using asymmetric cryptographic algorithms, provide =
the increased security of public / private key for existing deployments usi=
ng access tokens signed with shared secrets such as HMAC.</div><div><br></d=
iv><div>/Dick</div><div><br></div><div><b>X. DPoP Binding JWT<br></b><br>=
=C2=A0 =C2=A0 Deployments that do not want to modify their existing access =
tokens or resource tokens to contain <br>=C2=A0 =C2=A0 the DPoP thumbprint =
can include DPoP Binding JWTs in the response from the AS and present them =
in <br>=C2=A0 =C2=A0 calls to the RS. A DPoP Binding JWT contains the DPoP =
thumbprint and a hash of the access token<br>=C2=A0 =C2=A0 or refresh token=
, and is signed by the AS. <br><br>=C2=A0 =C2=A0 The use of DPoP Binding JW=
Ts enables existing deployments to add proof-of-possession assurance to <br=
>=C2=A0 =C2=A0 existing deployments by adding a middle layer service or sof=
tware without modifying the processing<br>=C2=A0 =C2=A0 of refresh tokens o=
r access tokens.<br><br><br><b>X.1 DPoP Binding JWT Syntax<br></b><br>=C2=
=A0 =C2=A0 * &quot;typ&quot;: type header, value &quot;dpop-binding+jwt&quo=
t; <br><br>=C2=A0 =C2=A0 * &quot;jti&quot;: unique id<br>=C2=A0 =C2=A0 * &q=
uot;iat&quot;: time created<br>=C2=A0 =C2=A0 * &quot;jkt&quot;: JWK SHA-256=
 Thumbprint of the DPoP public key <br><br>=C2=A0 =C2=A0 If binding an acce=
ss token<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 * &quot;ath&quot;: SHA-256 hash of =
the access token<br><br>=C2=A0 =C2=A0 If binding an refresh token<br>=C2=A0=
 =C2=A0 =C2=A0 =C2=A0 * &quot;rth&quot;: SHA-256 hash of the refresh token<=
br><br>=C2=A0 =C2=A0 Example DPoP Binding=C2=A0JWT for an access token:<br>=
<br>=C2=A0 =C2=A0 {<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;typ&quot;:&quot;dp=
op-binding+jwt&quot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;alg&quot;:&quot;=
ES256&quot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;jwk&quot;: {<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 &quot;kty&quot;:&quot;EC&quot;,<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 &quot;x&quot;:&quot;l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs&=
quot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;y&quot;:&quot;9VE4jf_Ok_o64zbTT=
lcuNJajHmt6v9TDVrU0CdvGRDA&quot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;crv&=
quot;:&quot;P-256&quot;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>=C2=A0 =C2=A0 }=
.{<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;jti&quot;:&quot;-BwC3ESc6acc2lTc&qu=
ot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;iat&quot;:1562262616,<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 &quot;jkt&quot;:&quot;0ZcOCORZNYy-DWpqq30jZyJGHTN0d2Hg=
lBV3uiguA4I&quot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;ath&quot;:&quot;N0d=
2HglBV3uiguA4I0ZcOCORZNYy-DWpqq30jZyJGHT&quot;<br>=C2=A0 =C2=A0 }<br><br><b=
r><b>X.2 Checking DPoP Bindings<br></b><br>=C2=A0 =C2=A0 Check the DPoP Bin=
ding JWT is valid<br>=C2=A0 =C2=A0 Check the DPoP Binding JWT &quot;jkt&quo=
t; value matches the thumbprint of the DPoP public key<br>=C2=A0 =C2=A0 Che=
ck the DPoP Binding JWT &quot;ath&quot; value matches the SHA-256 hash of t=
he access token</div><div>=C2=A0 =C2=A0 =C2=A0 or</div><div><div>=C2=A0 =C2=
=A0 Check the DPoP Binding JWT &quot;rth&quot; value matches the SHA-256 ha=
sh of the refresh token</div><div></div><br><b>X.3 Token Response<br></b><b=
r>=C2=A0 =C2=A0 The AS sets the &quot;token_type&quot; parameter to &quot;D=
PoP-Binding&quot;. <br>=C2=A0 =C2=A0 The AS returns the DPoP Binding JWT fo=
r the access token in the &quot;access_token_binding&quot; parameter, <br>=
=C2=A0 =C2=A0 and the DPoP Binding JWT for the refresh token in the &quot;r=
efresh_token_binding&quot; parameter.<br><br>=C2=A0 =C2=A0 =C2=A0HTTP/1.1 2=
00 OK<br>=C2=A0 =C2=A0 =C2=A0Content-Type: application/json;charset=3DUTF-8=
<br>=C2=A0 =C2=A0 =C2=A0Cache-Control: no-store<br>=C2=A0 =C2=A0 =C2=A0Prag=
ma: no-cache<br><br>=C2=A0 =C2=A0 =C2=A0{<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0&qu=
ot;access_token&quot;:&quot;2YotnFZFEjr1zCsicMWpAA&quot;,<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0&quot;access_token_binding&quot;:&quot;eyJ0eXAiOiJkcG9w....&qu=
ot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;token_type&quot;:&quot;DPoP-Bindin=
g&quot;,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;expires_in&quot;:3600,<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0&quot;refresh_token&quot;:&quot;tGzv3JOkF0XG5Qx2TlK=
WIA&quot;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;refresh_token_binding&quot;:&=
quot;eyJ0eXAiOiJkcG9w.....&quot;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;exampl=
e_parameter&quot;:&quot;example_value&quot;<br>=C2=A0 =C2=A0 =C2=A0}<br><br=
><b>X.4 Resource access<br></b><br>=C2=A0 =C2=A0 The client presents the ac=
cess token DPoP Binding JWT in the &quot;DPoP-Binding&quot; HTTP header.<br=
><br>=C2=A0 =C2=A0 GET /protectedresource HTTP/1.1<br>=C2=A0 =C2=A0 Host: <=
a href=3D"http://resource.example.org" target=3D"_blank">resource.example.o=
rg</a><br>=C2=A0 =C2=A0 Authorization: DPoP eyJhbGciOiJFUzI1NiIsImtpZCI6IkJ=
lQUxrYiJ9.eyJzdWI<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 iOiJzb21lb25lQGV4YW1wbGUuY=
29tIiwiaXNzIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhhbX<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 Bs=
ZS5jb20iLCJhdWQiOiJodHRwczovL3Jlc291cmNlLmV4YW1wbGUub3JnIiwibmJmI<br>=C2=A0=
 =C2=A0 =C2=A0 =C2=A0 joxNTYyMjYyNjExLCJleHAiOjE1NjIyNjYyMTYsImNuZiI6eyJqa3=
QiOiIwWmNPQ09S<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 Wk5ZeS1EV3BxcTMwalp5SkdIVE4wZ=
DJIZ2xCVjN1aWd1QTRJIn19.vsFiVqHCyIkBYu<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 50c69=
bmPJsj8qYlsXfuC6nZcLl8YYRNOhqMuRXu6oSZHe2dGZY0ODNaGg1cg-kVigzY<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 hF1MQ<br>=C2=A0 =C2=A0 DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsI=
mFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 VDIiwi=
eCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWcl=
UwQ2R2R1JE<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 QSIsImNydiI6IlAtMjU2In19.eyJqdGki=
OiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 oiR0VUIiw=
iaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z<br>=C2=A0 =C2=A0=
 =C2=A0 =C2=A0 WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOH0.lNhmpAX1WwmpBvwhok4E7=
4kWCiGB<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 NdavjLAeevGy32H3dbF0Jbri69Nm2ukkwb-u=
yUI4AUg1JSskfWIyo4UCbQ<br>=C2=A0 =C2=A0 DPoP-Binding: eyJ_an_example_DPoP_b=
inding_JWT_0eXAiOiJkcG9wK2p3dCIsI<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 VDIiwieCI6=
Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2=
R2R1JE<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJl=
MWozVl9iS2ljOC1MQUVCIiwiaHRtIj<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 oiR0VUIiwiaHR=
1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOH0.lNhmpAX1WwmpBvwhok4E74kWC=
iGB<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 NdavjLAeevGy32H3dbF0Jbri69Nm2ukkwb-uyUI4=
AUg1JSskfWIyo4UCbQ<br><br><br><br></div></div><div hspace=3D"streak-pt-mark=
" style=3D"max-height:1px"><img alt=3D"" style=3D"width: 0px; max-height: 0=
px; overflow: hidden;" src=3D"https://mailfoogae.appspot.com/t?sender=3DaZG=
ljay5oYXJkdEBnbWFpbC5jb20%3D&amp;type=3Dzerocontent&amp;guid=3D58175e3d-673=
6-45a2-9b08-d47d88274ff8"><font color=3D"#ffffff" size=3D"1">=E1=90=A7</fon=
t></div>
</blockquote></div>

--00000000000037bc7305b55583d0--

