Angular 5: есть ли способ скрыть вызов API?или сделать это частным? - PullRequest
0 голосов
/ 05 декабря 2018

Я начал изучать Angular и заметил, что каждый мой бэкэнд-вызов можно увидеть из инструмента разработчика.Поэтому, когда я получил метод / функцию, подобную этой:

getUser(userId){
    return this.http.post('server/page/get-user', {id:userId});
}

И затем в каком-то компоненте я бы назвал это так:

this.userService.getUser(2).subscribe((data)=> {
    console.log(data)
})

Что в основном возвращает информацию о пользователе (имя, адрес и т. Д.)), в зависимости от того, какой идентификатор пользователя будет опубликован.Если кто-то хотел получить случайную информацию о пользователе, не могли бы они просто вызвать API-интерфейс для этой конечной точки со случайным числом в полезной нагрузке запроса и просто получить эту информацию о пользователе?

Я прочитал кое-что, что один из способов исправить это - использовать JWT, что в основном шифрует полезную нагрузку, но разве нет опции, позволяющей сделать этот вызов API доступным только в моем приложении?или сделать его хотя бы скрытым от разработчиков инструментов?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Короче, нет.

У вас есть способы скрыть запросы, ударяя по конечным точкам, которые обрабатывают ваш запрос, но с самого начала подумайте, что не можете.

Позвольте мне объяснить подробнее: Javascript запускается в браузере клиента.Это означает, что клиент имеет полный доступ к вашему внешнему коду: если он хочет, он может полностью сломать ваше приложение.

Плюсом является то, что его можно сломать только на его собственном компьютере: клиент не может связываться с браузером другого клиента.

С другой стороны, к вашему серверу может получить доступ все что угодно, но вы тот, кто имеет главный контроль над ним: вы должны обезопасить его .

Для этого, как вы сказали, вы можете использовать JWT.Но JWT - это процесс аутентификации, который в основном представляет собой закодированную строку.Расшифровывая его, вы можете получить информацию о клиенте, но они не извлекаются из БД, а извлекаются из самого токена.

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

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

Подумайте над тем, чтобы задать еще один вопрос с тегами, соответствующими языку вашего бэкэнда, что будет гораздо полезнее, чем задание углового решения.

0 голосов
/ 05 декабря 2018

Есть ли способ скрыть вызов API?или сделать его приватным?

Нет.Браузер принадлежит пользователю.То, что он делает, находится под их контролем, а не у вас.

Что в основном возвращает информацию о пользователе (имя, адрес и т. Д.), Основываясь на том, какой идентификатор пользователя публикуется.Если кто-то хотел получить случайную информацию о пользователе, не могли бы они просто сделать вызов API для этой конечной точки со случайным числом в полезной нагрузке запроса и просто получить эту информацию о пользователе?

Если вы используете API без аутентификации,Да.

Звучит так, как будто вы желаете безопасность через неизвестность , что крайне ненадежно.

Я прочитал кое-что, что один из способов исправить это - использовать JWT,что в основном шифрует полезные данные

Не совсем.

Вам нужна аутентификация / авторизация.

Вам необходимо идентифицировать пользователя (это может быть имя пользователя и пароль, OAuth с таким провайдером, как Facebook или Twitter и т. Д.).

Затем необходимо убедиться, что пользователю разрешено читать запрашиваемые данные.Например, пользовательская запись может быть доступна только пользователю, который владеет этой записью, или пользователю с ролью администратора.

разве нет опции, позволяющей включить этот вызов API для использования только в моем приложении?

Нет

или сделать его хотя бы скрытым от разработчиков инструментов?

Нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...