From neil.e.madden@gmail.com  Wed Feb 21 00:28:03 2024
Return-Path: <neil.e.madden@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 EE7B5C151099
 for <oauth@ietfa.amsl.com>; Wed, 21 Feb 2024 00:28:03 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.085
X-Spam-Level: 
X-Spam-Status: No, score=-6.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,
 FREEMAIL_REPLY=1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5,
 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 Pg7ze8Fru_4O for <oauth@ietfa.amsl.com>;
 Wed, 21 Feb 2024 00:27:59 -0800 (PST)
Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com
 [IPv6:2a00:1450:4864:20::332])
 (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 EF46CC15108B
 for <oauth@ietf.org>; Wed, 21 Feb 2024 00:27:58 -0800 (PST)
Received: by mail-wm1-x332.google.com with SMTP id
 5b1f17b1804b1-41277695f05so563885e9.0
 for <oauth@ietf.org>; Wed, 21 Feb 2024 00:27:58 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1708504077; x=1709108877; darn=ietf.org;
 h=references:to:cc:in-reply-to:date:subject:mime-version:message-id
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=hJ7+UOLQ/hdgshRbAUIAPqPD144B0r2Ss8S1miRWpMg=;
 b=Z9XMRIvaxWHHy5ErFOb4BYS79HUqLb/qNfi7X11DF3Nl7yctpMazpBLabaPrDtBTCn
 h+oLH1VqSla3LnKSov2QDYwkogqCgjz6bnEFdBCLf1CHuF7ocGXSYHdm+Eyq4aDtuqmp
 Nvi6Fs2Mn2epkHtaD/iGzc9Yf3jLuO1E3hMuohkwDjIMAUxYDNgMe27ZG+vMJlzRR9pE
 9wz33Jdy96M3FCxICTtDcUDVgg8eOBFlS0EWMpIf6NcUHuzx8/qPEyVEB4j7Wczgoia/
 Oo1EabHpjPIaBvdgtkEaefPUxBAdAXxIQJKCBdYFfRXkkqsEVDvn3VFlvMMUqWuyi2iG
 Is4A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1708504077; x=1709108877;
 h=references:to:cc:in-reply-to:date:subject:mime-version:message-id
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=hJ7+UOLQ/hdgshRbAUIAPqPD144B0r2Ss8S1miRWpMg=;
 b=OpBP5ZrEngRhM2dLOLMQVk9Uez0w1HifBP4Hg3DElfslIij4KNJvrQzkUUeo74oZU+
 MZYV9xK+IKbwr11FKDqgF+6dZ4a5ORdGhY7mr4qp4cJMsR6tdSyfXiJcVNOoyZIWXC+A
 AfJa3SHhE8AxRyBttEsyEUHlCl5pO0r1zRr5Ccl3fMphX8wHxINd4MiZD36FBg7A6C+V
 7fkCL+uZPW498VJkhKcdnQ+cPYaMhiYIbYKgYxxPqjuhGIItbqB+BtDSSNtDrWCA2xdE
 U6BZJv5gOT3DyuN25yKweRw9pxQF5ydwZo0uTHblZmXUx0BFIlYCtwgHillLmya46T69
 Dddw==
X-Forwarded-Encrypted: i=1;
 AJvYcCWw480Pf3X9afqQ9QYtVM7r16l5GCsygE7zRe357YguVpa45lyEXXNzFHgUJmgctgC1TISYxDdq9j1Ekng6QQ==
X-Gm-Message-State: AOJu0YxLcspembAzq48BP2T7qlgYNKHY1h0yfUoufGr+AuXeuPUTTTwV
 69ZuNPVq1PoXc4lTV3t//JXzh8rUt6OJdLl5WfxdcRn9BE9ik1oX
X-Google-Smtp-Source: AGHT+IHwFqZb2CdxpOrfSS2orR11vmLi0du5HnijmpoCVQHHyB2prfXDja7eEzO8CzyIN5a5KEPGaQ==
X-Received: by 2002:a05:600c:1c11:b0:411:c380:d7b8 with SMTP id
 j17-20020a05600c1c1100b00411c380d7b8mr12240453wms.0.1708504076980; 
 Wed, 21 Feb 2024 00:27:56 -0800 (PST)
Received: from smtpclient.apple ([213.31.127.136])
 by smtp.gmail.com with ESMTPSA id
 q20-20020a7bce94000000b00411d1ce4f9dsm1643077wmj.34.2024.02.21.00.27.56
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 21 Feb 2024 00:27:56 -0800 (PST)
From: Neil Madden <neil.e.madden@gmail.com>
Message-Id: <11F9493F-CE30-450F-BDC9-3C8DCAC35B28@gmail.com>
Content-Type: multipart/alternative;
 boundary="Apple-Mail=_2A5C5C22-34E1-44AB-85C1-725C58BBC6A7"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.4\))
Date: Wed, 21 Feb 2024 08:27:55 +0000
In-Reply-To: <CAD=XBCrkFr3L2AyXtKRPSAmHg9khQctENZ-2+oR1af7JBbcJ-g@mail.gmail.com>
Cc: wparad@rhosys.ch, oauth <oauth@ietf.org>, janak@wso2.com,
 thilinasenarath97@gmail.com, "piraveena@wso2.com" <piraveena@wso2.com>
To: Sachin Mamoru <sachinmamoru@gmail.com>
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>
 <CAD=XBCpgLZObed8Kj2ST6engpFR47psFrrbNKw5rwaN=_E25qA@mail.gmail.com>
 <CAD=XBCrkFr3L2AyXtKRPSAmHg9khQctENZ-2+oR1af7JBbcJ-g@mail.gmail.com>
X-Mailer: Apple Mail (2.3696.120.41.1.4)
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/Fx86HWw2-ldsyQRwrMxH738hl00>
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:28:04 -0000


