From sachinmamoru@gmail.com  Tue Feb 20 03:02:22 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 F0903C14F69F
 for <oauth@ietfa.amsl.com>; Tue, 20 Feb 2024 03:02:22 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.084
X-Spam-Level: 
X-Spam-Status: No, score=-7.084 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_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_BLOCKED=0.001,
 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 FHywvPiCy0aE for <oauth@ietfa.amsl.com>;
 Tue, 20 Feb 2024 03:02:18 -0800 (PST)
Received: from mail-yb1-xb32.google.com (mail-yb1-xb32.google.com
 [IPv6:2607:f8b0:4864:20::b32])
 (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 40177C14F5FE
 for <oauth@ietf.org>; Tue, 20 Feb 2024 03:02:18 -0800 (PST)
Received: by mail-yb1-xb32.google.com with SMTP id
 3f1490d57ef6-dc74e33fe1bso4978864276.0
 for <oauth@ietf.org>; Tue, 20 Feb 2024 03:02:18 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1708426937; x=1709031737; 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=w+7zMgqAyItCacZ+rpWVckCpMdva7AECksFuO3v/2yo=;
 b=lDf/V2MfIXWzTvwx2laWJqM17H16ZG/Z78wzncby27X/sVhNqFwbIXxPgQV/PQZrVT
 Zn/4Kp67zmBE4rnjm/0JDL5oGjqemgy/Bh4aVVc+7iYNVhorvU19TWOqzIvRJ6jzJ/Ji
 Zc1AWqR2MNP6co9Z8TuWSnUQvI/yNHHdsonimG497wpSHs2LV2uUtnTnuFZkYhsY2yDN
 528NCU3FLgSGWKcmIz5AEsDtLN9UsL9vXpxP9hpa1Z2OWVt+1P2twjh0G8uwci7Xm3Rt
 k3XdFv4l51I2EiRGbwztSKmUG6kHgjtZnp8V8p9H9PytHKHdb5Tp0jcSbbav3f/bQijS
 BJaA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1708426937; x=1709031737;
 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=w+7zMgqAyItCacZ+rpWVckCpMdva7AECksFuO3v/2yo=;
 b=pGKWP1NL6M+8Dv4Rke5AnzntKLY2JNitqRMa8yKRAvp9S5EgfY27juP6JyGRa6/Vgi
 k9uB1x/3n5+iw+RrmyPmR34K5Dcr7vPZe/JXC8UurdLuFZXfrMk7eYj1XsJSGZlfF3OZ
 qLQFc/fROAQ0IoQF+KqfHGIao/LY+u3WxD2J2vlGjDW5wAh0eL3Ho4Kv6fI9jEwejIgO
 YEHMKW3RfJOMzhKfZjTfMqqgV0xdYJXNsdKR16W1WCq+7yLmvAk5ivHObLqOdtY53p4o
 n53eUUve6lubdQ5/6hERPIqR+ZDQ1W8yZ8Lipb+sDd0SQ4WldRAkuUCssodLi0DhU061
 WdRQ==
X-Gm-Message-State: AOJu0YwuWKefdooYsk8PsqDQBl1tARgaAnMJVj0qV8LQbXownIbmopPk
 Pev1PzTf4aHduQ2x/jYP3q9dy6sUUGX/G/APDLwi1qmMYyhyXShUERrME7HyLYqU2buQ2gmKvZP
 W/ekN63fvPb5M3CzngL7fu5cwUU0=
X-Google-Smtp-Source: AGHT+IFdWaOP3IH6QvWfpQyp4TjULN4S6yXWD9q8fPfs4LLw+dWblnzHiG2uwQ8eEDnH+HA9uLQ/LLy0nMYyBPj1ZQk=
X-Received: by 2002:a05:6902:1b86:b0:dcc:1449:71ea with SMTP id
 ei6-20020a0569021b8600b00dcc144971eamr12893694ybb.50.1708426936975; Tue, 20
 Feb 2024 03:02:16 -0800 (PST)
MIME-Version: 1.0
References: <CAD=XBCqr61N_4rz4GVD_19QUO+q3LrzeO-iQ7MGCUx7fMVxy=Q@mail.gmail.com>
 <9D9E6142-0C87-4140-BB9F-AE3B89A44BCB@gmail.com>
 <CAD=XBCovNxw5YsxxXTyShh64vp_GC1Jn=FhW00bwQWMVBC+4bw@mail.gmail.com>
In-Reply-To: <CAD=XBCovNxw5YsxxXTyShh64vp_GC1Jn=FhW00bwQWMVBC+4bw@mail.gmail.com>
From: Sachin Mamoru <sachinmamoru@gmail.com>
Date: Tue, 20 Feb 2024 16:32:05 +0530
Message-ID: <CAD=XBCog_o8GzpDMTYKvvi=2mneM0nW0vfCc=FubtOFNF5WM=A@mail.gmail.com>
To: Neil Madden <neil.e.madden@gmail.com>
Cc: oauth@ietf.org, janak@wso2.com, thilinasenarath97@gmail.com
Content-Type: multipart/alternative; boundary="000000000000b407830611ce2413"
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/l2ctcN0Q1WkrIv8nKxoqxKxWBNo>
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: Tue, 20 Feb 2024 11:02:23 -0000

--000000000000b407830611ce2413
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi Neil,

Does that mean it should be identical to the narrowed scope request or the
original request scope?

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, whe=
re
>> it updates the refresh token authorised scopes based on the requested on=
es.
>>
>>
>> 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 the
>>    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>
>
>

--=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>

--000000000000b407830611ce2413
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Neil,<div><br></div><div>Does that mean it should be id=
entical to the narrowed scope request or the original request scope?</div><=
/div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">O=
n Tue, 20 Feb 2024 at 16:31, Sachin Mamoru &lt;<a href=3D"mailto:sachinmamo=
ru@gmail.com">sachinmamoru@gmail.com</a>&gt; wrote:<br></div><blockquote cl=
ass=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"><br></div><br><div cla=
ss=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, 20 Feb 202=
4 at 12:23, Neil Madden &lt;<a href=3D"mailto:neil.e.madden@gmail.com" targ=
et=3D"_blank">neil.e.madden@gmail.com</a>&gt; wrote:<br></div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex"><div dir=3D"auto"><div dir=3D"ltr"></d=
iv><div dir=3D"ltr"><br></div><div dir=3D"ltr"><blockquote type=3D"cite">On=
 20 Feb 2024, at 06:44, Sachin Mamoru &lt;<a href=3D"mailto:sachinmamoru@gm=
ail.com" target=3D"_blank">sachinmamoru@gmail.com</a>&gt; wrote:<br><br></b=
lockquote></div><blockquote type=3D"cite"><div dir=3D"ltr">=EF=BB=BF<div di=
r=3D"ltr">Hi All,<div><br></div><div><p dir=3D"ltr" style=3D"line-height:1.=
2;margin-top:0pt;margin-bottom:0pt"><span style=3D"color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;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><p dir=3D"ltr" style=3D"line-height:1.2;=
margin-top:0pt;margin-bottom:0pt"><span style=3D"color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;font-variant-alternates:normal;vertical-align:baseline"><font face=3D"a=
rial, sans-serif">Then will receive a refresh token (refresh_token1) with t=
he access token.</font></span></p><font face=3D"arial, sans-serif"><br></fo=
nt><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:norm=
al;vertical-align:baseline"><font face=3D"arial, sans-serif">After that wil=
l request another access token with refresh_token1 and provide the scope li=
st as scope1 and scope2 (Narrow down scopes).</font></span></p><p dir=3D"lt=
r" 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:norm=
al;font-variant-east-asian:normal;font-variant-alternates:normal;vertical-a=
lign:baseline"><font face=3D"arial, sans-serif">Similarly, get another refr=
esh token (refresh_token2) with the access token.</font></span></p><font fa=
ce=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);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;font-variant-alternates:normal;vertical-align:baseline"><font face=3D"=
arial, sans-serif">Now if we request another access token with refresh_toke=
n2, we cannot request scope3, instead, we can either request both scope1 an=
d scope2 or one of them.<br></font></span></p><font face=3D"arial, sans-ser=
if"><br></font><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alt=
ernates:normal;vertical-align:baseline"><font face=3D"arial, sans-serif">Bu=
t in the specification, didn&#39;t able to find anything related to narrow-=
down scopes with refresh 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;ma=
rgin-bottom:0pt"><span style=3D"color:rgb(0,0,0);background-color:transpare=
nt;font-variant-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></p><font face=3D"ar=
ial, sans-serif"><br></font><p dir=3D"ltr" style=3D"line-height:1.2;margin-=
top:0pt;margin-bottom:0pt"><font face=3D"arial, sans-serif"><span style=3D"=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;font-variant-alternates:normal;vertical-align=
:baseline">1.5.=C2=A0 Refresh Token -=C2=A0</span><span style=3D"background=
-color:transparent;color:rgb(0,0,0)">Refresh tokens are issued to the clien=
t by the authorization server and are=C2=A0</span><span style=3D"background=
-color:transparent;color:rgb(0,0,0)">used to obtain a new access token when=
 the current access token=C2=A0</span><span style=3D"background-color:trans=
