Local Storage, Indexed DB | Наименее безопасный способ. Уязвим к XSS (Cross-Site Scripting), реализовать атаку легко. Хранилище персистентное, значения токенов будут храниться пока JS не удалит записи из хранилища |
Session storage | Небезопасный способ. Реализовать CSRF/XSS-атаку сложнее из-за привязки к времени жизни открытой вкладки. Хранилище не персистентное, поэтому при следующем открытии приложения необходимо обращаться к OAuth заново |
Variables | Хранение в переменных кода более безопасно, однако узявимость сохраняется: обнаружение необходимой переменной злоумышленником возможно. Хранилище не персистентное |
Web Worker | Использует скрипты общего назначения, поэтому сохраняется уязвимость на уровне JS. Хранилище не персистентное |
Service Worker | Безопаснее, чем Local Storage, Indexed DB, Session storage, так как нельзя скомпрометировать токены через XSS/CSRF-атаку. Токены хранятся на уровне переменных в коде Service Worker, значения подставляются в веб-хуках Request/Response. Хранилище не персистентное |
Cookies | С флагами HttpOnly, Secure, SameSite=Strict на уровне OAuth Proxy, реализующего логику взаимодействия с Resource и Authentication Server провайдера OAuth, хранение персистентно. Ещё более безопасным вариантом будет хранение значений токенов на стороне Proxy, а в User-Agent выдавать Cookies OAuth-сессии с теми же флагами |