--Apple-Mail=_2A5C5C22-34E1-44AB-85C1-725C58BBC6A7
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

That section quite clearly says "*access tokens* with identical or =
narrower scope". Not refresh tokens.

-- Neil

> On 21 Feb 2024, at 08:24, Sachin Mamoru <sachinmamoru@gmail.com> =
wrote:
>=20
> Hi Warren and Neil,
>=20
> My basis for asking this is due to the following definition [1],
>=20
> Refresh tokens are credentials used to obtain access tokens.  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).  Issuing a refresh token is optional at the discretion of =
the
>    authorization server.  If the authorization server issues a refresh
>    token, it is included when issuing an access token (i.e., step (D) =
in
>    Figure 1).
>=20
> [1] https://datatracker.ietf.org/doc/html/rfc6749#section-1.5 =
<https://datatracker.ietf.org/doc/html/rfc6749#section-1.5>
>=20
> Thanks & Regards,
> Sachin
>=20
> On Wed, 21 Feb 2024 at 13:36, Sachin Mamoru <sachinmamoru@gmail.com =
<mailto:sachinmamoru@gmail.com>> wrote:
> Hi Warren and Neil,
>=20
> Thanks for the valuable input and sorry for mentioning other products, =
I just wanted to provide an example.=20
> So Warren according to you following is the behaviour that spec =
suggested.
>=20
> When we request an access token using 3 scopes (scope1, scope2, =
scope3).
>=20
> Then will receive a refresh token (refresh_token1) with the access =
token.
>=20
> After that will request another access token with refresh_token1 and =
provide the scope list as scope1 and scope2 (Narrow down scopes).
>=20
> Similarly, get another refresh token (refresh_token2) with the access =
token.
>=20
> 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.
>=20
> 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?
>=20
> Thanks & Regards,
> Sachin
>=20
> On Wed, 21 Feb 2024 at 01:12, Neil Madden <neil.e.madden@gmail.com =
<mailto: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? Either way, the spec is pretty clear, regardless of what some =
vendor does.
>=20
> -- Neil
>=20
>> On 20 Feb 2024, at 19:26, Sachin Mamoru <sachinmamoru@gmail.com =
<mailto:sachinmamoru@gmail.com>> wrote:
>>=20
>> Hi Neil,
>>=20
>> 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.
>>=20
>> "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 =
read 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."
>>=20
>> [1] =
https://curity.io/resources/learn/refresh-tokens/#changing-scope-of-access=
-token-on-refresh =
<https://curity.io/resources/learn/refresh-tokens/#changing-scope-of-acces=
s-token-on-refresh>
>>=20
>> Thanks & Regards,
>> Sachin
>>=20
>> On Tue, 20 Feb 2024 at 21:59, Neil Madden <neil.e.madden@gmail.com =
<mailto:neil.e.madden@gmail.com>> wrote:
>>=20
>>=20
>>> On 20 Feb 2024, at 11:02, Sachin Mamoru <sachinmamoru@gmail.com =
<mailto:sachinmamoru@gmail.com>> wrote:
>>>=20
>>> =EF=BB=BF
>>> Hi Neil,
>>>=20
>>> Does that mean it should be identical to the narrowed scope request =
or the original request scope?
>>=20
>> It says it has to be identical to the scope of the existing refresh =
token in the request, not the scope specified in the request. So =
effectively you can never downscope a refresh token in this way. =
Whatever scope you specify, any RT returned must always retain the =
original scope.=20
>>=20
>> (There are other ways to downscope a RT, eg ForgeRock=E2=80=99s =
macaroons allow you to attenuate the scope if you wish).=20
>>=20
>> =E2=80=94 Neil
>>=20
>>>=20
>>> On Tue, 20 Feb 2024 at 16:31, Sachin Mamoru <sachinmamoru@gmail.com =
<mailto:sachinmamoru@gmail.com>> wrote:
>>>=20
>>>=20
>>> On Tue, 20 Feb 2024 at 12:23, Neil Madden <neil.e.madden@gmail.com =
<mailto:neil.e.madden@gmail.com>> wrote:
>>>=20
>>>> On 20 Feb 2024, at 06:44, Sachin Mamoru <sachinmamoru@gmail.com =
<mailto:sachinmamoru@gmail.com>> wrote:
>>>>=20
>>>> =EF=BB=BF
>>>> Hi All,
>>>>=20
>>>> When we request an access token using 3 scopes (scope1, scope2, =
scope3).
>>>> Then will receive a refresh token (refresh_token1) with the access =
token.
>>>>=20
>>>> 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.
>>>>=20
>>>> 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.
>>>>=20
>>>> But in the specification, didn't able to find anything related to =
narrow-down scopes with refresh token.
>>>>=20
>>>> =46rom Spec
>>>>=20
>>>> 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).
>>>>=20
>>>> 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.
>>>>=20
>>>> https://datatracker.ietf.org/doc/html/rfc6749 =
<https://datatracker.ietf.org/doc/html/rfc6749>
>>>>=20
>>>> 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 the refresh token authorised scopes based on =
the requested ones.
>>>>=20
>>>> What should be the correct behaviour?
>>>> narrow-down scope refresh token should also be able to request =
access token with original scope list?
>>>=20
>>> Also from section 6:
>>>=20
>>> 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.
>>>=20
>>>=20
>>>=20
>>>=20
>>> =E2=80=94 Neil
>>>=20
>>>=20
>>> --=20
>>>=20
>>>  =09
>>> Sachin Mamoru=20
>>> Software Engineer, WSO2
>>> +94771292681 <tel:+94771292681>=09
>>> |	sachinmamoru.me=C2=A0 <https://sachinmamoru.me/>
>>> sachinmamoru@gmail.com=C2=A0 <mailto:sachinmamoru@gmail.com>
>>>  <https://www.linkedin.com/in/sachin-mamoru/>	 =
<https://twitter.com/MamoruSachin>
>>>=20
>>>=20
>>>=20
>>> --=20
>>>=20
>>>  =09
>>> Sachin Mamoru=20
>>> Software Engineer, WSO2
>>> +94771292681 <tel:+94771292681>=09
>>> |	sachinmamoru.me=C2=A0 <https://sachinmamoru.me/>
>>> sachinmamoru@gmail.com=C2=A0 <mailto:sachinmamoru@gmail.com>
>>>  <https://www.linkedin.com/in/sachin-mamoru/>	 =
<https://twitter.com/MamoruSachin>
>>>=20
>>=20
>>=20
>> --=20
>>=20
>>  =09
>> Sachin Mamoru=20
>> Software Engineer, WSO2
>> +94771292681 <tel:+94771292681>=09
>> |	sachinmamoru.me=C2=A0 <https://sachinmamoru.me/>
>> sachinmamoru@gmail.com=C2=A0 <mailto:sachinmamoru@gmail.com>
>>  <https://www.linkedin.com/in/sachin-mamoru/>	 =
<https://twitter.com/MamoruSachin>
>>=20
>=20
>=20
>=20
> --=20
>=20
>  =09
> Sachin Mamoru=20
> Software Engineer, WSO2
> +94771292681 <tel:+94771292681>=09
> |	sachinmamoru.me=C2=A0 <https://sachinmamoru.me/>
> sachinmamoru@gmail.com=C2=A0 <mailto:sachinmamoru@gmail.com>
>  <https://www.linkedin.com/in/sachin-mamoru/>	 =
<https://twitter.com/MamoruSachin>
>=20
>=20
>=20
> --=20
>=20
>  =09
> Sachin Mamoru=20
> Software Engineer, WSO2
> +94771292681 <tel:+94771292681>=09
> |	sachinmamoru.me=C2=A0 <https://sachinmamoru.me/>
> sachinmamoru@gmail.com=C2=A0 <mailto:sachinmamoru@gmail.com>
>  <https://www.linkedin.com/in/sachin-mamoru/>	 =
<https://twitter.com/MamoruSachin>
>=20


