region23
@region23
веб-разработчик

Как сделать аутентификацию в современном веб-приложении?

Если у веб-приложения предполагается следующая архитектура:
Backend: api написанное на Go.
Клиент: Статические страницы с JavaScript, которые обращаются к API бэкэнда.

Как в таких приложениях принято делать аутентификацию?
Как делать первичную аутентификацию?
Правильно ли я понимаю, что при каждом обращении к API на бэкэнде надо проверять аутентифицирован пользователь или нет. Как это следует делать?
  • Вопрос задан
  • 1526 просмотров
Решения вопроса 1
@nirvimel
Как и везде:
  1. /api/auth принимает {"login":"user", "password":"qwerty"} возвращает {"session_id":"UUID:4545633896344"}
  2. Все остальные API принимают параметр session_id, без него отвечают 401, с неверным session_id отвечают 403.
  3. Сессии не вечные, через N минут после последнего api-вызова стираются.
  4. Если клиент внезапно получает 403, то не кричит об этом юзеру сразу, а пытается перелогиниться хотя бы один раз.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vGrabko99
html, css, js, php, golang, mysql
делаем метод авторизации. К примеру
/users.Auth/
Который принимает параметры
{
 "login":"",
 "email":"", //необязательно но я использую
 "pass":""
}


И возвращает token
rb := make([]byte, 64)
_, err := rand.Read(rb)
if err != nil {
  log.Print(err)
}

var token string = `{
  "user_id":"",
  "name":"",
    ...,
  "salt": "`+base64.URLEncoding.EncodeToString(rb)+`",
   "expiries":"", //время жизни токена 
}`
encrypt_data := xxtea.Encrypt([]byte(token), []byte("Ваш ключ для шифровки токена"))
return base64.URLEncoding.EncodeToString(encrypt_data)

xxtea https://github.com/xxtea/xxtea-go

Всем остальным методам посылаем ещё токен.
Можно ещё использовать стандартные сессии но тогда нагрузка на сервер большая. А так всё храниться на стороне клиента.
Ответ написан
@Fr0stDev1
Есть хорошая статья на хабре
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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