Как мне управлять токеном доступа, когда хранение в локальном хранилище не вариант? - PullRequest
0 голосов
/ 26 апреля 2019

В браузере запущено приложение ReactJS, которому необходим доступ к моему внутреннему серверу API laravel-passport.Таким образом, я контролирую весь код как на стороне клиента, так и на стороне сервера, и могу изменить его по своему усмотрению.

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

Но я не хочу сохранять токен доступа в локальном хранилище, поскольку это небезопасно,Как мне это сделать?

Вот что я пробовал:

В документации по паспорту laravel есть руководство по автоматическому сохранению токена доступа в cookie .Я считаю, что для этого требуется, чтобы приложение находилось в одном источнике, но я не могу заставить это работать.При локальном тестировании я запускаю приложение на localhost: 4000, но API запускается на my-app.localhost.Может ли это быть причиной того, что паспорт laravel не создает cookie с токеном, хотя технически оба они имеют локальный источник происхождения?

OAuth имеет страницу, где хранить токены .Я попробовал три варианта для «Если есть бэкэнд» , но, похоже, они сосредоточены на том, как проходит авторизация, а не на том, как конкретно хранить токен.

Вот соответствующие части моегокод (конечно, не стесняйтесь просить больше при необходимости):

Из моего приложения реакции:

const tokenData = await axios.post(this.props.backendUrl + '/api/loginToken', { email: 'myEmail', password: 'myPassword' })
    console.log('token data: ', tokenData)
    const personalAccessToken = tokenData.data.success.token;
    var config = {
      headers: {
        'Authorization': "Bearer " + personalAccessToken
    };
    const user = await axios.get(this.props.backendUrl + '/api/user', config);

Из класса контроллера ApiController:

    public function loginToken()
    {
        if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
            $user = Auth::user();

            $success['token'] = $user->createToken('MyApp')->accessToken;
            return response()->json(['success' => $success], 200);
        } else {
            return response()->json(['error' => 'Unauthorised'], 401);
        }
    }

и функция loginToken вызывается из маршрута / api / loginToken.

Ожидаемые и фактические результаты:

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

Иначе, я просто хотел бы найти какой-нибудь способ безопасного хранения токена (например, в cookie-файле?), А затем добавить его к исходящим вызовам из приложения реагирования.

...