--Apple-Mail=_2A5C5C22-34E1-44AB-85C1-725C58BBC6A7
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" =
class=3D""><div>That section quite clearly says "*access tokens* with =
identical or narrower scope". Not refresh tokens.</div><div><br =
class=3D""></div><div>-- Neil</div><div><br class=3D""><blockquote =
type=3D"cite" class=3D""><div class=3D"">On 21 Feb 2024, at 08:24, =
Sachin Mamoru &lt;<a href=3D"mailto:sachinmamoru@gmail.com" =
class=3D"">sachinmamoru@gmail.com</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div dir=3D"ltr" =
class=3D""><div class=3D"">Hi Warren and Neil,<br class=3D""></div><div =
class=3D""><br class=3D""></div><div class=3D"">My basis for asking this =
is due to the following definition [1],</div><div class=3D""><br =
class=3D""></div>Refresh tokens are credentials used to obtain access =
tokens.&nbsp; Refresh<br class=3D"">&nbsp; &nbsp;tokens are issued to =
the client by the authorization server and are<br class=3D"">&nbsp; =
&nbsp;used to obtain a new access token when the current access token<br =
class=3D"">&nbsp; &nbsp;becomes invalid or expires, or to obtain =
additional access tokens<br class=3D"">&nbsp; &nbsp;with identical or =
<font color=3D"#ff0000" class=3D"">narrower scope </font>(access tokens =
may have a shorter<br class=3D"">&nbsp; &nbsp;lifetime and fewer =
permissions than authorized by the resource<br class=3D"">&nbsp; =
&nbsp;owner).&nbsp; Issuing a refresh token is optional at the =
discretion of the<br class=3D"">&nbsp; &nbsp;authorization server.&nbsp; =
If the authorization server issues a refresh<br class=3D"">&nbsp; =
&nbsp;token, it is included when issuing an access token (i.e., step (D) =
in<br class=3D"">&nbsp; &nbsp;Figure 1).<br class=3D""><div class=3D""><br=
 class=3D""></div><div class=3D"">[1]&nbsp;<a =
