Назад к вопросам
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)
}