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

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


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

Last synced: 8 months ago
JSON representation

Awesome Lists containing this project

README

          

# OAuth Server

OAuth сервер на основе Go и фреймворка Gin для выдачи access token и доступа к защищённым ресурсам с проверкой токена.

## Описание

Сервер позволяет клиенту запрашивать access token с помощью метода POST и использовать его для получения доступа к защищённым ресурсам через метод GET. Основная функциональность реализована в следующих компонентах:

- **TokenHandler** — проверяет `client_id` и `client_secret`, и если они совпадают с зарегистрированными данными, выдает access token.
- **ResourceHandler** — проверяет наличие валидного access token в заголовке `Authorization` и предоставляет доступ к защищённым данным, если токен корректен.

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

1. **`main.go`** — Основной файл с определением обработчиков запросов и логикой OAuth сервера.
2. **`OAuthServer`** — Структура для хранения зарегистрированных клиентов и активных токенов доступа.

## Установка

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

- Go 1.18+.
- Gin Framework для работы с HTTP запросами.

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

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

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

3. Установите зависимости:
```bash
go mod tidy
```

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

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

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

### 1. Получение access token

Запросите токен с помощью POST-запроса на `/token`, указав `client_id` и `client_secret`:
```powershell
Invoke-WebRequest -Uri "http://localhost:8080/token" -Method POST -Body "client_id=my_client_id&client_secret=my_client_secret"
```

Ответ сервера:
```json
{
"access_token": "FWdD07QTfcA2pIikIA2X",
"token_type": "Bearer"
}
```

### 2. Доступ к защищённому ресурсу

Используйте полученный токен для доступа к защищённому ресурсу с помощью GET-запроса на `/resource`, добавив заголовок `Authorization`:
```powershell
Invoke-WebRequest -Uri "http://localhost:8080/resource" -Method GET -Headers @{"Authorization" = "FWdD07QTfcA2pIikIA2X"}
```

Ответ сервера:
```json
{
"data": "secure data"
}
```

### 3. Ошибки доступа

Если токен не предоставлен или является недействительным, сервер вернет ответ с кодом ошибки 401 и сообщением:
```json
{
"error": "invalid_token"
}
```

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

### `OAuthServer`

Структура `OAuthServer` используется для хранения зарегистрированных клиентов (по `client_id` и `client_secret`) и активных токенов. При успешной аутентификации `TokenHandler` генерирует access token, который сохраняется в `accessTokens`.

### Генерация токенов

Функция `randSeq` используется для генерации случайных токенов из букв и цифр, длиной 20 символов. При желании можно заменить генерацию на безопасный JWT или другой подход.

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

Для развертывания сервера в продакшн необходимо учитывать:

- Применение HTTPS для защиты передачи данных.
- Настройка политики защиты от атак с использованием слабых токенов.
- Использование более безопасного хранения токенов (например, JWT).
- Настройка механизмов защиты от брутфорс-атак.

## Лицензия

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