AIDeskLab.AuthClient 1.0.11-gbcaac7719d
AIDeskLab.AuthClient
Версия 1.0.x
Универсальная клиентская библиотека для авторизации и регистрации пользователей через AuthServer. Предоставляет простой и мощный API для работы с gRPC сервером аутентификации, управления токенами, профилями пользователей и интеграции с Telegram.
Возможности
Аутентификация и авторизация
- Аутентификация пользователей - поддержка различных методов входа (логин/пароль, Telegram, телефон)
- Аутентификация сервисов - вход сервисов по API ключу и секрету
- Управление токенами - автоматическое обновление, безопасное хранение, отзыв токенов
- Проверка разрешений - валидация прав доступа пользователей
Управление пользователями
- Регистрация пользователей - подача заявок, одобрение/отклонение администраторами
- Управление профилями - полные профили пользователей с поддержкой Telegram аккаунтов
- Список пользователей - пагинация и поиск пользователей
Дополнительные возможности
- Интеграция с Telegram - работа с Telegram пользователями и ботами
- Middleware для ASP.NET Core - автоматическая интеграция в pipeline запросов
- Гибкое хранение токенов - в памяти, файл или системное хранилище ключей
- Политики повторных попыток - устойчивость к временным сбоям сети
- Полная типизация - строгая типизация всех моделей и ответов
Установка
Установите NuGet пакет в ваш проект:
dotnet add package AIDeskLab.AuthClient
Или через Package Manager Console:
Install-Package AIDeskLab.AuthClient
Быстрый старт
1. Настройка в Program.cs
using AuthClient.Extensions;
var builder = WebApplication.CreateBuilder(args);
// Добавление AuthClient с настройками из конфигурации
builder.Services.AddAuthClient(builder.Configuration);
// Или минимальная настройка напрямую
// builder.Services.AddAuthClient("https://auth-server.example.com", "my-service-id");
var app = builder.Build();
// Добавление middleware для автоматической работы с токенами
app.UseAuthClient();
app.Run();
2. Конфигурация в appsettings.json
{
"AuthClient": {
"ServerUrl": "https://auth-server.example.com",
"ServiceId": "my-service-id",
"UseSsl": true,
"OperationTimeout": "00:00:30",
"TokenStorage": {
"StorageType": "InMemory",
"EncryptTokens": true,
"EncryptionKey": "your-encryption-key-at-least-32-chars",
"CacheDuration": "01:00:00"
},
"TokenRefresh": {
"EnableAutoRefresh": true,
"RefreshCheckInterval": "00:01:00",
"RefreshBeforeExpiration": "00:05:00",
"MaxRefreshAttempts": 3
},
"Retry": {
"EnableRetry": true,
"MaxRetryAttempts": 3,
"BaseDelay": "00:00:01",
"MaxDelay": "00:00:30",
"Strategy": "ExponentialBackoff"
}
}
}
3. Использование в коде
using AuthClient.Services.Interfaces;
public class MyController : ControllerBase
{
private readonly IAuthenticationService _authService;
public MyController(IAuthenticationService authService)
{
_authService = authService;
}
[HttpPost("login")]
public async Task<IActionResult> Login(LoginRequest request)
{
var result = await _authService.LoginAsync(
request.Username,
request.Password,
"my-service-id"
);
if (result.Success)
{
return Ok(new {
AccessToken = result.AccessToken,
RefreshToken = result.RefreshToken,
User = result.User
});
}
return Unauthorized(result.ErrorMessage);
}
}
Конфигурация
AuthClientOptions
Основные настройки клиента аутентификации:
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
ServerUrl |
string | Да | - | URL gRPC сервера аутентификации |
ServiceId |
string | Да | - | ID вашего сервиса/приложения |
OperationTimeout |
TimeSpan | Нет | 30 сек | Таймаут для операций |
UseSsl |
bool | Нет | true | Использовать SSL/TLS |
ApiKey |
string | Нет | null | API ключ для админ операций |
TokenStorageOptions
Настройки хранения токенов:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
StorageType |
enum | InMemory | Тип хранилища: InMemory, File, SystemKeyStore, Custom |
EncryptTokens |
bool | true | Шифровать токены при хранении |
EncryptionKey |
string | - | Ключ шифрования (требуется если EncryptTokens = true) |
FilePath |
string | - | Путь к файлу (для StorageType = File) |
KeyPrefix |
string | "AuthClient" | Префикс ключей в системном хранилище |
CacheDuration |
TimeSpan | 1 час | Время жизни кеша в памяти |
TokenRefreshOptions
Настройки автоматического обновления токенов:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
EnableAutoRefresh |
bool | true | Включить автообновление токенов |
RefreshCheckInterval |
TimeSpan | 1 мин | Интервал проверки токенов |
RefreshBeforeExpiration |
TimeSpan | 5 мин | За сколько до истечения обновлять |
MaxRefreshAttempts |
int | 3 | Макс. попыток обновления |
RefreshRetryDelay |
TimeSpan | 5 сек | Задержка между попытками |
RefreshOnFirstUse |
bool | true | Обновлять при первом использовании |
RetryOptions
Настройки политики повторных попыток:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
EnableRetry |
bool | true | Включить повторные попытки |
MaxRetryAttempts |
int | 3 | Максимальное количество попыток |
BaseDelay |
TimeSpan | 1 сек | Базовая задержка |
MaxDelay |
TimeSpan | 30 сек | Максимальная задержка |
Strategy |
enum | ExponentialBackoff | Стратегия: Fixed, Linear, ExponentialBackoff |
BackoffMultiplier |
double | 2.0 | Множитель для экспоненциальной стратегии |
UseJitter |
bool | true | Использовать случайную задержку |
MaxJitterPercent |
int | 20 | Максимальный процент jitter (0-100) |
Основные сервисы
IAuthenticationService
Сервис аутентификации с поддержкой различных методов входа:
LoginAsync()- вход пользователя по логину и паролюLoginServiceAsync()- вход сервиса по API ключу и секретуLoginTelegramAsync()- вход через TelegramLoginByTelegramAndPhoneAsync()- вход по Telegram ID и телефонуRefreshTokenAsync()- обновление токена доступаLogoutAsync()- выход из системы (отзыв токена)ChangePasswordAsync()- смена пароля
IRegistrationService
Универсальный сервис регистрации пользователей с системой заявок:
SubmitRegistrationAsync()- подача заявки на регистрацию (поддерживает Telegram, Web, Mobile, API)GetRegistrationStatusAsync()- получение статуса заявкиCancelRegistrationAsync()- отмена заявкиListRegistrationRequestsAsync()- список заявок (для администраторов)ApproveRegistrationAsync()- одобрение заявкиRejectRegistrationAsync()- отклонение заявкиVerifyEmailAsync()- верификация email (для веб-регистрации)ResendEmailVerificationAsync()- повторная отправка кода верификации email
Типы регистрации:
- Telegram - регистрация через Telegram бота (требует TelegramId + Phone)
- Web - регистрация через веб-интерфейс (требует Username + Password + Email)
- Mobile - регистрация через мобильное приложение
- API - регистрация через API
IUserRegistrationService
Сервис управления пользователями:
RegisterUserAsync()- регистрация нового пользователяGetUserAsync()- получение информации о пользователеGetUserByUsernameAsync()- поиск пользователя по имениUpdateUserAsync()- обновление данных пользователяActivateUserAsync()- активация пользователяDeactivateUserAsync()- деактивация пользователяListUsersAsync()- список пользователей с пагинацией и поиском
ITokenManagementService
Административные функции управления токенами:
GetUserActiveTokensAsync()- активные токены пользователяGetServiceActiveTokensAsync()- активные токены сервисаRevokeTokenAsync()- отзыв конкретного токенаRevokeUserTokensAsync()- массовый отзыв токенов пользователяRevokeServiceTokensAsync()- массовый отзыв токенов сервисаCleanupExpiredTokensAsync()- очистка истекших токеновGetTokenStatisticsAsync()- получение статистики токенов
IProfileService
Сервис управления профилями пользователей:
GetProfileAsync()- получение полного профиляUpdateProfileAsync()- обновление персонального профиляAddTelegramAccountAsync()- добавление Telegram аккаунтаSetMainTelegramAccountAsync()- установка основного Telegram аккаунта
ITelegramService
Сервис для работы с Telegram интеграцией:
GetTelegramUserAsync()- получение информации о Telegram пользователеUpdateTelegramUserAsync()- обновление данных Telegram пользователяDeactivateTelegramUserAsync()- деактивация Telegram пользователяListTelegramUsersAsync()- список Telegram пользователей с пагинацией
Middleware
AuthClient предоставляет middleware для автоматической работы с токенами в ASP.NET Core приложениях:
app.UseAuthClient();
Middleware автоматически:
- Извлекает токен из заголовка Authorization
- Проверяет необходимость обновления токена
- Автоматически обновляет токен при необходимости
- Добавляет токен в HttpContext.Items для дальнейшего использования
Обработка ошибок
Все методы возвращают результаты с полем Success:
var result = await _authService.LoginAsync(username, password, serviceId);
if (!result.Success)
{
// Обработка ошибки
Console.WriteLine($"Ошибка: {result.ErrorMessage}");
}
Библиотека также определяет специфичные исключения:
AuthClientException- базовое исключениеAuthenticationException- ошибки аутентификацииAuthorizationException- ошибки авторизацииConfigurationException- ошибки конфигурацииServerCommunicationException- ошибки связи с серверомTokenStorageException- ошибки хранилища токенов
Примеры использования
Для детальных примеров использования всех сервисов и сценариев см. usage_examples.md
История изменений
См. CHANGELOG.md для подробной истории изменений.
Лицензия
MIT License
Ссылки
No packages depend on AIDeskLab.AuthClient.
.NET 8.0
- AIDesk.AuthServer.Contracts (>= 1.0.2-gc79506c63a)
- AutoMapper (>= 12.0.1)
- AutoMapper.Extensions.Microsoft.DependencyInjection (>= 12.0.1)
- Google.Protobuf (>= 3.28.3)
- Grpc.Net.Client (>= 2.70.0)
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 8.0.0)
- Microsoft.Extensions.Caching.Memory (>= 9.0.3)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Http (>= 9.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.3)
- Microsoft.IdentityModel.Tokens (>= 8.14.0)
- System.IdentityModel.Tokens.Jwt (>= 8.14.0)
| Version | Downloads | Last updated |
|---|---|---|
| 1.0.11-gbcaac7719d | 4 | 01/16/2026 |
| 1.0.10-g8e6a734f1e | 2 | 01/16/2026 |
| 1.0.7-g470a3ef930 | 2 | 01/16/2026 |