An open API service indexing awesome lists of open source software.

https://github.com/awl-s/httpauthorizationdigest


https://github.com/awl-s/httpauthorizationdigest

Last synced: 11 months ago
JSON representation

Awesome Lists containing this project

README

          

# Digest Authentication Server

Этот сервер на основе Go реализует механизм Digest аутентификации, используя MD5 хеширование для безопасного доступа.

## Описание

Digest аутентификация — это метод аутентификации, который использует MD5 хеширование для защиты пароля при передаче. Сервер генерирует случайный `nonce` и проверяет хеш запроса от клиента для подтверждения подлинности.

### Основные компоненты

- **generateNonce** — генерирует случайное значение `nonce`, которое отправляется клиенту в процессе аутентификации.
- **calculateHash** — вычисляет MD5 хеш, используя имя пользователя, пароль, `nonce`, HTTP метод и URI.
- **digestAuth** — основной обработчик запроса, который проверяет заголовок `Authorization` и сравнивает ответ клиента с ожидаемым.

## Структура проекта

1. **`main.go`** — Основной файл с определением обработчиков запросов и логикой Digest аутентификации.

## Установка

### Требования

- Go 1.18+

### Шаги для установки

1. Клонируйте репозиторий:
```bash
git clone https://github.com/yourcompany/digest-auth-server.git
```

2. Перейдите в директорию проекта:
```bash
cd digest-auth-server
```

3. Установите зависимости (если требуется):
```bash
go mod tidy
```

4. Запустите сервер:
```bash
go run main.go
```

Сервер будет доступен по адресу `http://localhost:8080`.

## Использование

### Digest Аутентификация

Digest аутентификация требует отправки заголовка `Authorization` в запросе к серверу:

- **Шаг 1**: Получите `nonce` от сервера, отправив запрос без заголовка `Authorization`.
- **Шаг 2**: Сформируйте заголовок `Authorization`, используя полученные `nonce`, `username`, `realm`, и `password`.
- **Шаг 3**: Отправьте запрос с заголовком `Authorization: Digest `.

Пример запроса с заголовком `Authorization`:
```bash
curl -H "Authorization: Digest username=\"admin\", realm=\"myRealm\", nonce=\"\" response=\"\"" http://localhost:8080
```

### Поля Digest

Некоторые из основных полей заголовка `Authorization`:

- **username** — имя пользователя.
- **realm** — область, которую защищает сервер (в данном примере `myRealm`).
- **nonce** — случайное значение, выданное сервером для защиты от повторных атак.
- **response** — хеш, который вычисляется клиентом на основе `username`, `realm`, `password`, `nonce`, метода и URI.

## Архитектура

### Digest Механизм

Функции `generateNonce` и `calculateHash` используются для создания случайного `nonce` и вычисления ожидаемого ответа на основе `username`, `realm`, `password`, `method` и `uri`. Функция `digestAuth` проверяет заголовок `Authorization` и сравнивает его с ожидаемым значением.

## Безопасность и развертывание

Для продакшн-среды рекомендуется:

- Переключиться на HTTPS для защиты данных при передаче.
- Учитывать использование более сильного алгоритма хеширования, поскольку MD5 считается устаревшим.

## Лицензия

Этот проект распространяется под лицензией MIT.