Как разрешить только моему SPA вызывать мой API общественного отдыха?

У меня есть SPA (на основе Angular), опубликованный на my-example-domain.com, и rest API (на основе Laravel 5.3), представленный на my-example-domain.com/api. Все API являются общедоступными, поэтому неаутентифицированный пользователь может использовать мой Angular SPA и вызывать backend API.

Я хотел бы разрешить ТОЛЬКО моему SPA вызывать мой backend rest API, поэтому, например, никто не должен иметь возможность вызывать мои rest API через rest client / curl.

Как я могу достичь этой цели? Какой тип аутентификации мне нужно настроить в моем приложении Laravel? Подходит ли Passport?


person Community    schedule 17.06.2017    source источник
comment
Laravel Passport - это система аутентификации на основе токенов, и да, я бы рекомендовал использовать ее для ваших нужд. Scout - это индексированная поисковая утилита Laravel. laravel.com/docs/5.4/passport   -  person    schedule 17.06.2017
comment
@btl, спасибо, Passport - замечательная библиотека, но какая функция Passport лучше всего подходит в моем случае?   -  person    schedule 17.06.2017
comment
Жетоны персонального доступа. laravel.com/docs/5.4/passport#personal-access-tokens   -  person    schedule 17.06.2017
comment
Но чтобы использовать p.a.t., я должен аутентифицировать пользователя. Я ошибся?   -  person    schedule 17.06.2017
comment
Нет, не ошибаюсь. Расскажите подробнее о SPA, есть ли у него какие-либо права доступа пользователя или другие ограничения?   -  person    schedule 17.06.2017


Ответы (1)


Вы не можете.

Ваш клиент доступен для всех.

Он работает в браузере, поэтому все выполняемые им HTTP-запросы могут быть проверены его пользователями (то есть всеми).

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

person Quentin    schedule 17.06.2017
comment
как насчет csrf_token? - person ; 17.06.2017
comment
@trullallero - это токен, который вы раздаете всем, кто просит его, а затем требует, чтобы они включили его в следующий запрос. Так как любой может попросить один, люди, которые не используют ваш клиентский веб-сайт, могут попросить его. - person Quentin; 17.06.2017