В чем разница между идентификацией, аутентификацией и авторизацией

«В чем разница между идентификацией, аутентификацией и авторизацией» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Идентификация — процесс определения пользователя (например, по логину или email).
Аутентификация — проверка подлинности (например, через пароль, токен или биометрию).
Авторизация — предоставление прав на доступ к ресурсам (например, роли admin или user).

// Пример в Go:
type User struct {
    ID       int
    Username string // Идентификация
    Password string // Аутентификация
    Role     string // Авторизация
}

func login(username, password string) (*User, error) {
    user := getUserByUsername(username) // Идентификация
    if user.Password != hash(password) { // Аутентификация
        return nil, errors.New("invalid credentials")
    }
    return user, nil
}

func accessResource(user *User) error {
    if user.Role != "admin" { // Авторизация
        return errors.New("forbidden")
    }
    return nil
}