href=3D"https://datatracker.ietf.org/doc/html/rfc6749#section-1.5" =
class=3D"">https://datatracker.ietf.org/doc/html/rfc6749#section-1.5</a></=
div><div class=3D""><br class=3D""></div><div class=3D"">Thanks &amp; =
Regards,</div><div class=3D"">Sachin</div></div><br class=3D""><div =
class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, 21 =
Feb 2024 at 13:36, Sachin Mamoru &lt;<a =
href=3D"mailto:sachinmamoru@gmail.com" =
class=3D"">sachinmamoru@gmail.com</a>&gt; wrote:<br =
class=3D""></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" =
class=3D"">Hi&nbsp;Warren and Neil,<div class=3D""><br =
class=3D""></div><div class=3D"">Thanks for the valuable input and sorry =
for mentioning&nbsp;other products, I just wanted to provide an =
example.&nbsp;</div><div class=3D"">So Warren according to you following =
is the behaviour that spec suggested.</div><div class=3D""><font =
face=3D"arial, sans-serif" class=3D""><br class=3D""></font></div><div =
class=3D""><span =
id=3D"m_-8799194716268198968gmail-docs-internal-guid-4f39e0eb-7fff-d42a-f7=
80-95f6f69ccd92" class=3D""><div dir=3D"ltr" style=3D"margin-left:0pt" =
align=3D"left" class=3D""><table =
style=3D"border:none;border-collapse:collapse;table-layout:fixed;width:468=
pt" class=3D""><colgroup class=3D""><col class=3D""></colgroup><tbody =
class=3D""><tr style=3D"height:0pt" class=3D""><td =
style=3D"border-width:1pt;border-style:solid;border-color:rgb(0,0,0);verti=
cal-align:top;padding:5pt;overflow:hidden" class=3D""><div =
style=3D"line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;" =
class=3D""><span style=3D"background-color: transparent; =
font-variant-numeric: normal; font-variant-east-asian: normal; =
font-variant-alternates: normal; vertical-align: baseline;" =
class=3D""><font face=3D"arial, sans-serif" class=3D"">When we request =
an access token using 3 scopes (scope1, scope2, =
scope3).</font></span></div><font face=3D"arial, sans-serif" =
class=3D""><br class=3D""></font><div style=3D"line-height: 1.2; =
margin-top: 0pt; margin-bottom: 0pt;" class=3D""><span =
style=3D"background-color: transparent; font-variant-numeric: normal; =
font-variant-east-asian: normal; font-variant-alternates: normal; =
vertical-align: baseline;" class=3D""><font face=3D"arial, sans-serif" =
class=3D"">Then will receive a refresh token (refresh_token1) with the =
access token.</font></span></div><font face=3D"arial, sans-serif" =
class=3D""><br class=3D""></font><div style=3D"line-height: 1.2; =
margin-top: 0pt; margin-bottom: 0pt;" class=3D""><span =
style=3D"background-color: transparent; font-variant-numeric: normal; =
font-variant-east-asian: normal; font-variant-alternates: normal; =
vertical-align: baseline;" class=3D""><font face=3D"arial, sans-serif" =
class=3D"">After that will request another access token with =
refresh_token1 and provide the scope list as scope1 and scope2 (Narrow =
down scopes).</font></span></div><font face=3D"arial, sans-serif" =
class=3D""><br class=3D""></font><div style=3D"line-height: 1.2; =
margin-top: 0pt; margin-bottom: 0pt;" class=3D""><span =
style=3D"background-color: transparent; font-variant-numeric: normal; =
font-variant-east-asian: normal; font-variant-alternates: normal; =
vertical-align: baseline;" class=3D""><font face=3D"arial, sans-serif" =
class=3D"">Similarly, get another refresh token (refresh_token2) with =
the access token.</font></span></div><font face=3D"arial, sans-serif" =
class=3D""><br class=3D""></font><div style=3D"line-height: 1.2; =
margin-top: 0pt; margin-bottom: 0pt;" class=3D""><span =
style=3D"background-color: transparent; font-variant-numeric: normal; =
font-variant-east-asian: normal; font-variant-alternates: normal; =
vertical-align: baseline;" class=3D""><font face=3D"arial, sans-serif" =
class=3D"">Now if we request another access token with refresh_token2, =
we should be able to request scope3 also.</font></span></div><div =
style=3D"line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt;" =
class=3D""><span style=3D"background-color: transparent; =
font-variant-numeric: normal; font-variant-east-asian: normal; =
font-variant-alternates: normal; vertical-align: baseline;" =
class=3D""><font face=3D"arial, sans-serif" class=3D"">That means the =
refresh token will not be narrowed down instead only the access token =
will get narrowed =
down.</font></span></div></td></tr></tbody></table></div><br =
class=3D""></span></div><div class=3D"">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?</div><div class=3D""><br class=3D""></div><div =
class=3D"">Thanks &amp; Regards,</div><div =
class=3D"">Sachin</div></div><br class=3D""><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" target=3D"_blank" =
class=3D"">neil.e.madden@gmail.com</a>&gt; wrote:<br =
class=3D""></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 class=3D""><div class=3D"">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? =
Either way, the spec is pretty clear, regardless of what some vendor =
does.</div><div class=3D""><br class=3D""></div><div class=3D"">-- =
Neil<br class=3D""><div class=3D""><br class=3D""><blockquote =
type=3D"cite" class=3D""><div class=3D"">On 20 Feb 2024, at 19:26, =
Sachin Mamoru &lt;<a href=3D"mailto:sachinmamoru@gmail.com" =
target=3D"_blank" class=3D"">sachinmamoru@gmail.com</a>&gt; =
wrote:</div><br class=3D""><div class=3D""><div dir=3D"ltr" class=3D"">Hi =
Neil,<div class=3D""><br class=3D""></div><div class=3D"">Thanks for the =
clarification.</div><div class=3D"">But Curity has a different approach =
and they implemented it according to the concept of narrowing =
down&nbsp;the refresh token scopes.</div><div class=3D""><br =
class=3D""></div><div class=3D"">"<span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">The scope was originally&nbsp;</span><code =
style=3D"box-sizing:border-box;font-family:Roboto-Mono,Consolas,Monaco,&qu=
ot;Andale Mono&quot;,&quot;Ubuntu =
Mono&quot;,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-break:break-word;color:rgb(77,77,77)" class=3D"">read openid =
profile</code><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">&nbsp;and after refresh the access was reduced =
to&nbsp;</span><code =
style=3D"box-sizing:border-box;font-family:Roboto-Mono,Consolas,Monaco,&qu=
ot;Andale Mono&quot;,&quot;Ubuntu =
Mono&quot;,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-break:break-word;color:rgb(77,77,77)" class=3D"">read =
profile</code><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">&nbsp;(i.e., the&nbsp;</span><code =
style=3D"box-sizing:border-box;font-family:Roboto-Mono,Consolas,Monaco,&qu=
ot;Andale Mono&quot;,&quot;Ubuntu =
Mono&quot;,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-break:break-word;color:rgb(77,77,77)" =
class=3D"">access_token</code><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">&nbsp;now only has&nbsp;</span><code =
style=3D"box-sizing:border-box;font-family:Roboto-Mono,Consolas,Monaco,&qu=
ot;Andale Mono&quot;,&quot;Ubuntu =
Mono&quot;,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-break:break-word;color:rgb(77,77,77)" class=3D"">read =
profile</code><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">&nbsp;scope and any new tokens obtained using the refresh =
token&nbsp;</span><code =
style=3D"box-sizing:border-box;font-family:Roboto-Mono,Consolas,Monaco,&qu=
ot;Andale Mono&quot;,&quot;Ubuntu =
Mono&quot;,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-break:break-word;color:rgb(77,77,77)" =
class=3D"">daa38700-ba96-4ef1-8b30-5cb3527aae19</code><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">&nbsp;will have the same, reduced scope). Note =
that&nbsp;</span><em =
style=3D"box-sizing:border-box;font-family:Roboto-Regular,-apple-system,&q=
uot;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;color:rgb(77,77,77);font-size:1=
7.6px" class=3D"">increasing</em><span =
style=3D"color:rgb(77,77,77);font-family:Roboto-Regular,-apple-system,&quo=
t;system-ui&quot;,&quot;Segoe =
UI&quot;,Roboto,Helvetica,Arial,sans-serif;font-size:17.6px" =
class=3D"">&nbsp;the scope of access cannot be done in this way unless =
first reduced and increased back to the original =
scope.</span>"</div><div class=3D""><br class=3D""></div><div =
class=3D"">[1]&nbsp;<a =
href=3D"https://curity.io/resources/learn/refresh-tokens/#changing-scope-o=
f-access-token-on-refresh" target=3D"_blank" =
class=3D"">https://curity.io/resources/learn/refresh-tokens/#changing-scop=
e-of-access-token-on-refresh</a></div><div class=3D""><br =
class=3D""></div><div class=3D"">Thanks &amp; Regards,</div><div =
class=3D"">Sachin</div></div><br class=3D""><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"mailto:neil.e.madden@gmail.com" target=3D"_blank" =
class=3D"">neil.e.madden@gmail.com</a>&gt; wrote:<br =
class=3D""></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" class=3D""><div =
dir=3D"ltr" class=3D""></div><div dir=3D"ltr" class=3D""><br =
class=3D""></div><div dir=3D"ltr" class=3D""><br class=3D""><blockquote =
type=3D"cite" class=3D"">On 20 Feb 2024, at 11:02, Sachin Mamoru &lt;<a =
href=3D"mailto:sachinmamoru@gmail.com" target=3D"_blank" =
class=3D"">sachinmamoru@gmail.com</a>&gt; wrote:<br class=3D""><br =
class=3D""></blockquote></div><blockquote type=3D"cite" class=3D""><div =
dir=3D"ltr" class=3D"">=EF=BB=BF<div dir=3D"ltr" class=3D"">Hi Neil,<div =
class=3D""><br class=3D""></div><div class=3D"">Does that mean it should =
be identical to the narrowed scope request or the original request =
scope?</div></div></div></blockquote><div class=3D""><br =
class=3D""></div><div class=3D"">It says it has to be identical to the =
scope of the existing refresh token in the request, not the scope =
specified in the request. So effectively you can never downscope a =
refresh token in this way. Whatever scope you specify, any RT returned =
must always retain the original scope.&nbsp;</div><div class=3D""><br =
class=3D""></div><div class=3D"">(There are other ways to downscope a =
RT, eg ForgeRock=E2=80=99s macaroons allow you to attenuate the scope if =
you wish).&nbsp;</div><div class=3D""><br class=3D""></div><div =
class=3D"">=E2=80=94 Neil</div><br class=3D""><blockquote type=3D"cite" =
class=3D""><div dir=3D"ltr" class=3D""><br class=3D""><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:sachinmamoru@gmail.com" target=3D"_blank" =
class=3D"">sachinmamoru@gmail.com</a>&gt; wrote:<br =
class=3D""></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" class=3D""><br =
class=3D""></div><br class=3D""><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.madden@gmail.com" target=3D"_blank" =
class=3D"">neil.e.madden@gmail.com</a>&gt; wrote:<br =
class=3D""></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" class=3D""><div =
dir=3D"ltr" class=3D""></div><div dir=3D"ltr" class=3D""><br =
class=3D""></div><div dir=3D"ltr" class=3D""><blockquote type=3D"cite" =
class=3D"">On 20 Feb 2024, at 06:44, Sachin Mamoru &lt;<a =
href=3D"mailto:sachinmamoru@gmail.com" target=3D"_blank" =
class=3D"">sachinmamoru@gmail.com</a>&gt; wrote:<br class=3D""><br =
class=3D""></blockquote></div><blockquote type=3D"cite" class=3D""><div =
dir=3D"ltr" class=3D"">=EF=BB=BF<div dir=3D"ltr" class=3D"">Hi All,<div =
class=3D""><br class=3D""></div><div class=3D""><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">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;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">Then will =
receive a refresh token (refresh_token1) with the access =
token.</font></span></div><font face=3D"arial, sans-serif" class=3D""><br =
class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">After that =
will request another access token with refresh_token1 and provide 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" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">Similarly, =
get another refresh token (refresh_token2) with the access =
token.</font></span></div><font face=3D"arial, sans-serif" class=3D""><br =
class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">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.<br class=3D""></font></span></div><font face=3D"arial, sans-serif" =
class=3D""><br class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">But in the =
specification, didn't able to find anything related to narrow-down =
scopes with refresh token.</font></span></div><font face=3D"arial, =
sans-serif" class=3D""><br class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;text-decoration-line=
:underline;vertical-align:baseline" class=3D""><font face=3D"arial, =
sans-serif" class=3D"">=46rom Spec</font></span></div><font face=3D"arial,=
 sans-serif" class=3D""><br class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><font face=3D"arial, sans-serif" class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D"">1.5.&nbsp; Refresh Token -&nbsp;</span><span =
