У меня есть api, который использует OAuth 1.0a для аутентификации приложений, использующих его. Он заменил старый api, который использовал несколько пользовательских построенных и hodge-podge вызовов, которые устарели.
Хорошо известно, что OAuth 1.0a не защищен (на стороне клиента) Javascript, поскольку он полагается на секрет секретности пользователя. Это невозможно, так как источник всегда доступен для просмотра.
У нас есть расширения браузера для Chrome, Firefox, IE и Safari, которые должны использовать этот api в будущем. Эти расширения написаны в основном или полностью в Javascript, и, следовательно, проблема безопасности.
Эти расширения являются собственными и поэтому могут иметь собственные методы аутентификации для получения своих токенов доступа.
То, что я планирую реализовать, следующее:
- Пользователь регистрируется на веб-сайте в браузере.
- Веб-сайт выдает им файл cookie с ключом сеанса.
- Наше расширение затем берет этот файл cookie и передает его на api.
- Api проверяет, что это действительный и активный сеанс, и выдает расширение своим токенам доступа.
- Эти токены длится максимум один час до истечения срока их действия.
- Там также будут ограничены ограничения на файлы cookie, обработанные javascript.
Он работает при следующих предположениях:
- Если у другого приложения есть доступ к вашим файлам cookie, они могут выдать себя на сайт в любом случае, поэтому доступ к api не отличается.
- Все методы проверки подлинности все еще проходят через наш контроль.
- Регулярное истечение жетонов означает, что если они скомпрометированы, то для эксплуатации существует ограниченное время.
Мой вопрос в том, является ли это безопасным методом ограничения доступа к api? Есть ли лучшие?
Несколько примечаний. Я знаю, что хром-расширения могут запрашивать разрешение на доступ к вашим файлам cookie для определенного сайта. Я считаю, что расширения Firefox также могут сделать это.
Очевидно, что мы не хотим, чтобы наши файлы cookie были доступны через javascript на любой странице, иначе мы бы подверглись атакам XSS, поэтому они должны быть доступны только через расширения.