https://github.com/awl-s/clientcredentials
https://github.com/awl-s/clientcredentials
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/awl-s/clientcredentials
- Owner: Awl-S
- Created: 2023-05-23T15:47:11.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-09T07:22:50.000Z (over 1 year ago)
- Last Synced: 2025-02-26T01:24:26.477Z (over 1 year ago)
- Language: Go
- Size: 7.81 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
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.