style=3D"background-color:transparent" class=3D"">Refresh tokens are =
issued to the client by the authorization server and =
are&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">used to obtain a new access token when the current access =
token&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">becomes invalid or expires or to obtain additional access =
tokens&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">with identical or narrower scope (access tokens may have a =
shorter&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">lifetime and fewer permissions than authorized by the =
resource&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">owner).</span></font></div><font face=3D"arial, sans-serif" =
class=3D""><br class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D""><font face=3D"arial, sans-serif" class=3D"">6.&nbsp; =
Refreshing an Access Token</font></span></div><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><font face=3D"arial, sans-serif" class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine" class=3D"">The scope of the access request as described =
by&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">Section 3.3.&nbsp; The requested scope MUST NOT include any =
scope&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">not originally granted by the resource owner, and if omitted =
is&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">treated as equal to the scope originally granted by =
the&nbsp;</span><span style=3D"background-color:transparent" =
class=3D"">resource owner.</span></font></div><font face=3D"arial, =
sans-serif" class=3D""><br class=3D""></font><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" class=3D""><a =
href=3D"https://datatracker.ietf.org/doc/html/rfc6749" =
style=3D"text-decoration-line:none" target=3D"_blank" class=3D""><span =
style=3D"background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;font-variant-alternates:normal;text-decoration-line=
:underline;vertical-align:baseline" class=3D""><font face=3D"arial, =
sans-serif" =
class=3D"">https://datatracker.ietf.org/doc/html/rfc6749</font></span></a>=
</div><div style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><font face=3D"arial, sans-serif" class=3D""><br =
class=3D""></font></div><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" =
class=3D""><font face=3D"arial, sans-serif" class=3D"">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 =
the refresh token authorised scopes based on the requested =
ones.</font></div><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" class=3D""><br =
class=3D""></div><div =
style=3D"line-height:1.2;margin-top:0pt;margin-bottom:0pt" class=3D"">What=
 should be the correct behaviour?<br class=3D"">narrow-down scope =
