https://github.com/awl-s/httpauthorizationdigest
https://github.com/awl-s/httpauthorizationdigest
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/awl-s/httpauthorizationdigest
- Owner: Awl-S
- Created: 2023-05-23T12:54:35.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-09T07:30:14.000Z (over 1 year ago)
- Last Synced: 2025-02-26T01:24:22.626Z (over 1 year ago)
- Language: Go
- Size: 3.91 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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.