From sachinmamoru@gmail.com  Wed Feb 21 00:07:04 2024
Return-Path: <sachinmamoru@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 62861C14F709
 for <oauth@ietfa.amsl.com>; Wed, 21 Feb 2024 00:07:04 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.085
X-Spam-Level: 
X-Spam-Status: No, score=-2.085 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_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01,
 T_REMOTE_IMAGE=0.01, T_SCC_BODY_TEXT_LINE=-0.01,
 URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=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 ([50.223.129.194])
 by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UWiIdZBnvQUl for <oauth@ietfa.amsl.com>;
 Wed, 21 Feb 2024 00:06:59 -0800 (PST)
Received: from mail-yw1-x1131.google.com (mail-yw1-x1131.google.com
 [IPv6:2607:f8b0:4864:20::1131])
 (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id B3D9EC14F6FA
 for <oauth@ietf.org>; Wed, 21 Feb 2024 00:06:59 -0800 (PST)
Received: by mail-yw1-x1131.google.com with SMTP id
 00721157ae682-607c5679842so3038997b3.2
 for <oauth@ietf.org>; Wed, 21 Feb 2024 00:06:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1708502819; x=1709107619; darn=ietf.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=3cn3PWJYtH/k+z5OIa4ozMRTwoWxVwfs2rKTMBi6IBI=;
 b=J7cOhDA3JGuuPYKzXDnFGC8tWShzmuWtWwK6XQ/zWTy/fXD0/R11cL2XI9OTMXKaPE
 ib2psQGcl7vjf8EPldV9BpYq8XdKg4RE9rR14TNjNAqSpt6YQvvcFTxD5Zu4DPYWaP3N
 p9LZFP5q+/xb4G1ngrx9UhQDO5u/I0dRW/i/Y/3wzySTOzS7RcHMVAWD/aP2h+a5fOhh
 ccoVu9lN4w/5azBRsX23BRjLkgfGpgvj0YZ22StK+CF43mbgWKZRTAs/TE1ZgKPTyfgm
 O9ngFAg5zazOBkMg9GClMeDKzlji2ukikuoQ67pHkOxA9Fx0lrBK4Mi8Xt5RXvYGB1CM
 aOZA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1708502819; x=1709107619;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=3cn3PWJYtH/k+z5OIa4ozMRTwoWxVwfs2rKTMBi6IBI=;
 b=H+W92MLFp0JGAVCkes6Yz0nUHVeM1GiQPtYWIj8DGDWZwD0cJ9brGNYeO7bpJFHWaU
 75GvNnh1b/KaU3bbmaBZFig8VrCwQyzAhTtrTeaT1k/sTDzc6YWkSR5HPX0HnQRpTyIt
 cN+sNvgOzwNjax/mNYOH5A/vPB9kEA5N6u+lWBGOj/EXuHRC5eFoXsOULIvc6GabnY8D
 DYS5zMWf6gKQ76sCDqAjVuJR4lTuFB39zOqpfd57sItXbaC0l/a0w+UWJdNnZr18P4vq
 5jUzjIM95NWtH29aHU8lV0WwyHrO9vB4fiKjMJxljd7ZRBHn6xfseXRR+0LeRN1MrGLy
 nDpw==
X-Gm-Message-State: AOJu0Yy04PVv6PGlCFEdej8YpM3htU6WUd2xlCIaXP1RbvNmfVBSgmc1
 1Qn3WyKLPu8WOghzlOnwYe1j6L4ffdViyQNLoAiN1TtTNspxDyIYD8hz/6oNnEXik0P0Wsj5+vK
 yU5pY15CKa5FNzn72wXuNX2koPpsLg7gussBLjOHq
X-Google-Smtp-Source: AGHT+IFHsiTzCx0E0EXJY73DR+y7I8kwQatrCGSxp/TLvhsGMDkIIInORB/U3/GXxdd5eLCRsfH9DRl0kwxFdk/9Jks=
X-Received: by 2002:a05:6902:4f1:b0:dbf:6267:eba4 with SMTP id
 w17-20020a05690204f100b00dbf6267eba4mr15360586ybs.27.1708502818614; Wed, 21
 Feb 2024 00:06:58 -0800 (PST)
MIME-Version: 1.0
References: <CAD=XBCog_o8GzpDMTYKvvi=2mneM0nW0vfCc=FubtOFNF5WM=A@mail.gmail.com>
 <374ADB2C-2F74-4B95-8CDA-3266089CD00C@gmail.com>
 <CAD=XBCqs-Qf7P--KvqQcJq37Agh3gn-bfwfj7tZvwdngx+4k+A@mail.gmail.com>
 <13C59DD4-94E0-47AC-9A7E-D7B463BD1552@gmail.com>
In-Reply-To: <13C59DD4-94E0-47AC-9A7E-D7B463BD1552@gmail.com>
From: Sachin Mamoru <sachinmamoru@gmail.com>
Date: Wed, 21 Feb 2024 13:36:47 +0530
Message-ID: <CAD=XBCpgLZObed8Kj2ST6engpFR47psFrrbNKw5rwaN=_E25qA@mail.gmail.com>
To: Neil Madden <neil.e.madden@gmail.com>, wparad@rhosys.ch
Cc: oauth <oauth@ietf.org>, janak@wso2.com, thilinasenarath97@gmail.com, 
 "piraveena@wso2.com" <piraveena@wso2.com>
Content-Type: multipart/alternative; boundary="00000000000099f2280611dfcff9"
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/5yTbEYW1cQ8Tob9D83nqCOnN8xk>
Subject: Re: [OAUTH-WG] Evaluation of Scope Management in Refresh Token
 Behavior
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.39
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: Wed, 21 Feb 2024 08:07:04 -0000

--00000000000099f2280611dfcff9
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi Warren and Neil,

Thanks for the valuable input and sorry for mentioning other products, I
just wanted to provide an example.
So Warren according to you following is the behaviour that spec suggested.

When we request an access token using 3 scopes (scope1, scope2, scope3).

Then will receive a refresh token (refresh_token1) with the access token.

After that will request another access token with refresh_token1 and
provide the scope list as scope1 and scope2 (Narrow down scopes).

Similarly, get another refresh token (refresh_token2) with the access token=
.

Now if we request another access token with refresh_token2, we should be
able to request scope3 also.

That means the refresh token will not be narrowed down instead only the
access token will get narrowed down.

So Warren and Neil, if possible can you pinpoint to me the exact place in
the spec where it does explicitly say that the refresh token should not be
narrowed down based on the given scopes?

Thanks & Regards,
Sachin

On Wed, 21 Feb 2024 at 01:12, Neil Madden <neil.e.madden@gmail.com> wrote:

> It sounds like they are violating the spec then. On the other hand, the
> fact that the scope can be "increased back to the original scope" maybe
> suggests the effective scope of the refresh token is still the same? Eith=
er
> way, the spec is pretty clear, regardless of what some vendor does.
>
> -- Neil
>
> On 20 Feb 2024, at 19:26, Sachin Mamoru <sachinmamoru@gmail.com> wrote:
>
> Hi Neil,
>
> Thanks for the clarification.
> But Curity has a different approach and they implemented it according to
> the concept of narrowing down the refresh token scopes.
>
> "The scope was originally read openid profile and after refresh the
> access was reduced to read profile (i.e., the access_token now only has r=
ead
> profile scope and any new tokens obtained using the refresh token
> daa38700-ba96-4ef1-8b30-5cb3527aae19 will have the same, reduced scope).
> Note that *increasing* the scope of access cannot be done in this way
> unless first reduced and increased back to the original scope."
>
> [1]
> https://curity.io/resources/learn/refresh-tokens/#changing-scope-of-acces=
s-token-on-refresh
>
> Thanks & Regards,
> Sachin
>
> On Tue, 20 Feb 2024 at 21:59, Neil Madden <neil.e.madden@gmail.com> wrote=
:
>
>>
>>
>> On 20 Feb 2024, at 11:02, Sachin Mamoru <sachinmamoru@gmail.com> wrote:
>>
>> =EF=BB=BF
>> Hi Neil,
>>
>> Does that mean it should be identical to the narrowed scope request or
>> the original request scope?
>>
>>
>> It says it has to be identical to the scope of the existing refresh toke=
n
>> in the request, not the scope specified in the request. So effectively y=
ou
>> can never downscope a refresh token in this way. Whatever scope you
>> specify, any RT returned must always retain the original scope.
>>
>> (There are other ways to downscope a RT, eg ForgeRock=E2=80=99s macaroon=
s allow
>> you to attenuate the scope if you wish).
>>
>> =E2=80=94 Neil
>>
>>
>> On Tue, 20 Feb 2024 at 16:31, Sachin Mamoru <sachinmamoru@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Tue, 20 Feb 2024 at 12:23, Neil Madden <neil.e.madden@gmail.com>
>>> wrote:
>>>
>>>>
>>>> On 20 Feb 2024, at 06:44, Sachin Mamoru <sachinmamoru@gmail.com> wrote=
:
>>>>
>>>> =EF=BB=BF
>>>> Hi All,
>>>>
>>>> When we request an access token using 3 scopes (scope1, scope2, scope3=
).
>>>> Then will receive a refresh token (refresh_token1) with the access
>>>> token.
>>>>
>>>> After that will request another access token with refresh_token1 and
>>>> provide the scope list as scope1 and scope2 (Narrow down scopes).
>>>> Similarly, get another refresh token (refresh_token2) with the access
>>>> token.
>>>>
>>>> Now if we request another access token with refresh_token2, we cannot
>>>> request scope3, instead, we can either request both scope1 and scope2 =
or
>>>> one of them.
>>>>
>>>> But in the specification, didn't able to find anything related to
>>>> narrow-down scopes with refresh token.
>>>>
>>>> From Spec
>>>>
>>>> 1.5.  Refresh Token - Refresh tokens are issued to the client by the
>>>> authorization server and are used to obtain a new access token when
>>>> the current access token becomes invalid or expires or to obtain
>>>> additional access tokens with identical or narrower scope (access
>>>> tokens may have a shorter lifetime and fewer permissions than
>>>> authorized by the resource owner).
>>>>
>>>> 6.  Refreshing an Access Token
>>>> The scope of the access request as described by Section 3.3.  The
>>>> requested scope MUST NOT include any scope not originally granted by
>>>> the resource owner, and if omitted is treated as equal to the scope
>>>> originally granted by the resource owner.
>>>>
>>>> https://datatracker.ietf.org/doc/html/rfc6749
>>>>
>>>> IMO, from a security aspect, the current behaviour is much more secure
>>>> because it is designed to maintain the principle of least privilege, w=
here
>>>> it updates the refresh token authorised scopes based on the requested =
ones.
>>>>
>>>> What should be the correct behaviour?
>>>> narrow-down scope refresh token should also be able to request access
>>>> token with original scope list?
>>>>
>>>>
>>>> Also from section 6:
>>>>
>>>> If a
>>>>    new refresh token is issued, the refresh token scope MUST be
>>>>    identical to that of the refresh token included by the client in th=
e
>>>>    request.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> =E2=80=94 Neil
>>>>
>>>>
>>>
>>> --
>>>
>>> Sachin Mamoru
>>> Software Engineer, WSO2
>>> +94771292681
>>> | sachinmamoru.me  <https://sachinmamoru.me/>
>>> sachinmamoru@gmail.com  <sachinmamoru@gmail.com>
>>> <https://www.linkedin.com/in/sachin-mamoru/>
>>> <https://twitter.com/MamoruSachin>
>>>
>>>
>>
>> --
>>
>> Sachin Mamoru
>> Software Engineer, WSO2
>> +94771292681
>> | sachinmamoru.me  <https://sachinmamoru.me/>
>> sachinmamoru@gmail.com  <sachinmamoru@gmail.com>
>> <https://www.linkedin.com/in/sachin-mamoru/>
>> <https://twitter.com/MamoruSachin>
>>
>>
>
> --
>
> Sachin Mamoru
> Software Engineer, WSO2
> +94771292681
> | sachinmamoru.me  <https://sachinmamoru.me/>
> sachinmamoru@gmail.com  <sachinmamoru@gmail.com>
> <https://www.linkedin.com/in/sachin-mamoru/>
> <https://twitter.com/MamoruSachin>
>
>
>

--=20

Sachin Mamoru
Software Engineer, WSO2
+94771292681
| sachinmamoru.me  <https://sachinmamoru.me>
sachinmamoru@gmail.com  <sachinmamoru@gmail.com>
<https://www.linkedin.com/in/sachin-mamoru/>
<https://twitter.com/MamoruSachin>

--00000000000099f2280611dfcff9
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi=C2=A0Warren and Neil,<div><br></div><div>Thanks for the=
 valuable input and sorry for mentioning=C2=A0other products, I just wanted=
 to provide an example.=C2=A0</div><div>So Warren according to you followin=
g is the behaviour that spec suggested.</div><div><font face=3D"arial, sans=
-serif"><br></font></div><div><span id=3D"gmail-docs-internal-guid-4f39e0eb=
-7fff-d42a-f780-95f6f69ccd92"><div dir=3D"ltr" style=3D"margin-left:0pt" al=
ign=3D"left"><table style=3D"border:none;border-collapse:collapse;table-lay=
out:fixed;width:468pt"><colgroup><col></colgroup><tbody><tr style=3D"height=
:0pt"><td style=3D"border-width:1pt;border-style:solid;border-color:rgb(0,0=
,0);vertical-align:top;padding:5pt;overflow:hidden"><p dir=3D"ltr" style=3D=
"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D"color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;font-variant-alternates:normal;vertical-align:baseline=
"><font face=3D"arial, sans-serif">When we request an access token using 3 =
scopes (scope1, scope2, scope3).</font></span></p><font face=3D"arial, sans=
-serif"><br></font><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"color:rgb(0,0,0);background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant=
-alternates:normal;vertical-align:baseline"><font face=3D"arial, sans-serif=
">Then will receive a refresh token (refresh_token1) with the access token.=
</font></span></p><font face=3D"arial, sans-serif"><br></font><p dir=3D"ltr=
" style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;font-variant-alternates:normal;vertical-alig=
n:baseline"><font face=3D"arial, sans-serif">After that will request anothe=
r access token with refresh_token1 and provide the scope list as scope1 and=
 scope2 (Narrow down scopes).</font></span></p><font face=3D"arial, sans-se=
rif"><br></font><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-al=
ternates:normal;vertical-align:baseline"><font face=3D"arial, sans-serif">S=
imilarly, get another refresh token (refresh_token2) with the access token.=
</font></span></p><font face=3D"arial, sans-serif"><br></font><p dir=3D"ltr=
" style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;font-variant-alternates:normal;vertical-alig=
n:baseline"><font face=3D"arial, sans-serif">Now if we request another acce=
ss token with refresh_token2, we should be able to request scope3 also.</fo=
nt></span></p><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0pt;margin=
-bottom:0pt"><span style=3D"color:rgb(0,0,0);background-color:transparent;f=
ont-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alte=
rnates:normal;vertical-align:baseline"><font face=3D"arial, sans-serif">Tha=
t means the refresh token will not be narrowed down instead only the access=
 token will get narrowed down.</font></span></p></td></tr></tbody></table><=
/div><br></span></div><div>So Warren and Neil, if possible can you pinpoint=
 to me the exact place in the spec where it does explicitly say that the re=
fresh token should not be narrowed down based on the given scopes?</div><di=
v><br></div><div>Thanks &amp; Regards,</div><div>Sachin</div></div><br><div=
 class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, 21 Feb=
 2024 at 01:12, Neil Madden &lt;<a href=3D"mailto:neil.e.madden@gmail.com">=
neil.e.madden@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 style=3D"overflow-wrap: break-word;"><div>It so=
unds like they are violating the spec then. On the other hand, the fact tha=
t the scope can be &quot;increased back to the original scope&quot; maybe s=
uggests the effective scope of the refresh token is still the same? Either =
way, the spec is pretty clear, regardless of what some vendor does.</div><d=
iv><br></div><div>-- Neil<br><div><br><blockquote type=3D"cite"><div>On 20 =
Feb 2024, at 19:26, Sachin Mamoru &lt;<a href=3D"mailto:sachinmamoru@gmail.=
com" target=3D"_blank">sachinmamoru@gmail.com</a>&gt; wrote:</div><br><div>=
<div dir=3D"ltr">Hi Neil,<div><br></div><div>Thanks for the clarification.<=
/div><div>But Curity has a different approach and they implemented it accor=
ding to the concept of narrowing down=C2=A0the refresh token scopes.</div><=
div><br></div><div>&quot;<span style=3D"color:rgb(77,77,77);font-family:Rob=
oto-Regular,-apple-system,&quot;system-ui&quot;,&quot;Segoe UI&quot;,Roboto=
,Helvetica,Arial,sans-serif;font-size:17.6px">The scope was originally=C2=
=A0</span><code style=3D"box-sizing:border-box;font-family:Roboto-Mono,Cons=
olas,Monaco,&quot;Andale Mono&quot;,&quot;Ubuntu Mono&quot;,monospace;backg=
round-color:rgb(247,250,252);border:1px solid rgba(0,0,0,0.05);border-radiu=
s:4px;font-size:14px;padding:0.15em 0.2em 0.05em;word-break:break-word;colo=
r:rgb(77,77,77)">read openid profile</code><span style=3D"color:rgb(77,77,7=
7);font-family:Roboto-Regular,-apple-system,&quot;system-ui&quot;,&quot;Seg=
oe UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px">=C2=A0and a=
fter refresh the access was reduced to=C2=A0</span><code style=3D"box-sizin=
g:border-box;font-family:Roboto-Mono,Consolas,Monaco,&quot;Andale Mono&quot=
;,&quot;Ubuntu Mono&quot;,monospace;background-color:rgb(247,250,252);borde=
r:1px solid rgba(0,0,0,0.05);border-radius:4px;font-size:14px;padding:0.15e=
m 0.2em 0.05em;word-break:break-word;color:rgb(77,77,77)">read profile</cod=
e><span style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-syst=
em,&quot;system-ui&quot;,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-s=
erif;font-size:17.6px">=C2=A0(i.e., the=C2=A0</span><code style=3D"box-sizi=
ng:border-box;font-family:Roboto-Mono,Consolas,Monaco,&quot;Andale Mono&quo=
t;,&quot;Ubuntu Mono&quot;,monospace;background-color:rgb(247,250,252);bord=
er:1px solid rgba(0,0,0,0.05);border-radius:4px;font-size:14px;padding:0.15=
em 0.2em 0.05em;word-break:break-word;color:rgb(77,77,77)">access_token</co=
de><span style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-sys=
tem,&quot;system-ui&quot;,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-=
serif;font-size:17.6px">=C2=A0now only has=C2=A0</span><code style=3D"box-s=
izing:border-box;font-family:Roboto-Mono,Consolas,Monaco,&quot;Andale Mono&=
quot;,&quot;Ubuntu Mono&quot;,monospace;background-color:rgb(247,250,252);b=
order:1px solid rgba(0,0,0,0.05);border-radius:4px;font-size:14px;padding:0=
.15em 0.2em 0.05em;word-break:break-word;color:rgb(77,77,77)">read profile<=
/code><span style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-=
system,&quot;system-ui&quot;,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sa=
ns-serif;font-size:17.6px">=C2=A0scope and any new tokens obtained using th=
e refresh token=C2=A0</span><code style=3D"box-sizing:border-box;font-famil=
y:Roboto-Mono,Consolas,Monaco,&quot;Andale Mono&quot;,&quot;Ubuntu Mono&quo=
t;,monospace;background-color:rgb(247,250,252);border:1px solid rgba(0,0,0,=
0.05);border-radius:4px;font-size:14px;padding:0.15em 0.2em 0.05em;word-bre=
ak:break-word;color:rgb(77,77,77)">daa38700-ba96-4ef1-8b30-5cb3527aae19</co=
de><span style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-sys=
tem,&quot;system-ui&quot;,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-=
serif;font-size:17.6px">=C2=A0will have the same, reduced scope). Note that=
=C2=A0</span><em style=3D"box-sizing:border-box;font-family:Roboto-Regular,=
-apple-system,&quot;system-ui&quot;,&quot;Segoe UI&quot;,Roboto,Helvetica,A=
rial,sans-serif;color:rgb(77,77,77);font-size:17.6px">increasing</em><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quot=
;system-ui&quot;,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif;fon=
t-size:17.6px">=C2=A0the scope of access cannot be done in this way unless =
first reduced and increased back to the original scope.</span>&quot;</div><=
div><br></div><div>[1]=C2=A0<a href=3D"https://curity.io/resources/learn/re=
fresh-tokens/#changing-scope-of-access-token-on-refresh" target=3D"_blank">=
https://curity.io/resources/learn/refresh-tokens/#changing-scope-of-access-=
token-on-refresh</a></div><div><br></div><div>Thanks &amp; Regards,</div><d=
iv>Sachin</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=
=3D"gmail_attr">On Tue, 20 Feb 2024 at 21:59, Neil Madden &lt;<a href=3D"ma=
ilto:neil.e.madden@gmail.com" target=3D"_blank">neil.e.madden@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"auto"><div dir=3D"ltr"></div><div dir=3D"ltr"><br></div><div dir=3D=
"ltr"><br><blockquote type=3D"cite">On 20 Feb 2024, at 11:02, Sachin Mamoru=
 &lt;<a href=3D"mailto:sachinmamoru@gmail.com" target=3D"_blank">sachinmamo=
ru@gmail.com</a>&gt; wrote:<br><br></blockquote></div><blockquote type=3D"c=
ite"><div dir=3D"ltr">=EF=BB=BF<div dir=3D"ltr">Hi Neil,<div><br></div><div=
>Does that mean it should be identical to the narrowed scope request or the=
 original request scope?</div></div></div></blockquote><div><br></div><div>=
It says it has to be identical to the scope of the existing refresh token i=
n the request, not the scope specified in the request. So effectively you c=
an never downscope a refresh token in this way. Whatever scope you specify,=
 any RT returned must always retain the original scope.=C2=A0</div><div><br=
></div><div>(There are other ways to downscope a RT, eg ForgeRock=E2=80=99s=
 macaroons allow you to attenuate the scope if you wish).=C2=A0</div><div><=
br></div><div>=E2=80=94 Neil</div><br><blockquote type=3D"cite"><div dir=3D=
"ltr"><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">=
On Tue, 20 Feb 2024 at 16:31, Sachin Mamoru &lt;<a href=3D"mailto:sachinmam=
oru@gmail.com" target=3D"_blank">sachinmamoru@gmail.com</a>&gt; wrote:<br><=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><br=
></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr"=
>On Tue, 20 Feb 2024 at 12:23, Neil Madden &lt;<a href=3D"mailto:neil.e.mad=
den@gmail.com" target=3D"_blank">neil.e.madden@gmail.com</a>&gt; wrote:<br>=
</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;b=
order-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"auto"><=
div dir=3D"ltr"></div><div dir=3D"ltr"><br></div><div dir=3D"ltr"><blockquo=
te type=3D"cite">On 20 Feb 2024, at 06:44, Sachin Mamoru &lt;<a href=3D"mai=
lto:sachinmamoru@gmail.com" target=3D"_blank">sachinmamoru@gmail.com</a>&gt=
; wrote:<br><br></blockquote></div><blockquote type=3D"cite"><div dir=3D"lt=
r">=EF=BB=BF<div dir=3D"ltr">Hi All,<div><br></div><div><div style=3D"line-=
height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D"background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;fo=
nt-variant-alternates:normal;vertical-align:baseline"><font face=3D"arial, =
sans-serif">When we request an access token using 3 scopes (scope1, scope2,=
 scope3).</font></span></div><div style=3D"line-height:1.2;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;font-variant-alternates:norma=