refresh token should also be able to request access token with original =
scope list?<font face=3D"arial, sans-serif" class=3D""><br =
class=3D""></font></div></div></div></div></blockquote><div class=3D""><br=
 class=3D""></div><div class=3D"">Also from section 6:</div><div =
class=3D""><br class=3D""></div><div class=3D""><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)" class=3D"">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;margin-bottom:0px;overflo=
w:visible;padding:0px;width:80ch;color:rgb(32,37,42)" class=3D""><br =
class=3D""></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)" class=3D""><br =
class=3D""></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)" class=3D""><br =
class=3D""></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)" class=3D""><br =
class=3D""></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)" class=3D"">=E2=80=94=
 Neil</pre></div></div></blockquote></div><br clear=3D"all" =
class=3D""><div class=3D""><br class=3D""></div><span =
class=3D"gmail_signature_prefix">-- </span><br class=3D""><div dir=3D"ltr"=
 class=3D"gmail_signature"><div dir=3D"ltr" class=3D""><div dir=3D"ltr" =
class=3D""><table style=3D"direction:ltr;border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"font-size:0px;height:12px;line-height:0" class=3D""></td></tr><tr=
 class=3D""><td class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;font-family:Arial;line-height:1.15" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;width:65px" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px 10px 0px 0px" =
class=3D""><img =
src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea7=
62db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=3D"65" =
style=3D"width: 65px; vertical-align: initial; border-radius: 0px; =
display: block;" class=3D""></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" class=3D"">&nbsp;</td><td =
style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:top" =
valign=3D"top" class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:1.2;padding:0.01px 0.01px 12px" =
class=3D""><span =
style=3D"font-family:Arial;text-transform:initial;font-weight:bold" =
class=3D""><span style=3D"color:rgb(100,100,100);font-size:16px" =
class=3D""> Sachin Mamoru </span></span><br class=3D""><span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> Software =
Engineer, </span> <span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> =
WSO2</span></td></tr><tr class=3D""><td =
style=3D"padding:0.01px;line-height:0" class=3D""><table cellpadding=3D"0"=
 cellspacing=3D"0" style=3D"border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"tel:+94771292681" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
+94771292681</span></a></td></tr></tbody></table></td><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0px 4px" class=3D""><span =
style=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb(33,33=
,33);vertical-align:2px" class=3D""> | </span></td><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"https://sachinmamoru.me/" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru.me&nbsp;</span></a></td></tr></tbody></table></td></tr></tbod=
y></table></td></tr><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:0;padding:0.01px 0.01px 6px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"mailto:sachinmamoru@gmail.com" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru@gmail.com&nbsp;</span></a></td></tr></tbody></table></td></tr=
></tbody></table></td></tr></tbody></table></td></tr><tr class=3D""><td =
style=3D"padding:12px 0.01px 0.01px" class=3D""><table cellpadding=3D"0" =
cellspacing=3D"0" style=3D"border-collapse:collapse;width:100%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" =
class=3D""><tbody class=3D""><tr class=3D""><td align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://www.linkedin.com/in/sachin-mamoru/" =
target=3D"_blank" class=3D""><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" class=3D""></a></td><td =
align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank" =
class=3D""><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" =
class=3D""></a></td></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%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"line-height:0" =
class=3D""></td></tr></tbody></table></td></tr></tbody></table><br =
class=3D""></div><img =
src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D"" =
class=3D""></div></div>
</blockquote></div><br clear=3D"all" class=3D""><div class=3D""><br =
class=3D""></div><span class=3D"gmail_signature_prefix">-- </span><br =
class=3D""><div dir=3D"ltr" class=3D"gmail_signature"><div dir=3D"ltr" =
class=3D""><div dir=3D"ltr" class=3D""><table =
style=3D"direction:ltr;border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td =
style=3D"font-size:0px;height:12px;line-height:0" class=3D""></td></tr><tr=
 class=3D""><td class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;font-family:Arial;line-height:1.15" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;width:65px" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px 10px 0px 0px" =
