← Назад к вопросам

Какие коды ошибок свойственны проблемам с авторизацией

1.3 Junior🔥 241 комментариев
#Сетевое взаимодействие

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные коды ошибок при проблемах с авторизацией

В мобильной разработке, особенно для Android, проблемы с авторизацией возникают на разных уровнях — от сетевых запросов до локальной валидации токенов. Вот основные коды ошибок и их обработка.

HTTP статус-коды (уровень API)

Серверная часть чаще всего использует стандартные HTTP-статусы для индикации проблем аутентификации и авторизации:

  • 401 Unauthorized — классическая ошибка аутентификации. Сервер не узнал пользователя (например, неверные или отсутствующие учетные данные, истекший токен). Обычно требует повторного входа.
when (response.code()) {
    401 -> handleUnauthorized() // Требует повторной аутентификации
}
  • 403 Forbidden — ошибка авторизации. Пользователь аутентифицирован, но не имеет прав на запрашиваемый ресурс/действие. В этом случае повторный логин не поможет, нужно запросить дополнительные разрешения.

  • 400 Bad Request — может возвращаться при некорректном формате запроса (например, неверный формат email/пароля при логине). Часто в теле ответа содержится детальное описание ошибки.

Кастомные коды в теле ответа

Многие API возвращают 200/400 HTTP-статус, но с детализированными кодами в JSON-теле:

{
  "error": {
    "code": "INVALID_CREDENTIALS",
    "message": "Неверный email или пароль"
  }
}

Распространенные кастомные коды:

  • INVALID_TOKEN / TOKEN_EXPIRED — проблемы с JWT или OAuth токеном
  • USER_NOT_FOUND / ACCOUNT_DISABLED — проблемы с учетной записью
  • INSUFFICIENT_PERMISSIONS — частный случай Forbidden
  • RATE_LIMIT_EXCEEDED — превышены попытки ввода пароля

Локальные коды ошибок (на стороне Android)

До отправки запроса на сервер приложение должно выполнять локальную валидацию:

sealed class AuthError : Exception() {
    object NetworkError : AuthError()
    object InvalidEmailFormat : AuthError()
    object PasswordTooShort : AuthError()
    object BiometricNotAvailable : AuthError()
    object TokenStorageError : AuthError()
    data class ServerError(val code: String, val message: String) : AuthError()
}

OAuth-специфичные ошибки

При работе с OAuth 2.0 / OpenID Connect могут возникать специфичные ошибки:

  • invalid_grant — неверный, просроченный или отозванный код авторизации
  • invalid_client — проблемы с client_id или client_secret
  • unsupported_grant_type — сервер не поддерживает такой тип запроса
  • invalid_scope — запрошен неверный или неподдерживаемый scope

Практические рекомендации по обработке

  1. Единая точка обработки ошибок — создайте AuthErrorHandler или интерцептор в Retrofit/OkHttp
  2. Разделение аутентификации и авторизации — 401 требует повторного логина, 403 — показа пользователю, что доступ запрещен
  3. Автоматическое обновление токенов — при 401 ошибке попробуйте обновить access token с помощью refresh token
  4. Логирование и аналитика — отслеживайте частые ошибки авторизации для улучшения UX
  5. Грейсфул деградация — при постоянных ошибках auth предложите войти в офлайн-режиме (если возможно)
class AuthInterceptor(private val tokenManager: TokenManager) : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val response = chain.proceed(chain.request())
        
        when (response.code) {
            401 -> {
                // Пытаемся обновить токен
                val newToken = tokenManager.refreshToken()
                if (newToken != null) {
                    // Повторяем запрос с новым токеном
                    return chain.proceed(
                        chain.request().newBuilder()
                            .header("Authorization", "Bearer $newToken")
                            .build()
                    )
                } else {
                    // Требуем повторного входа
                    throw AuthException.Unauthorized()
                }
            }
            403 -> throw AuthException.Forbidden()
        }
        return response
    }
}

Корректная обработка этих ошибок критична для безопасности и пользовательского опыта. Всегда предоставляйте понятные сообщения об ошибках и четкие пути их решения (восстановление пароля, повторный вход, обращение в поддержку).

Какие коды ошибок свойственны проблемам с авторизацией | PrepBro