l;vertical-align:baseline"><font face=3D"arial, sans-serif">Then will recei=
ve a refresh token (refresh_token1) with the access token.</font></span></d=
iv><font face=3D"arial, sans-serif"><br></font><div style=3D"line-height:1.=
2;margin-top:0pt;margin-bottom:0pt"><span style=3D"background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;font-varian=
t-alternates:normal;vertical-align:baseline"><font face=3D"arial, sans-seri=
f">After that will request another access token with refresh_token1 and pro=
vide the scope list as scope1 and scope2 (Narrow down scopes).</font></span=
></div><div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine"><font face=3D"arial, sans-serif">Similarly, get another refresh token =
(refresh_token2) with the access token.</font></span></div><font face=3D"ar=
ial, sans-serif"><br></font><div style=3D"line-height:1.2;margin-top:0pt;ma=
rgin-bottom:0pt"><span style=3D"background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal=
;vertical-align:baseline"><font face=3D"arial, sans-serif">Now if we reques=
t another access token with refresh_token2, we cannot request scope3, inste=
ad, we can either request both scope1 and scope2 or one of them.<br></font>=
</span></div><font face=3D"arial, sans-serif"><br></font><div style=3D"line=
-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D"background-col=
or:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;f=
ont-variant-alternates:normal;vertical-align:baseline"><font face=3D"arial,=
 sans-serif">But in the specification, didn&#39;t able to find anything rel=