parent;color:rgb(0,0,0)">becomes invalid or expires or to obtain additional=
 access tokens=C2=A0</span><span style=3D"background-color:transparent;colo=
r:rgb(0,0,0)">with identical or narrower scope (access tokens may have a sh=
orter=C2=A0</span><span style=3D"background-color:transparent;color:rgb(0,0=
,0)">lifetime and fewer permissions than authorized by the resource=C2=A0</=
span><span style=3D"background-color:transparent;color:rgb(0,0,0)">owner).<=
/span></font></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;f=
ont-variant-east-asian:normal;font-variant-alternates:normal;vertical-align=
:baseline"><font face=3D"arial, sans-serif">6.=C2=A0 Refreshing an Access T=
oken</font></span></p><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0p=
t;margin-bottom:0pt"><font face=3D"arial, sans-serif"><span style=3D"color:=
rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;font-variant-alternates:normal;vertical-align:basel=
ine">The scope of the access request as described by=C2=A0</span><span styl=
e=3D"background-color:transparent;color:rgb(0,0,0)">Section 3.3.=C2=A0 The =
requested scope MUST NOT include any scope=C2=A0</span><span style=3D"backg=
round-color:transparent;color:rgb(0,0,0)">not originally granted by the res=
ource owner, and if omitted is=C2=A0</span><span style=3D"background-color:=
transparent;color:rgb(0,0,0)">treated as equal to the scope originally gran=
ted by the=C2=A0</span><span style=3D"background-color:transparent;color:rg=
b(0,0,0)">resource owner.</span></font></p><font face=3D"arial, sans-serif"=
><br></font><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0pt;margin-b=
ottom:0pt"><a href=3D"https://datatracker.ietf.org/doc/html/rfc6749" style=
=3D"text-decoration-line:none" target=3D"_blank"><span style=3D"background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;font-variant-alternates:normal;text-decoration-line:underline;vertical-al=
ign:baseline"><font face=3D"arial, sans-serif">https://datatracker.ietf.org=
/doc/html/rfc6749</font></span></a></p><p dir=3D"ltr" style=3D"line-height:=
1.2;margin-top:0pt;margin-bottom:0pt"><font face=3D"arial, sans-serif"><br>=
</font></p><p dir=3D"ltr" style=3D"line-height:1.2;margin-top:0pt;margin-bo=
ttom: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 t=
he principle of least privilege, where it updates the refresh token authori=
sed scopes based on the requested ones.</font></p><p dir=3D"ltr" style=3D"l=
ine-height:1.2;margin-top:0pt;margin-bottom:0pt"><br></p><p dir=3D"ltr" sty=
le=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 t=
o request access token with original scope list?<font face=3D"arial, sans-s=
erif"><br></font></p></div></div></div></blockquote><div><br></div><div>Als=
o from section 6:</div><div><br></div><div><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)">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;color:rgb(0=
,0,0)"><tbody><tr><td style=3D"vertical-align:top;padding:0.01px 14px 0.01p=
x 0.01px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collap=
se:collapse;width:65px"><tbody><tr><td style=3D"padding:0.01px 10px 0px 0px=
"><img src=3D"https://d36urhup7zbd7q.cloudfront.net/29e6c216-f94e-4bc3-8205=
-f3ea762db0d5/profile.format_png.resize_200x.jpeg" height=3D"auto" width=3D=
"65" style=3D"width: 65px; vertical-align: initial; border-radius: 0px; dis=
play: block;"></td></tr></tbody></table></td><td height=3D"1" width=3D"0" s=
tyle=3D"width:0px;padding:0.01px;border-right:1px solid rgb(189,189,189);he=
ight:1px;font-size:1pt">=C2=A0</td><td style=3D"padding:0.01px 0.01px 0.01p=
x 14px;vertical-align:top" valign=3D"top"><table cellpadding=3D"0" cellspac=
ing=3D"0" style=3D"border-collapse:collapse"><tbody><tr><td style=3D"line-h=
eight:1.2;padding:0.01px 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:1=
3px;letter-spacing:0px;font-family:Arial;text-transform:initial;font-weight=
:bold;color:rgb(100,100,100)"> Software Engineer, </span> <span style=3D"fo=
nt-size:13px;letter-spacing:0px;font-family:Arial;text-transform:initial;fo=
nt-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"><tbody><tr><td style=3D"padding:0.01px=
"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:colla=
pse"><tbody><tr><td style=3D"line-height:0;padding:0.01px 0.01px 6px"><tabl=
e cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;lin=
e-height:14px;font-size:12px;font-family:Arial"><tbody><tr><td style=3D"pad=
ding: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:Aria=
l;white-space:nowrap;font-size:12px"> +94771292681</span></a></td></tr></tb=
ody></table></td><td style=3D"line-height:0;padding:0.01px 0.01px 6px"><tab=
le cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;li=
ne-height:14px;font-size:12px;font-family:Arial"><tbody><tr><td style=3D"pa=
dding: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"pa=
dding:0.01px;font-family:Arial;font-size:12px"><a href=3D"https://sachinmam=
oru.me" style=3D"text-decoration:unset;font-size:12px;font-family:Arial" ta=
rget=3D"_blank"><span style=3D"line-height:1.2;color:rgb(33,33,33);font-fam=
ily: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 st=
yle=3D"padding:0.01px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"=
border-collapse:collapse"><tbody><tr><td style=3D"line-height:0;padding:0.0=
1px 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;font-size=
:12px;font-family:Arial" target=3D"_blank"><span style=3D"line-height:1.2;c=
olor:rgb(33,33,33);font-family:Arial;white-space:nowrap;font-size:12px"> sa=
chinmamoru@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"bor=
der-collapse:collapse;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" style=3D"padding-right:6px;text-align:center;padding-top:0px"><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/ld/0077b=
5/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:center;padd=
ing-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></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbo=
dy></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 sty=
le=3D"line-height:0"></td></tr></tbody></table></td></tr></tbody></table><b=
r></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;color:rgb(0,0,0)"=
><tbody><tr><td style=3D"vertical-align:top;padding:0.01px 14px 0.01px 0.01=
px"><table cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:col=
lapse;width:65px"><tbody><tr><td style=3D"padding:0.01px 10px 0px 0px"><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" s=
tyle=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 14=
px;vertical-align:top" valign=3D"top"><table cellpadding=3D"0" cellspacing=
=3D"0" style=3D"border-collapse:collapse"><tbody><tr><td style=3D"line-heig=
ht:1.2;padding:0.01px 0.01px 12px"><span style=3D"font-family:Arial;text-tr=
ansform:initial;font-weight:bold"><span style=3D"color:rgb(100,100,100);fon=
t-size:16px"> Sachin Mamoru </span></span><br><span style=3D"font-size:13px=
;letter-spacing:0px;font-family:Arial;text-transform:initial;font-weight:bo=
ld;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 style=3D"=
padding:0.01px;line-height:0"><table cellpadding=3D"0" cellspacing=3D"0" st=
yle=3D"border-collapse:collapse"><tbody><tr><td style=3D"padding:0.01px"><t=
able cellpadding=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 ce=
llpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;line-he=
ight: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" 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"> +94771292681</span></a></td></tr></tbody>=
</table></td><td style=3D"line-height:0;padding:0.01px 0.01px 6px"><table c=
ellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse:collapse;line-h=
eight:14px;font-size:12px;font-family:Arial"><tbody><tr><td style=3D"paddin=
g: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"paddin=
g:0.01px;font-family:Arial;font-size: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-height: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 cellpadding=3D"0" cellspacing=3D"0" style=3D"bor=
der-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-col=
lapse:collapse;line-height:14px;font-size:12px;font-family:Arial"><tbody><t=
r><td style=3D"padding:0.01px;font-family:Arial;font-size:12px"><a href=3D"=
mailto:sachinmamoru@gmail.com" style=3D"text-decoration:unset;font-size:12p=
x;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"> sachin=
mamoru@gmail.com=C2=A0</span></a></td></tr></tbody></table></td></tr></tbod=
y></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%"><tbody><tr><td style=3D"padding:0.01px"><tabl=
e border=3D"0" cellpadding=3D"0" cellspacing=3D"0"><tbody><tr><td align=3D"=
left" style=3D"padding-right:6px;text-align:center;padding-top:0px"><a href=
=3D"https://www.linkedin.com/in/sachin-mamoru/" target=3D"_blank"><img widt=
h=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"left" style=3D"padding-right:6px;text-align:center;padding-=
top:0px"><a href=3D"https://twitter.com/MamoruSachin" target=3D"_blank"><im=
g width=3D"25" height=3D"25" src=3D"https://cdn.gifo.wisestamp.com/s/tw/55a=
cee/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" 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></di=
v><img src=3D"https://tracy.srv.wisestamp.com/px/5434123278745600.png" alt=
=3D""></div></div>

--000000000000b407830611ce2413--

