இரண்டு PWAs இடையேயான கையொப்பமிடப்பட்ட டோக்கன்: பேக்எண்ட் இல்லாமலேயே HMAC-SHA256 மூலம்
ஒரு PWA-விலிருந்து மற்றொரு PWA-விற்கு பயனர் அடையாளத்தை (user identity) நீங்கள் கடத்த வேண்டியுள்ளது. இரண்டு செயலிகளும் தனித்தனி Firebase திட்டங்களில் (projects) இயங்குகின்றன. அவற்றுக்கிடையே பகிரப்பட்ட தரவுத்தளம் (database) எதுவுமில்லை. அங்கீகாரம் (authentication) பகிர்வு ஏதுமில்லை.
பேக்எண்ட் குறியீட்டை (backend code) எழுதாமலேயே இதை நீங்கள் தீர்க்க முடியும். உங்களுக்கு உலாவியின் Web Crypto API மற்றும் ஒரு கையொப்பமிடப்பட்ட URL (signed URL) மட்டுமே தேவைப்படும்.
பிரச்சனை: PanelControl எனப்படும் ஒரு உள் கருவி (internal tool), Orders எனப்படும் மற்றொரு தளத்தைத் திறக்க வேண்டும். ஒரு பயனர் பொத்தானைக் கிளிக் செய்யும்போது, Orders தளம் அந்த பயனர் யார் என்பதைத் தெரிந்து கொள்ள வேண்டும். பயனர்கள் இரண்டாவது முறை உள்நுழைய (login) வேண்டிய அவசியமில்லை.
இதைச் செய்ய மூன்று வழிகள்:
- Shared Firebase: இதற்குப் பகிரப்பட்ட தரவுத்தளம் தேவை. இங்கே அது சாத்தியமில்லை.
- postMessage: இதற்கு ஒரே டொமைன் (domain) அல்லது ஒரு பாப்அப் (popup) தேவை. இதை நிர்வகிப்பது கடினம்.
- HMAC signed URL: ஒரு டோக்கனுடன் கூடிய இணைப்பைப் (link) பயன்படுத்துவது. இது மிகச்சரியாகச் செயல்படும்.
இது எப்படிச் செயல்படுகிறது: HMAC ஒரு ரகசியத் திறனைப் (secret key) பயன்படுத்தி ஒரு கையொப்பத்தை (signature) உருவாக்குகிறது. பெறுநர் அதே திறனைப் பயன்படுத்தி அந்த கையொப்பத்தைச் சரிபார்க்கிறார். அவை பொருந்தினால், அனுப்புவர் நம்பகமானவர் என்று கருதப்படும்.
பணிப்பாய்வு (Workflow):
- அனுப்புநர் பக்கம் (Sender side):
- பயனர் பெயர் மற்றும் நேர முத்திரையுடன் (timestamp) ஒரு பேலோடை (payload) உருவாக்கவும்.
- HMAC-SHA256 ஐப் பயன்படுத்தி பேலோடில் கையொப்பமிடவும்.
- கையொப்பம் மற்றும் பேலோடை ஒரு URL உடன் இணைக்கவும்.
- பெறுநர் பக்கம் (Receiver side):
- URL-லிருந்து டோக்கனைப் படிக்கவும்.
- பேலோடிலிருந்து கையொப்பத்தைப் பிரிக்கவும்.
- பகிரப்பட்ட ரகசியத் திறனைப் பயன்படுத்தி கையொப்பத்தை மீண்டும் கணக்கிடவும்.
- டோக்கன் காலாவதியாகிவிட்டதா என்று சரிபார்க்கவும் (உதாரணமாக, 5 நிமிடங்களுக்குப் பிறகு).
- அது செல்லுபடியாகும் என்றால், செயலியில் பயனர் அடையாளத்தை அமைக்கவும்.
செயல்படுத்தும் விவரங்கள்:
Web Crypto API அனைத்து நவீன உலாவிகளிலும் இயல்பாகவே (native) உள்ளது. இது ArrayBuffer உடன் செயல்படும் மற்றும் கூடுதல் நூலகங்கள் (libraries) தேவையில்லை.
விஷயங்களைச் சுத்தமாக வைத்திருக்க, பெறுநர் ஸ்கிரிப்ட் (receiver script) ஆவணத்தின் தலைப்பகுதியில் (head) இயங்குகிறது. இது டோக்கனைச் சரிபார்க்கிறது, நேரத்தைச் சரிபார்க்கிறது மற்றும் உடனடியாக history.replaceState ஐப் பயன்படுத்தி URL-ஐச் சுத்தப்படுத்துகிறது. இது உலாவியின் முகவரிப் பட்டியில் (browser bar) இருந்து டோக்கனை நீக்கி, அதை மறைத்து வைக்கிறது.
பாதுகாப்பு குறித்த குறிப்பு: ரகசியத் திறன் (secret key) கிளையண்ட் குறியீட்டிலேயே (client code) இருக்கும். DevTools பயன்படுத்துபவர் யாராக இருந்தாலும் அதைப் பார்க்க முடியும். பெயர் போன்ற முக்கியமானதல்லாத தரவுகளை (non-sensitive data) மட்டும் கடத்தும் உள் வணிகக் கருவிகளுக்கு (internal business tools) இது பரவாயில்லை.
முக்கியமான தரவுகளைக் கொண்ட ஒரு பொதுவான செயலியை (public app) உருவாக்குகிறீர்கள் என்றால், அதற்குப் பதிலாக சர்வர் பக்க டோக்கனைப் (server-side token) பயன்படுத்தவும். உள் கருவிகளுக்கு, இந்த கிளையண்ட்-மட்டும் (client-only) முறை வேகமானது மற்றும் பயனுள்ளது.
கூடுதல் உள்கட்டமைப்பு தேவையில்லை. கூடுதல் தரவுத்தளங்கள் தேவையில்லை. உலாவியின் இயல்பான கருவிகள் மட்டுமே போதும்.
Source: https://dev.to/androve2k/signed-token-between-two-pwas-hmac-sha256-with-no-backend-3jod
