firebase පොඩි ඇප් වලට ලේසියි
හැබැයි ලොකු ඇප්ස් වලට ෆයර්බේස් වලින් API හදනවා හරිම අඩුයි
සමහර ෆයර්බේස් සර්විස් නං ලොකු ඇප් වලටත් යූස් කරනවා FCM, Analytics, Crashlytics etc
හාඩ්කෝඩඩ් API කී ගැන ඔය කියන්නෙ
APK එක Decompile කරලා string search එකක් කරලා එහෙම තියන API කී හොයන්න පුලුවන්
හැබැයි Oauth 2 යූස් කරලා public client flow එකක් යූස් කරන ඇප් වල client id එක ඇප් එක ඇතුලෙ තියනවා ඒක සෙකියුරිටි රිස්ක් එකක් නෙමයි බැලු බැල්මට ඒකත් කී එකක් වගේ
හැබැයි client_id, client_secret දෙකම තියනවා නං වැරදි flow එකක් යූස් කරලා තියෙන්නෙ ඒක වැරදියි
Yes
but Android keychain security depend on the hardware features like secure vault etc. but that provides reasonable security compared to user pref
phone එක බැකප් කරාම shared pref ටික නිකන්ම ෆයිල් එකක් විදියට තියනවා ඒක පට්ටම insecure
JWT එක එන්ක්රිප්ට් කරලා නැහැ ඕන කෙනෙක්ට ඩිකෝඩ් කරන්න පුලුවන් ඒක expected, jwt.io කියන්නෙ developer tool එකක්, inspect element වගේ
JWT එකේ සෙකියුරිටි එක තියෙන්නෙ එතන නෙමයි
jwt එකේ කෑලි තුනක් තියනවා . එකෙන් සෙපරේට් කරලා
HEADER.PAYLOAD.SIGNATURE විදියට
JWT එක යූස් කරන්නෙ මෙහෙමයි
සර්වර් එකේ(jwt එක ජෙනරේට් කරන තැන) private key, public key pair එකක් (or multiple key pairs) තියනවා
සර්වර් එක public key එක ඕන කෙනෙක්ට certificate එකක් විදියට ගන්න හරි jwks endpoint එකකින් ඕන කෙනෙක්ට ගන්න පුලුවන් විදියට දීලා තියනවා
Example google's certs :
https://www.googleapis.com/oauth2/v3/certs
ලොගින් එකේදි හරි token එක issue කරද්දි හරි jwt එක private key එකෙන් සයින් කරලා ඒ signature එක තමයි අර jwt signature කෑල්ලෙ තියෙන්නෙ. අපිට public key එකට ඇක්සස් තියන නිසා jwt එකේ signature එක අපිට verify කරන්න පුලුවන්.
උදාහරනයක් විදියට අපිට login with google වලින් හම්බුනු jwt එක අර දීපු පබ්ලික් කී යූස් කරලා වෙරිෆයි කරන්න පුලුවන් ඇත්තටම ගූගල් දීපු jwt එකක්ද කියලා
ඇන්ඩ්රොයිඩ්/ios/web ඇප් වලදි කරන්නෙ ලොගින් එකේදි සර්වර් එකෙන් jwt එකක් ඇප් එකට දෙනවා(using refresh token or authorization code or whatever flow)
ඇප් එක ඒක කොහේ හරි secure විදියට තියාගෙන ඉන්නවා. මේකට ලොකු වැලිඩිටි ටයිම් එකක් නැති නිසා මේක ලීක් උනත් වැලිඩිටි ටයිම් එකේදි විතරයි යූස් කරන්න පුලුවන්
ඒක නිසා තමයි මේ ඇක්සස් ටෝකන් වලට ගොඩක් පොඩි විනාඩි ගානක වැලිඩිටි ටයිම් එකක් දෙන්නෙ.
ඇප් එක API එක කතා කරද්දි සර්වර් එකට මේ jwt එක යවනවා
සර්වර් එකේදි අනිවාර්යෙන් මේකෙ වැලිඩිටි ටයිම් එක සහ signature validation එක කරන්න ඕන. ඒ දෙකම හරි නං API එක වැඩ කරනවා නැත්තං 401 වගේ එකක් return කරනවා
මේකෙදි තව වාසි තියනවා, මේක අපිට jwt එක issue කරපු කෙනා ලඟට යන්නෙ නැතිව වැලිඩේට් කරන්න පුලුවන් මොකද පබ්ලික් කී එකට අපිට ඇක්සස් තියන නිසා, ඕන නං අපිට පුලුවන් වෙන කෙනෙක් දීපු jwt එකකින් අපේ API එකකට ඇක්සස් දෙන්නත් පුලුවන්
me flow එකේ කරන common mistake එක තමයි සර්වර් එකේදි validity time එක චෙක් කරාට signature එක චෙක් කරන්නෙ නැති එක. මේක පට්ටම දරුනු සෙකියුරිටි බග් එකක් වෙනවා
මොකද එතකොට අපිට පුලුවන් වෙන කෙනෙක් විදියට jwt එකක් ජෙනරේට් කරලා API access කරන්න. signarure එක අතඇරලා දැම්මොතින් JWT එක කියන්නෙ සරලවම Base64 Encode කරපු JSON එකක්. ඒක නිසා වෙන කෙනෙක් JWT එකක් අරන් එනවා නං අනිවාර්යෙන් ඒක signature + time වැලිඩේට් කරන්න ඕන
තව payload එකේ propeties තියනවා ඒවට claims කියලා කියන්නෙ
විශේශ claims තියනවා
issuer/audance etc etc කියලා
තව ටයිප් කරන්න කම්මැලී