@Gregpopov
Full stack web developer

Как закрыть доступ к API и пускать только из приложения?

Итак: есть приложение, все закрыто обычной авторизацией, web:auth мидлвар, пользователь вошел, что-то себе делает.

Есть list data view, который нужно построить на Vue, для удобства сортировки, фильтрации и т.п.

Как авторизовать запрос Vue в api, при этом не выписывая дополнительно JWT токены к обычной сессии, не нагораживая велосипеды и сохраняя прозрачность процесса.

API и приложение - один app на Laravel. web:auth мидлвар не работает для api секции.
  • Вопрос задан
  • 1349 просмотров
Решения вопроса 1
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Просто сделайте маршрут в web.php и вызывайте его ajaxом как обычно. Ну csrf ток надо передавать всё равно.

Сессия будет подтягиваться как обычно при работе других роутов "серверных".
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
trofProg
@trofProg
Fullstack developer (Typescript / Python)
Если я верно понял, то возможно cors? То есть если нужно только из одного место разрешать доступ к апи, например по хосту или порту
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Может быть поможет в kernel.php добавить нужные для работы сессий middleware в группу маршрутов api. Ну и в auth.php , естественно, поменять гварда на session.
Ответ написан
Комментировать
IgorPI
@IgorPI
Что мешает использовать единый сервер авторизации?

Например я реализовал это следующим образом.

Вот мой стек.

Nuxt
Symfony

Я хочу получить категории
Роут /categories.get защищён.

var request = require("request");

var options = { method: 'GET',
  url: 'http://127.0.0.160:8091/categories.get',
  qs: { lvl: '0', offset: '0', count: '100' },
  headers: 
   {
     'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1NzMyMTE3NzAsIm5iZiI6MTU3MzIxMTc3MCwiZXhwIjoxNTczMjE1MzcwLCJ1c2VyX2VtYWlsIjoiYWRtaW5AbWFpbC5jb20ifQ.0-VX8Pbv9l-ELXOoPV_6DTP1166X5DUvHZobXHh5xed2FRbNbbGMFrrai7khnApfywQeZjzasrqVwmcgrDq4kg',
     'cache-control': 'no-cache' 
   } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});


Итог.

API и Nuxt защищены одним токеном.

Как защищён роутинг в Nuxt?

import {ACCESS_TOKEN} from "../store/mutation-types"


export default async function ({store, redirect, $axios}) {
  
  const token = store.getters[ACCESS_TOKEN]
  console.log(token)
  if (!token) {
    return redirect("/login")
  }
  
  await $axios.$post(`${process.env.api}/security.checkAccessToken`, {token})
    .then(({code}) => {
      if (code === 0) {
        console.info("Token verified!")
        return redirect()
      }
      console.info("Token not verified!")
      return redirect("/login")
    }).catch((e) => {
      console.info(e)
      return redirect("/login")
    })
}


Мой ответ:
Единый сервер авторизации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы