Sobes.tech
Назад к вопросам
Senior
1

Расскажи про токены: какие бывают виды, как устроены внутри, для чего нужны. Чем аутентификация отличается от авторизации?

Компании, где спрашивали
Магнум

Ответ от нейросети

sobes.tech AI

Токены — это объекты, которые используются для передачи информации о пользователе или сессии между клиентом и сервером, часто для целей аутентификации и авторизации.

Виды токенов:

  • JWT (JSON Web Token): содержит три части — заголовок, полезную нагрузку и подпись. Используется для передачи информации в зашифрованном или подписанном виде.
  • Opaque tokens: непрозрачные токены, которые не несут информации сами по себе, а используются как ключ для поиска данных на сервере.
  • Refresh tokens: используются для получения новых access-токенов без повторной аутентификации.

Устройство внутри:

  • В JWT, например, payload содержит утверждения (claims) о пользователе и сроках действия.
  • Подпись обеспечивает целостность и подлинность токена.

Назначение:

  • Токены позволяют серверу удостовериться в личности пользователя без необходимости хранить состояние сессии.
  • Обеспечивают масштабируемость и безопасность в распределённых системах.

Аутентификация vs Авторизация:

  • Аутентификация — процесс проверки личности пользователя (например, ввод логина и пароля).
  • Авторизация — процесс определения, какие действия или ресурсы доступны аутентифицированному пользователю.

Пример использования JWT в Go:

import (
    "github.com/dgrijalva/jwt-go"
    "time"
)

func GenerateJWT(secret []byte, userID string) (string, error) {
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "user_id": userID,
        "exp":    time.Now().Add(time.Hour * 72).Unix(),
    })
    return token.SignedString(secret)
}