class=3D""><img =
src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea7=
62db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=3D"65" =
style=3D"width: 65px; vertical-align: initial; border-radius: 0px; =
display: block;" class=3D""></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" class=3D"">&nbsp;</td><td =
style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:top" =
valign=3D"top" class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:1.2;padding:0.01px 0.01px 12px" =
class=3D""><span =
style=3D"font-family:Arial;text-transform:initial;font-weight:bold" =
class=3D""><span style=3D"color:rgb(100,100,100);font-size:16px" =
class=3D""> Sachin Mamoru </span></span><br class=3D""><span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> Software =
Engineer, </span> <span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> =
WSO2</span></td></tr><tr class=3D""><td =
style=3D"padding:0.01px;line-height:0" class=3D""><table cellpadding=3D"0"=
 cellspacing=3D"0" style=3D"border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"tel:+94771292681" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
+94771292681</span></a></td></tr></tbody></table></td><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0px 4px" class=3D""><span =
style=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb(33,33=
,33);vertical-align:2px" class=3D""> | </span></td><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"https://sachinmamoru.me/" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru.me&nbsp;</span></a></td></tr></tbody></table></td></tr></tbod=
y></table></td></tr><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:0;padding:0.01px 0.01px 6px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"mailto:sachinmamoru@gmail.com" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru@gmail.com&nbsp;</span></a></td></tr></tbody></table></td></tr=
></tbody></table></td></tr></tbody></table></td></tr><tr class=3D""><td =
style=3D"padding:12px 0.01px 0.01px" class=3D""><table cellpadding=3D"0" =
cellspacing=3D"0" style=3D"border-collapse:collapse;width:100%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" =
class=3D""><tbody class=3D""><tr class=3D""><td align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://www.linkedin.com/in/sachin-mamoru/" =
target=3D"_blank" class=3D""><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" class=3D""></a></td><td =
align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank" =
class=3D""><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" =
class=3D""></a></td></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%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"line-height:0" =
class=3D""></td></tr></tbody></table></td></tr></tbody></table><br =
class=3D""></div><img =
src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D"" =
class=3D""></div></div>
</div></blockquote></div></blockquote></div><br clear=3D"all" =
class=3D""><div class=3D""><br class=3D""></div><span =
class=3D"gmail_signature_prefix">-- </span><br class=3D""><div dir=3D"ltr"=
 class=3D"gmail_signature"><div dir=3D"ltr" class=3D""><div dir=3D"ltr" =
class=3D""><table style=3D"direction:ltr;border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"font-size:0px;height:12px;line-height:0" class=3D""></td></tr><tr=
 class=3D""><td class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;font-family:Arial;line-height:1.15" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;width:65px" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px 10px 0px 0px" =
class=3D""><img =
src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea7=
62db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=3D"65" =
style=3D"width: 65px; vertical-align: initial; border-radius: 0px; =
display: block;" class=3D""></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" class=3D"">&nbsp;</td><td =
style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:top" =
valign=3D"top" class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:1.2;padding:0.01px 0.01px 12px" =
class=3D""><span =
style=3D"font-family:Arial;text-transform:initial;font-weight:bold" =
class=3D""><span style=3D"color:rgb(100,100,100);font-size:16px" =
class=3D""> Sachin Mamoru </span></span><br class=3D""><span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> Software =
Engineer, </span> <span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> =
WSO2</span></td></tr><tr class=3D""><td =
style=3D"padding:0.01px;line-height:0" class=3D""><table cellpadding=3D"0"=
 cellspacing=3D"0" style=3D"border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"tel:+94771292681" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
+94771292681</span></a></td></tr></tbody></table></td><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0px 4px" class=3D""><span =
style=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb(33,33=
,33);vertical-align:2px" class=3D""> | </span></td><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"https://sachinmamoru.me/" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru.me&nbsp;</span></a></td></tr></tbody></table></td></tr></tbod=
y></table></td></tr><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:0;padding:0.01px 0.01px 6px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"mailto:sachinmamoru@gmail.com" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru@gmail.com&nbsp;</span></a></td></tr></tbody></table></td></tr=
></tbody></table></td></tr></tbody></table></td></tr><tr class=3D""><td =
style=3D"padding:12px 0.01px 0.01px" class=3D""><table cellpadding=3D"0" =
cellspacing=3D"0" style=3D"border-collapse:collapse;width:100%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" =
class=3D""><tbody class=3D""><tr class=3D""><td align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://www.linkedin.com/in/sachin-mamoru/" =
target=3D"_blank" class=3D""><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" class=3D""></a></td><td =
align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank" =
class=3D""><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" =
class=3D""></a></td></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%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"line-height:0" =
class=3D""></td></tr></tbody></table></td></tr></tbody></table><br =
class=3D""></div><img =
src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D"" =
class=3D""></div></div>
</div></blockquote></div><br class=3D""></div></div></blockquote></div><br=
 clear=3D"all" class=3D""><div class=3D""><br class=3D""></div><span =
class=3D"gmail_signature_prefix">-- </span><br class=3D""><div dir=3D"ltr"=
 class=3D"gmail_signature"><div dir=3D"ltr" class=3D""><div dir=3D"ltr" =
class=3D""><table style=3D"direction:ltr;border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"font-size:0px;height:12px;line-height:0" class=3D""></td></tr><tr=
 class=3D""><td class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse: collapse; font-family: Arial; line-height: =
1.15;" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;width:65px" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px 10px 0px 0px" =
class=3D""><img =
src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea7=
62db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=3D"65" =
style=3D"width: 65px; vertical-align: initial; border-radius: 0px; =
display: block;" class=3D""></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" class=3D"">&nbsp;</td><td =
style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:top" =
valign=3D"top" class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:1.2;padding:0.01px 0.01px 12px" =
class=3D""><span =
style=3D"font-family:Arial;text-transform:initial;font-weight:bold" =
class=3D""><span style=3D"color:rgb(100,100,100);font-size:16px" =
class=3D""> Sachin Mamoru </span></span><br class=3D""><span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> Software =
Engineer, </span> <span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> =
WSO2</span></td></tr><tr class=3D""><td =
style=3D"padding:0.01px;line-height:0" class=3D""><table cellpadding=3D"0"=
 cellspacing=3D"0" style=3D"border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"tel:+94771292681" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
