Я создаю клиента, который будет использовать api. Использование для этого Laravel и vuejs. Бэкэнд - это собственное приложение, а клиентский интерфейс - это собственное приложение, которое будет работать на vuejs.
Прямо сейчас, когда я хочу войти в систему пользователя на бэкэнд, я должен отправить эти данные от клиента:
form: {
'grant_type' : 'password',
'username': '[email protected]',
'password': 'pass1234',
'provider': 'student',
'client_id': "2",
'client_secret' : 'fXz4bILqz5CnDjFCvXpw7RZWLgWXxsTa0LN1'
}
Насколько разумно или опасно сохранять секрет в таком клиенте? Теперь все это видят, могут ли они это как-то использовать? И если это опасно или не рекомендуется, как это делают все остальные? Если вы не отправляете oauth client_secret от клиента, то где вы его храните?
Кстати, если у кого-то есть опыт создания api: s, задается вопросом, почему я упоминаю здесь провайдера, потому что я использую паспорт с несколькими авторизациями, поэтому я могу аутентифицировать разные типы пользователей с разными провайдерами. Но мой вопрос о безопасности хранения client_secret внутри javascript на веб-интерфейсе?
Это плохая идея, у вас никогда не должно быть client_secret на стороне клиента,
Вариант 1:
Используйте неявное предоставление.
Этот грант чаще всего используется для JavaScript или мобильных приложений, где учетные данные клиента не могут быть надежно сохранены.
Вариант 2:
Сделайте внутренний вызов auth / token из вашего контроллера входа. Что-то вроде реестра в этом решении здесь
Итак, вы отправите имя пользователя / пароль своему контроллеру входа в систему, и контроллер входа сделает внутренний вызов для получения токена.