ated to narrow-down scopes with refresh token.</font></span></div><font fac=
e=3D"arial, sans-serif"><br></font><div style=3D"line-height:1.2;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"background-color:transparent;font-va=
riant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates=
:normal;text-decoration-line:underline;vertical-align:baseline"><font face=
=3D"arial, sans-serif">From Spec</font></span></div><font face=3D"arial, sa=
ns-serif"><br></font><div style=3D"line-height:1.2;margin-top:0pt;margin-bo=
ttom:0pt"><font face=3D"arial, sans-serif"><span style=3D"background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font=
-variant-alternates:normal;vertical-align:baseline">1.5.=C2=A0 Refresh Toke=
n -=C2=A0</span><span style=3D"background-color:transparent">Refresh tokens=
 are issued to the client by the authorization server and are=C2=A0</span><=
span style=3D"background-color:transparent">used to obtain a new access tok=
en when the current access token=C2=A0</span><span style=3D"background-colo=
r:transparent">becomes invalid or expires or to obtain additional access to=
kens=C2=A0</span><span style=3D"background-color:transparent">with identica=
l or narrower scope (access tokens may have a shorter=C2=A0</span><span sty=
le=3D"background-color:transparent">lifetime and fewer permissions than aut=
horized by the resource=C2=A0</span><span style=3D"background-color:transpa=
rent">owner).</span></font></div><font face=3D"arial, sans-serif"><br></fon=
t><div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;font-variant-alternates:normal;vertical-align:baseline">=
<font face=3D"arial, sans-serif">6.=C2=A0 Refreshing an Access Token</font>=
</span></div><div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt=
"><font face=3D"arial, sans-serif"><span style=3D"background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant=
-alternates:normal;vertical-align:baseline">The scope of the access request=
 as described by=C2=A0</span><span style=3D"background-color:transparent">S=
ection 3.3.=C2=A0 The requested scope MUST NOT include any scope=C2=A0</spa=
n><span style=3D"background-color:transparent">not originally granted by th=
e resource owner, and if omitted is=C2=A0</span><span style=3D"background-c=
olor:transparent">treated as equal to the scope originally granted by the=
=C2=A0</span><span style=3D"background-color:transparent">resource owner.</=
span></font></div><font face=3D"arial, sans-serif"><br></font><div style=3D=
"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><a href=3D"https://datat=
racker.ietf.org/doc/html/rfc6749" style=3D"text-decoration-line:none" targe=
t=3D"_blank"><span style=3D"background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;font-variant-alternates:normal;tex=
t-decoration-line:underline;vertical-align:baseline"><font face=3D"arial, s=
ans-serif">https://datatracker.ietf.org/doc/html/rfc6749</font></span></a><=
/div><div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><font =
face=3D"arial, sans-serif"><br></font></div><div style=3D"line-height:1.2;m=
argin-top:0pt;margin-bottom:0pt"><font face=3D"arial, sans-serif">IMO, from=
 a security aspect, the current behaviour is much more secure because it is=
 designed to maintain the principle of least privilege, where it updates th=
e refresh token authorised scopes based on the requested ones.</font></div>=
<div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt"><br></div><=
div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt">What should =
be the correct behaviour?<br>narrow-down scope refresh token should also be=
 able to request access token with original scope list?<font face=3D"arial,=
 sans-serif"><br></font></div></div></div></div></blockquote><div><br></div=
><div>Also from section 6:</div><div><br></div><div><pre style=3D"box-sizin=
g:border-box;font-size:11.04px;margin-bottom:0px;overflow:visible;padding:0=
px;width:80ch;color:rgb(32,37,42)">If a
   new refresh token is issued, the refresh token scope MUST be
   identical to that of the refresh token included by the client in the
   request.</pre><pre style=3D"box-sizing:border-box;font-size:11.04px;marg=
in-bottom:0px;overflow:visible;padding:0px;width:80ch;color:rgb(32,37,42)">=
<br></pre><pre style=3D"box-sizing:border-box;font-size:11.04px;margin-bott=
om:0px;overflow:visible;padding:0px;width:80ch;color:rgb(32,37,42)"><br></p=
re><pre style=3D"box-sizing:border-box;font-size:11.04px;margin-bottom:0px;=
overflow:visible;padding:0px;width:80ch;color:rgb(32,37,42)"><br></pre><pre=
 style=3D"box-sizing:border-box;font-size:11.04px;margin-bottom:0px;overflo=
w:visible;padding:0px;width:80ch;color:rgb(32,37,42)"><br></pre><pre style=
=3D"box-sizing:border-box;font-size:11.04px;margin-bottom:0px;overflow:visi=
ble;padding:0px;width:80ch;color:rgb(32,37,42)">=E2=80=94 Neil</pre></div><=
/div></blockquote></div><br clear=3D"all"><div><br></div><span class=3D"gma=
il_signature_prefix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signatur=
e"><div dir=3D"ltr"><div dir=3D"ltr"><table style=3D"direction:ltr;border-c=
ollapse:collapse"><tbody><tr><td style=3D"font-size:0px;height:12px;line-he=
ight:0"></td></tr><tr><td><table cellpadding=3D"0" cellspacing=3D"0" style=
=3D"border-collapse:collapse;font-family:Arial;line-height:1.15"><tbody><tr=
><td style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px"><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;width=
:65px"><tbody><tr><td style=3D"padding:0.01px 10px 0px 0px"><img src=3D"htt=
ps://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea762db0d5/pro=
file.format_png.resize_200x.jpeg" height=3D"auto" width=3D"65" style=3D"wid=
th: 65px; vertical-align: initial; border-radius: 0px; display: block;"></t=
d></tr></tbody></table></td><td height=3D"1" width=3D"0" style=3D"width:0px=
;padding:0.01px;border-right:1px solid rgb(189,189,189);height:1px;font-siz=
e:1pt">=C2=A0</td><td style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-a=
lign:top" valign=3D"top"><table cellpadding=3D"0" cellspacing=3D"0" style=
=3D"border-collapse:collapse"><tbody><tr><td style=3D"line-height:1.2;paddi=
ng:0.01px 0.01px 12px"><span style=3D"font-family:Arial;text-transform:init=
ial;font-weight:bold"><span style=3D"color:rgb(100,100,100);font-size:16px"=
> Sachin Mamoru </span></span><br><span style=3D"font-size:13px;letter-spac=
ing:0px;font-family:Arial;text-transform:initial;font-weight:bold;color:rgb=
(100,100,100)"> Software Engineer, </span> <span style=3D"font-size:13px;le=
tter-spacing:0px;font-family:Arial;text-transform:initial;font-weight:bold;=
color:rgb(100,100,100)"> WSO2</span></td></tr><tr><td style=3D"padding:0.01=
px;line-height:0"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"borde=
r-collapse:collapse"><tbody><tr><td style=3D"padding:0.01px"><table cellpad=
ding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse"><tbody><tr>=
<td style=3D"line-height:0;padding:0.01px 0.01px 6px"><table cellpadding=3D=
"0" cellspacing=3D"0" style=3D"border-collapse:collapse;line-height:14px;fo=
nt-size:12px;font-family:Arial"><tbody><tr><td style=3D"padding:0.01px;font=
-family:Arial;font-size:12px"><a href=3D"tel:+94771292681" style=3D"text-de=
coration:unset;font-size:12px;font-family:Arial" target=3D"_blank"><span st=
yle=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space:no=
wrap;font-size:12px"> +94771292681</span></a></td></tr></tbody></table></td=
><td style=3D"line-height:0;padding:0.01px 0.01px 6px"><table cellpadding=
=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;line-height:14px=
;font-size:12px;font-family:Arial"><tbody><tr><td style=3D"padding:0px 4px"=
><span style=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb=
(33,33,33);vertical-align:2px"> | </span></td><td style=3D"padding:0.01px;f=
ont-family:Arial;font-size:12px"><a href=3D"https://sachinmamoru.me/" style=
=3D"text-decoration:unset;font-size:12px;font-family:Arial" target=3D"_blan=
k"><span style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;whi=
te-space:nowrap;font-size:12px"> sachinmamoru.me=C2=A0</span></a></td></tr>=
</tbody></table></td></tr></tbody></table></td></tr><tr><td style=3D"paddin=
g:0.01px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collap=
se:collapse"><tbody><tr><td style=3D"line-height:0;padding:0.01px 0.01px 6p=
x"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:coll=
apse;line-height:14px;font-size:12px;font-family:Arial"><tbody><tr><td styl=
e=3D"padding:0.01px;font-family:Arial;font-size:12px"><a href=3D"mailto:sac=
hinmamoru@gmail.com" style=3D"text-decoration:unset;font-size:12px;font-fam=
ily:Arial" target=3D"_blank"><span style=3D"line-height:1.2;color:rgb(33,33=
,33);font-family:Arial;white-space:nowrap;font-size:12px"> sachinmamoru@gma=
il.com=C2=A0</span></a></td></tr></tbody></table></td></tr></tbody></table>=
</td></tr></tbody></table></td></tr><tr><td style=3D"padding:12px 0.01px 0.=
01px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:c=
ollapse;width:100%"><tbody><tr><td style=3D"padding:0.01px"><table border=
=3D"0" cellpadding=3D"0" cellspacing=3D"0"><tbody><tr><td align=3D"left" st=
yle=3D"padding-right:6px;text-align:center;padding-top:0px"><a href=3D"http=
s://www.linkedin.com/in/sachin-mamoru/" target=3D"_blank"><img width=3D"25"=
 height=3D"25" src=3D"https://cdn.gifo.wisestamp.com/s/ld/0077b5/50/0/backg=
round.png" style=3D"float: left; border: none;" border=3D"0"></a></td><td a=
lign=3D"left" style=3D"padding-right:6px;text-align:center;padding-top:0px"=
><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank"><img width=
=3D"25" height=3D"25" src=3D"https://cdn.gifo.wisestamp.com/s/tw/55acee/50/=
0/background.png" style=3D"float: left; border: none;" border=3D"0"></a></t=
d></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table>=
</td></tr></tbody></table><table cellpadding=3D"0" cellspacing=3D"0" border=
=3D"0" style=3D"max-width:600px;width:100%"><tbody><tr><td style=3D"line-he=
ight:0"></td></tr></tbody></table></td></tr></tbody></table><br></div><img =
src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D""></=
div></div>
</blockquote></div><br clear=3D"all"><div><br></div><span class=3D"gmail_si=
gnature_prefix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature"><d=
iv dir=3D"ltr"><div dir=3D"ltr"><table style=3D"direction:ltr;border-collap=
se:collapse"><tbody><tr><td style=3D"font-size:0px;height:12px;line-height:=
0"></td></tr><tr><td><table cellpadding=3D"0" cellspacing=3D"0" style=3D"bo=
rder-collapse:collapse;font-family:Arial;line-height:1.15"><tbody><tr><td s=
tyle=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px"><table cellpa=
dding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;width:65px"=
><tbody><tr><td style=3D"padding:0.01px 10px 0px 0px"><img src=3D"https://d=
36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea762db0d5/profile.f=
ormat_png.resize_200x.jpeg" height=3D"auto" width=3D"65" style=3D"width: 65=
px; vertical-align: initial; border-radius: 0px; display: block;"></td></tr=
></tbody></table></td><td height=3D"1" width=3D"0" style=3D"width:0px;paddi=
ng:0.01px;border-right:1px solid rgb(189,189,189);height:1px;font-size:1pt"=
>=C2=A0</td><td style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:t=
op" valign=3D"top"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"bord=
er-collapse:collapse"><tbody><tr><td style=3D"line-height:1.2;padding:0.01p=
x 0.01px 12px"><span style=3D"font-family:Arial;text-transform:initial;font=
-weight:bold"><span style=3D"color:rgb(100,100,100);font-size:16px"> Sachin=
 Mamoru </span></span><br><span style=3D"font-size:13px;letter-spacing:0px;=
font-family:Arial;text-transform:initial;font-weight:bold;color:rgb(100,100=
,100)"> Software Engineer, </span> <span style=3D"font-size:13px;letter-spa=
cing:0px;font-family:Arial;text-transform:initial;font-weight:bold;color:rg=
b(100,100,100)"> WSO2</span></td></tr><tr><td style=3D"padding:0.01px;line-=
height:0"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collap=
se:collapse"><tbody><tr><td style=3D"padding:0.01px"><table cellpadding=3D"=
0" cellspacing=3D"0" style=3D"border-collapse:collapse"><tbody><tr><td styl=
e=3D"line-height:0;padding:0.01px 0.01px 6px"><table cellpadding=3D"0" cell=
spacing=3D"0" style=3D"border-collapse:collapse;line-height:14px;font-size:=
12px;font-family:Arial"><tbody><tr><td style=3D"padding:0.01px;font-family:=
Arial;font-size:12px"><a href=3D"tel:+94771292681" style=3D"text-decoration=
:unset;font-size:12px;font-family:Arial" target=3D"_blank"><span style=3D"l=
ine-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space:nowrap;fon=
t-size:12px"> +94771292681</span></a></td></tr></tbody></table></td><td sty=
le=3D"line-height:0;padding:0.01px 0.01px 6px"><table cellpadding=3D"0" cel=
lspacing=3D"0" style=3D"border-collapse:collapse;line-height:14px;font-size=
:12px;font-family:Arial"><tbody><tr><td style=3D"padding:0px 4px"><span sty=
le=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb(33,33,33)=
;vertical-align:2px"> | </span></td><td style=3D"padding:0.01px;font-family=
:Arial;font-size:12px"><a href=3D"https://sachinmamoru.me/" style=3D"text-d=
ecoration:unset;font-size:12px;font-family:Arial" target=3D"_blank"><span s=
tyle=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space:n=
owrap;font-size:12px"> sachinmamoru.me=C2=A0</span></a></td></tr></tbody></=
table></td></tr></tbody></table></td></tr><tr><td style=3D"padding:0.01px">=
<table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collaps=
e"><tbody><tr><td style=3D"line-height:0;padding:0.01px 0.01px 6px"><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;line-=
height:14px;font-size:12px;font-family:Arial"><tbody><tr><td style=3D"paddi=
ng:0.01px;font-family:Arial;font-size:12px"><a href=3D"mailto:sachinmamoru@=
gmail.com" style=3D"text-decoration:unset;font-size:12px;font-family:Arial"=
 target=3D"_blank"><span style=3D"line-height:1.2;color:rgb(33,33,33);font-=
family:Arial;white-space:nowrap;font-size:12px"> sachinmamoru@gmail.com=C2=
=A0</span></a></td></tr></tbody></table></td></tr></tbody></table></td></tr=
></tbody></table></td></tr><tr><td style=3D"padding:12px 0.01px 0.01px"><ta=
ble cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;w=
idth:100%"><tbody><tr><td style=3D"padding:0.01px"><table border=3D"0" cell=
padding=3D"0" cellspacing=3D"0"><tbody><tr><td align=3D"left" style=3D"padd=
ing-right:6px;text-align:center;padding-top:0px"><a href=3D"https://www.lin=
kedin.com/in/sachin-mamoru/" target=3D"_blank"><img width=3D"25" height=3D"=
25" src=3D"https://cdn.gifo.wisestamp.com/s/ld/0077b5/50/0/background.png" =
style=3D"float: left; border: none;" border=3D"0"></a></td><td align=3D"lef=
t" style=3D"padding-right:6px;text-align:center;padding-top:0px"><a href=3D=
"https://twitter.com/MamoruSachin" target=3D"_blank"><img width=3D"25" heig=
ht=3D"25" src=3D"https://cdn.gifo.wisestamp.com/s/tw/55acee/50/0/background=
.png" style=3D"float: left; border: none;" border=3D"0"></a></td></tr></tbo=
dy></table></td></tr></tbody></table></td></tr></tbody></table></td></tr></=
tbody></table><table cellpadding=3D"0" cellspacing=3D"0" border=3D"0" style=
=3D"max-width:600px;width:100%"><tbody><tr><td style=3D"line-height:0"></td=
></tr></tbody></table></td></tr></tbody></table><br></div><img src=3D"https=
://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D""></div></div>
</div></blockquote></div></blockquote></div><br clear=3D"all"><div><br></di=
v><span class=3D"gmail_signature_prefix">-- </span><br><div dir=3D"ltr" cla=
ss=3D"gmail_signature"><div dir=3D"ltr"><div dir=3D"ltr"><table style=3D"di=
rection:ltr;border-collapse:collapse"><tbody><tr><td style=3D"font-size:0px=
;height:12px;line-height:0"></td></tr><tr><td><table cellpadding=3D"0" cell=
spacing=3D"0" style=3D"border-collapse:collapse;font-family:Arial;line-heig=
ht:1.15"><tbody><tr><td style=3D"vertical-align:top;padding:0.01px 14px 0.0=
1px 0.01px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-coll=
apse:collapse;width:65px"><tbody><tr><td style=3D"padding:0.01px 10px 0px 0=
px"><img src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-82=
05-f3ea762db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=
=3D"65" style=3D"width: 65px; vertical-align: initial; border-radius: 0px; =
display: block;"></td></tr></tbody></table></td><td height=3D"1" width=3D"0=
" style=3D"width:0px;padding:0.01px;border-right:1px solid rgb(189,189,189)=
;height:1px;font-size:1pt">=C2=A0</td><td style=3D"padding:0.01px 0.01px 0.=
01px 14px;vertical-align:top" valign=3D"top"><table cellpadding=3D"0" cells=
pacing=3D"0" style=3D"border-collapse:collapse"><tbody><tr><td style=3D"lin=
e-height:1.2;padding:0.01px 0.01px 12px"><span style=3D"font-family:Arial;t=
ext-transform:initial;font-weight:bold"><span style=3D"color:rgb(100,100,10=
0);font-size:16px"> Sachin Mamoru </span></span><br><span style=3D"font-siz=
e:13px;letter-spacing:0px;font-family:Arial;text-transform:initial;font-wei=
ght:bold;color:rgb(100,100,100)"> Software Engineer, </span> <span style=3D=
"font-size:13px;letter-spacing:0px;font-family:Arial;text-transform:initial=
;font-weight:bold;color:rgb(100,100,100)"> WSO2</span></td></tr><tr><td sty=
le=3D"padding:0.01px;line-height:0"><table cellpadding=3D"0" cellspacing=3D=
"0" style=3D"border-collapse:collapse"><tbody><tr><td style=3D"padding:0.01=
px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:col=
lapse"><tbody><tr><td style=3D"line-height:0;padding:0.01px 0.01px 6px"><ta=
ble cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;l=
ine-height:14px;font-size:12px;font-family:Arial"><tbody><tr><td style=3D"p=
adding:0.01px;font-family:Arial;font-size:12px"><a href=3D"tel:+94771292681=
" style=3D"text-decoration:unset;font-size:12px;font-family:Arial" target=
=3D"_blank"><span style=3D"line-height:1.2;color:rgb(33,33,33);font-family:=
Arial;white-space:nowrap;font-size:12px"> +94771292681</span></a></td></tr>=
</tbody></table></td><td style=3D"line-height:0;padding:0.01px 0.01px 6px">=
<table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collaps=
e;line-height:14px;font-size:12px;font-family:Arial"><tbody><tr><td style=
=3D"padding:0px 4px"><span style=3D"font-family:Arial;font-weight:bold;font=
-size:12px;color:rgb(33,33,33);vertical-align:2px"> | </span></td><td style=
=3D"padding:0.01px;font-family:Arial;font-size:12px"><a href=3D"https://sac=
hinmamoru.me/" style=3D"text-decoration:unset;font-size:12px;font-family:Ar=
ial" target=3D"_blank"><span style=3D"line-height:1.2;color:rgb(33,33,33);f=
ont-family:Arial;white-space:nowrap;font-size:12px"> sachinmamoru.me=C2=A0<=
/span></a></td></tr></tbody></table></td></tr></tbody></table></td></tr><tr=
><td style=3D"padding:0.01px"><table cellpadding=3D"0" cellspacing=3D"0" st=
yle=3D"border-collapse:collapse"><tbody><tr><td style=3D"line-height:0;padd=
ing:0.01px 0.01px 6px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"=
border-collapse:collapse;line-height:14px;font-size:12px;font-family:Arial"=
><tbody><tr><td style=3D"padding:0.01px;font-family:Arial;font-size:12px"><=
a href=3D"mailto:sachinmamoru@gmail.com" style=3D"text-decoration:unset;fon=
t-size:12px;font-family:Arial" target=3D"_blank"><span style=3D"line-height=
:1.2;color:rgb(33,33,33);font-family:Arial;white-space:nowrap;font-size:12p=
x"> sachinmamoru@gmail.com=C2=A0</span></a></td></tr></tbody></table></td><=
/tr></tbody></table></td></tr></tbody></table></td></tr><tr><td style=3D"pa=
dding:12px 0.01px 0.01px"><table cellpadding=3D"0" cellspacing=3D"0" style=
=3D"border-collapse:collapse;width:100%"><tbody><tr><td style=3D"padding:0.=
01px"><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0"><tbody><tr><t=
d align=3D"left" style=3D"padding-right:6px;text-align:center;padding-top:0=
px"><a href=3D"https://www.linkedin.com/in/sachin-mamoru/" target=3D"_blank=
"><img width=3D"25" height=3D"25" src=3D"https://cdn.gifo.wisestamp.com/s/l=
d/0077b5/50/0/background.png" style=3D"float: left; border: none;" border=
=3D"0"></a></td><td align=3D"left" style=3D"padding-right:6px;text-align:ce=
nter;padding-top:0px"><a href=3D"https://twitter.com/MamoruSachin" target=
=3D"_blank"><img width=3D"25" height=3D"25" src=3D"https://cdn.gifo.wisesta=
mp.com/s/tw/55acee/50/0/background.png" style=3D"float: left; border: none;=
" border=3D"0"></a></td></tr></tbody></table></td></tr></tbody></table></td=
></tr></tbody></table></td></tr></tbody></table><table cellpadding=3D"0" ce=
llspacing=3D"0" border=3D"0" style=3D"max-width:600px;width:100%"><tbody><t=
r><td style=3D"line-height:0"></td></tr></tbody></table></td></tr></tbody><=
/table><br></div><img src=3D"https://tracy.srv.wisestamp.com/px/54341232787=
45600.png" alt=3D""></div></div>
</div></blockquote></div><br></div></div></blockquote></div><br clear=3D"al=
l"><div><br></div><span class=3D"gmail_signature_prefix">-- </span><br><div=
 dir=3D"ltr" class=3D"gmail_signature"><div dir=3D"ltr"><div dir=3D"ltr"><t=
able style=3D"direction:ltr;border-collapse:collapse"><tbody><tr><td style=
=3D"font-size:0px;height:12px;line-height:0"></td></tr><tr><td><table cellp=
adding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;font-famil=
y:Arial;line-height:1.15;color:rgb(0,0,0)"><tbody><tr><td style=3D"vertical=
-align:top;padding:0.01px 14px 0.01px 0.01px"><table cellpadding=3D"0" cell=
spacing=3D"0" style=3D"border-collapse:collapse;width:65px"><tbody><tr><td =
style=3D"padding:0.01px 10px 0px 0px"><img src=3D"https://d36urhup7zbd7q.cl=
oudfront.net/29e6c216-f94e-4bc3-8205-f3ea762db0d5/profile.format_png.resize=
_200x.jpeg" height=3D"auto" width=3D"65" style=3D"width: 65px; vertical-ali=
gn: initial; border-radius: 0px; display: block;"></td></tr></tbody></table=
></td><td height=3D"1" width=3D"0" style=3D"width:0px;padding:0.01px;border=
-right:1px solid rgb(189,189,189);height:1px;font-size:1pt">=C2=A0</td><td =
style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:top" valign=3D"to=
p"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:coll=
apse"><tbody><tr><td style=3D"line-height:1.2;padding:0.01px 0.01px 12px"><=
span style=3D"font-family:Arial;text-transform:initial;font-weight:bold"><s=
pan style=3D"color:rgb(100,100,100);font-size:16px"> Sachin Mamoru </span><=
/span><br><span style=3D"font-size:13px;letter-spacing:0px;font-family:Aria=
l;text-transform:initial;font-weight:bold;color:rgb(100,100,100)"> Software=
 Engineer, </span> <span style=3D"font-size:13px;letter-spacing:0px;font-fa=
mily:Arial;text-transform:initial;font-weight:bold;color:rgb(100,100,100)">=
 WSO2</span></td></tr><tr><td style=3D"padding:0.01px;line-height:0"><table=
 cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse"><tb=
ody><tr><td style=3D"padding:0.01px"><table cellpadding=3D"0" cellspacing=
=3D"0" style=3D"border-collapse:collapse"><tbody><tr><td style=3D"line-heig=
ht:0;padding:0.01px 0.01px 6px"><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fami=
ly:Arial"><tbody><tr><td style=3D"padding:0.01px;font-family:Arial;font-siz=
e:12px"><a href=3D"tel:+94771292681" style=3D"text-decoration:unset;font-si=
ze:12px;font-family:Arial" target=3D"_blank"><span style=3D"line-height:1.2=
;color:rgb(33,33,33);font-family:Arial;white-space:nowrap;font-size:12px"> =
+94771292681</span></a></td></tr></tbody></table></td><td style=3D"line-hei=
ght:0;padding:0.01px 0.01px 6px"><table cellpadding=3D"0" cellspacing=3D"0"=
 style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial"><tbody><tr><td style=3D"padding:0px 4px"><span style=3D"font-fam=
ily:Arial;font-weight:bold;font-size:12px;color:rgb(33,33,33);vertical-alig=
n:2px"> | </span></td><td style=3D"padding:0.01px;font-family:Arial;font-si=
ze:12px"><a href=3D"https://sachinmamoru.me" style=3D"text-decoration:unset=
;font-size:12px;font-family:Arial" target=3D"_blank"><span style=3D"line-he=
ight:1.2;color:rgb(33,33,33);font-family:Arial;white-space:nowrap;font-size=
:12px"> sachinmamoru.me=C2=A0</span></a></td></tr></tbody></table></td></tr=
></tbody></table></td></tr><tr><td style=3D"padding:0.01px"><table cellpadd=
ing=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse"><tbody><tr><=
td style=3D"line-height:0;padding:0.01px 0.01px 6px"><table cellpadding=3D"=
0" cellspacing=3D"0" style=3D"border-collapse:collapse;line-height:14px;fon=
t-size:12px;font-family:Arial"><tbody><tr><td style=3D"padding:0.01px;font-=
family:Arial;font-size:12px"><a href=3D"mailto:sachinmamoru@gmail.com" styl=
e=3D"text-decoration:unset;font-size:12px;font-family:Arial" target=3D"_bla=
nk"><span style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;wh=
ite-space:nowrap;font-size:12px"> sachinmamoru@gmail.com=C2=A0</span></a></=
td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table=
></td></tr><tr><td style=3D"padding:12px 0.01px 0.01px"><table cellpadding=
=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;width:100%"><tbo=
dy><tr><td style=3D"padding:0.01px"><table border=3D"0" cellpadding=3D"0" c=
ellspacing=3D"0"><tbody><tr><td align=3D"left" style=3D"padding-right:6px;t=
ext-align:center;padding-top:0px"><a href=3D"https://www.linkedin.com/in/sa=
chin-mamoru/" target=3D"_blank"><img width=3D"25" height=3D"25" src=3D"http=
s://cdn.gifo.wisestamp.com/s/ld/0077b5/50/0/background.png" style=3D"float:=
 left; border: none;" border=3D"0"></a></td><td align=3D"left" style=3D"pad=
ding-right:6px;text-align:center;padding-top:0px"><a href=3D"https://twitte=
r.com/MamoruSachin" target=3D"_blank"><img width=3D"25" height=3D"25" src=
=3D"https://cdn.gifo.wisestamp.com/s/tw/55acee/50/0/background.png" style=
=3D"float: left; border: none;" border=3D"0"></a></td></tr></tbody></table>=
</td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></tab=
le><table cellpadding=3D"0" cellspacing=3D"0" border=3D"0" style=3D"max-wid=
th:600px;width:100%"><tbody><tr><td style=3D"line-height:0"></td></tr></tbo=
dy></table></td></tr></tbody></table><br></div><img src=3D"https://tracy.sr=
v.wisestamp.com/px/5434123278745600.png" alt=3D""></div></div>

--00000000000099f2280611dfcff9--