+94771292681</span></a></td></tr></tbody></table></td><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0px 4px" class=3D""><span =
style=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb(33,33=
,33);vertical-align:2px" class=3D""> | </span></td><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"https://sachinmamoru.me/" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru.me&nbsp;</span></a></td></tr></tbody></table></td></tr></tbod=
y></table></td></tr><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:0;padding:0.01px 0.01px 6px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"mailto:sachinmamoru@gmail.com" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru@gmail.com&nbsp;</span></a></td></tr></tbody></table></td></tr=
></tbody></table></td></tr></tbody></table></td></tr><tr class=3D""><td =
style=3D"padding:12px 0.01px 0.01px" class=3D""><table cellpadding=3D"0" =
cellspacing=3D"0" style=3D"border-collapse:collapse;width:100%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" =
class=3D""><tbody class=3D""><tr class=3D""><td align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://www.linkedin.com/in/sachin-mamoru/" =
target=3D"_blank" class=3D""><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" class=3D""></a></td><td =
align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank" =
class=3D""><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" =
class=3D""></a></td></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%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"line-height:0" =
class=3D""></td></tr></tbody></table></td></tr></tbody></table><br =
class=3D""></div><img =
src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D"" =
class=3D""></div></div>
</blockquote></div><br clear=3D"all" class=3D""><div class=3D""><br =
class=3D""></div><span class=3D"gmail_signature_prefix">-- </span><br =
class=3D""><div dir=3D"ltr" class=3D"gmail_signature"><div dir=3D"ltr" =
class=3D""><div dir=3D"ltr" class=3D""><table =
style=3D"direction:ltr;border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td =
style=3D"font-size:0px;height:12px;line-height:0" class=3D""></td></tr><tr=
 class=3D""><td class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse: collapse; font-family: Arial; line-height: =
1.15;" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;width:65px" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px 10px 0px 0px" =
class=3D""><img =
src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205-f3ea7=
62db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=3D"65" =
style=3D"width: 65px; vertical-align: initial; border-radius: 0px; =
display: block;" class=3D""></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" class=3D"">&nbsp;</td><td =
style=3D"padding:0.01px 0.01px 0.01px 14px;vertical-align:top" =
valign=3D"top" class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:1.2;padding:0.01px 0.01px 12px" =
class=3D""><span =
style=3D"font-family:Arial;text-transform:initial;font-weight:bold" =
class=3D""><span style=3D"color:rgb(100,100,100);font-size:16px" =
class=3D""> Sachin Mamoru </span></span><br class=3D""><span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> Software =
Engineer, </span> <span =
style=3D"font-size:13px;letter-spacing:0px;font-family:Arial;text-transfor=
m:initial;font-weight:bold;color:rgb(100,100,100)" class=3D""> =
WSO2</span></td></tr><tr class=3D""><td =
style=3D"padding:0.01px;line-height:0" class=3D""><table cellpadding=3D"0"=
 cellspacing=3D"0" style=3D"border-collapse:collapse" class=3D""><tbody =
class=3D""><tr class=3D""><td style=3D"padding:0.01px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse" =
class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"tel:+94771292681" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
+94771292681</span></a></td></tr></tbody></table></td><td =
style=3D"line-height:0;padding:0.01px 0.01px 6px" class=3D""><table =
cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0px 4px" class=3D""><span =
style=3D"font-family:Arial;font-weight:bold;font-size:12px;color:rgb(33,33=
,33);vertical-align:2px" class=3D""> | </span></td><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"https://sachinmamoru.me/" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru.me&nbsp;</span></a></td></tr></tbody></table></td></tr></tbod=
y></table></td></tr><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse" class=3D""><tbody class=3D""><tr =
class=3D""><td style=3D"line-height:0;padding:0.01px 0.01px 6px" =
class=3D""><table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"border-collapse:collapse;line-height:14px;font-size:12px;font-fam=
ily:Arial" class=3D""><tbody class=3D""><tr class=3D""><td =
style=3D"padding:0.01px;font-family:Arial;font-size:12px" class=3D""><a =
href=3D"mailto:sachinmamoru@gmail.com" =
style=3D"text-decoration:unset;font-size:12px;font-family:Arial" =
target=3D"_blank" class=3D""><span =
style=3D"line-height:1.2;color:rgb(33,33,33);font-family:Arial;white-space=
:nowrap;font-size:12px" class=3D""> =
sachinmamoru@gmail.com&nbsp;</span></a></td></tr></tbody></table></td></tr=
></tbody></table></td></tr></tbody></table></td></tr><tr class=3D""><td =
style=3D"padding:12px 0.01px 0.01px" class=3D""><table cellpadding=3D"0" =
cellspacing=3D"0" style=3D"border-collapse:collapse;width:100%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"padding:0.01px" =
class=3D""><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" =
class=3D""><tbody class=3D""><tr class=3D""><td align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://www.linkedin.com/in/sachin-mamoru/" =
target=3D"_blank" class=3D""><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" class=3D""></a></td><td =
align=3D"left" =
style=3D"padding-right:6px;text-align:center;padding-top:0px" =
class=3D""><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank" =
class=3D""><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" =
class=3D""></a></td></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%" =
class=3D""><tbody class=3D""><tr class=3D""><td style=3D"line-height:0" =
class=3D""></td></tr></tbody></table></td></tr></tbody></table><br =
class=3D""></div><img =
src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=3D"" =
class=3D""></div></div>
</div></blockquote></div><br class=3D""></body></html>=

--Apple-Mail=_2A5C5C22-34E1-44AB-85C1-725C58BBC6A7--

