రెండు PWAs మధ్య సైన్డ్ టోకెన్ (Signed Token): బ్యాకెండ్ లేకుండా HMAC-SHA256
మీరు ఒక PWA నుండి మరొక PWAకి యూజర్ ఐడెంటిటీని (user identity) పంపాల్సి ఉంటుంది. రెండు యాప్లు వేర్వేరు Firebase ప్రాజెక్ట్లలో నడుస్తాయి. అవి ఎటువంటి డేటాబేస్ను పంచుకోవు. అవి ఎటువంటి అథెంటికేషన్ను (authentication) పంచుకోవు.
మీరు బ్యాకెండ్ కోడ్ రాయకుండానే దీనిని పరిష్కరించవచ్చు. మీకు బ్రౌజర్ Web Crypto API మరియు ఒక సైన్డ్ URL (signed URL) మాత్రమే అవసరం.
సమస్య: PanelControl అనే అంతర్గత సాధనం (internal tool), Orders అనే మరొక సైట్ను తెరవాల్సి ఉంటుంది. యూజర్ ఒక బటన్ను క్లిక్ చేసినప్పుడు, Orders సైట్కు ఆ యూజర్ ఎవరో తెలియాలి. యూజర్లు రెండోసారి లాగిన్ అవ్వకూడదు.
దీనిని చేయడానికి మూడు మార్గాలు:
- Shared Firebase: దీనికి షేర్డ్ డేటాబేస్ అవసరం. ఇక్కడ ఇది సాధ్యం కాదు.
- postMessage: దీనికి ఒకే డొమైన్ లేదా ఒక పాపప్ (popup) అవసరం. దీనిని నిర్వహించడం కష్టం.
- HMAC signed URL: టోకెన్తో కూడిన లింక్ను ఉపయోగించడం. ఇది అద్భుతంగా పనిచేస్తుంది.
ఇది ఎలా పనిచేస్తుంది: HMAC ఒక సీక్రెట్ కీని (secret key) ఉపయోగించి సంతకాన్ని (signature) సృష్టిస్తుంది. రిసీవర్ అదే కీని ఉపయోగించి ఆ సంతకాన్ని తనిఖీ చేస్తుంది. అవి సరిపోలితే, పంపిన వ్యక్తిని నమ్మవచ్చు (trusted).
వర్క్ఫ్లో (The workflow):
- పంపే వైపు (Sender side):
- యూజర్ పేరు మరియు టైమ్స్టాంప్తో ఒక పేలోడ్ (payload)ను సృష్టించండి.
- HMAC-SHA256 ఉపయోగించి పేలోడ్ను సైన్ చేయండి.
- URLకి ఆ సంతకాన్ని మరియు పేలోడ్ను జోడించండి.
- స్వీకరించే వైపు (Receiver side):
- URL నుండి టోకెన్ను చదవండి.
- పేలోడ్ నుండి సంతకాన్ని వేరు చేయండి.
- షేర్డ్ సీక్రెట్ని ఉపయోగించి సంతకాన్ని మళ్ళీ లెక్కించండి.
- టోకెన్ గడువు ముగిసిందో లేదో తనిఖీ చేయండి (ఉదాహరణకు, 5 నిమిషాల తర్వాత).
- అది చెల్లుబాటు అయ్యేది అయితే, యాప్లో యూజర్ ఐడెంటిటీని సెట్ చేయండి.
అమలు వివరాలు (Implementation details):
Web Crypto API అనేది అన్ని ఆధునిక బ్రౌజర్లలో నేటివ్గా ఉంటుంది. ఇది ArrayBufferతో పనిచేస్తుంది మరియు దీనికి అదనపు లైబ్రరీల అవసరం లేదు.
పద్ధతిని శుభ్రంగా ఉంచడానికి, రిసీవర్ స్క్రిప్ట్ డాక్యుమెంట్ యొక్క head విభాగంలో నడుస్తుంది. ఇది టోకెన్ను వెరిఫై చేస్తుంది, సమయాన్ని తనిఖీ చేస్తుంది మరియు వెంటనే history.replaceState ఉపయోగించి URLను క్లీన్ చేస్తుంది. ఇది బ్రౌజర్ బార్ నుండి టోకెన్ను తొలగిస్తుంది, తద్వారా అది దాగి ఉంటుంది.
భద్రత గురించి ఒక గమనిక: సీక్రెట్ కీ క్లయింట్ కోడ్లోనే ఉంటుంది. DevTools ఉపయోగించే ఎవరైనా దానిని చూడగలరు. పేరు వంటి సున్నితమైనది కాని డేటాను మాత్రమే పంపే అంతర్గత బిజినెస్ టూల్స్ కోసం ఇది పర్వాలేదు.
మీరు సున్నితమైన డేటాతో పబ్లిక్ యాప్ను నిర్మిస్తుంటే, దానికి బదులుగా సర్వర్-సైడ్ టోకెన్ను ఉపయోగించండి. అంతర్గత సాధనాల కోసం, ఈ క్లయింట్-ఓన్లీ పద్ధతి వేగంగా మరియు ప్రభావవంతంగా ఉంటుంది.
అదనపు ఇన్ఫ్రాస్ట్రక్చర్ అవసరం లేదు. అదనపు డేటాబేస్లు అవసరం లేదు. కేవలం నేటివ్ బ్రౌజర్ టూల్స్ మాత్రమే సరిపోతాయి.
Source: https://dev.to/androve2k/signed-token-between-two-pwas-hmac-sha256-with-no-backend-3jod
