В браузере запущено приложение 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-файле?), А затем добавить его к исходящим вызовам из приложения реагирования.