2016-08-04 3 views
0

У меня есть частный API, где я использую базовую аутентификацию в качестве уровня безопасности. Прямо сейчас API потребляется моим приложением iOS, поэтому никто не может видеть пару ключей.Использовать API с базовой аутентификацией с использованием Javascript без раскрытия пары ключей

Я создаю то же приложение для Интернета сейчас, используя React и Javascript, и вам нужно использовать тот же API, используя базовую аутентификацию.

Как я могу использовать пару ключей API в Javascript, не подвергая эту пару ключей публике? Возможно ли такое?

+0

вы даете каждому пользователю самостоятельно или положить что-то между ними и API, как обратный прокси-сервер – Deryck

ответ

1

Как сказал @Andrew, это невозможно, вы можете просто сделать это сложнее, но он будет где-то на клиентском коде, и этого достаточно, чтобы сказать, что вы его раскрываете.

Если вы открыты к альтернативам, я предлагаю вам использовать аутентификацию для каждого пользователя для первого запроса, а затем аутентификацию на токене для дальнейших запросов. Этот маркер может быть JSON Web Token и это поток, я говорю:

diagram

Это так, как это работает, взятая из JWT's official documentation:

В аутентификации, когда пользователь успешно регистрируется с использованием своих учетных данных , будет отправлен Web-токен JSON и должен быть сохранен локально (обычно в локальном хранилище, но также могут использоваться файлы cookie), вместо традиционного подхода c восстановление сеанса на сервере и возврат файла cookie.

Всякий раз, когда пользователь хочет получить доступ к защищенному маршруту или ресурсу агент пользователя должен послать JWT, как правило, в заголовке Authorization с использованием схемы однонаправленного. Содержание заголовка должно выглядеть следующего:

Authorization: Bearer <token> 
+0

Спасибо за ясный ответ и пример того, что я могу сделать.Я использую Firebase для моей аутентификации пользователей и задаюсь вопросом, могу ли я использовать OAuth для аутентификации с помощью моего API. Я задал еще один вопрос: http://stackoverflow.com/questions/38881568/securing-restful-api-with-firebase-oauth - если у меня есть время, чтобы указать мне дальше в правильном направлении. –

1

TL; DR: Нет

Если клиент должен иметь возможность подключения к API напрямую, нет безошибочного способа предотвратить их обнаружение ключа API, так как они должны, по определению, быть чтобы получить доступ к нему, чтобы отправить его в запросе. Вы можете принять меры, чтобы запутать его, сохранив его в кодировке (но клиенту также потребуется алгоритм декодирования).

Это действительно так же верно и в приложении iOS. Кто-то может перепроектировать двоичный файл или перехватить запросы и просмотреть заголовок, открыв ключ API.

Возможно, у возможного «решения» каждый клиент получит свой собственный ключ API, будь то временный или постоянный, который каким-то образом заблокирован для их учетной записи/устройства/сеанса, чтобы ограничить повторное использование.

+0

Спасибо за ясный ответ. Я использую Firebase для моей аутентификации пользователей и задаюсь вопросом, могу ли я использовать OAuth для аутентификации с помощью моего API. Я задал еще один вопрос: http://stackoverflow.com/questions/38881568/securing-restful-api-with-firebase-oauth - если у меня есть время, чтобы указать мне дальше в правильном направлении. –