Cross.Identity
1.1.0-dev.78
See the version list below for details.
dotnet add package Cross.Identity --version 1.1.0-dev.78
NuGet\Install-Package Cross.Identity -Version 1.1.0-dev.78
<PackageReference Include="Cross.Identity" Version="1.1.0-dev.78" />
<PackageVersion Include="Cross.Identity" Version="1.1.0-dev.78" />
<PackageReference Include="Cross.Identity" />
paket add Cross.Identity --version 1.1.0-dev.78
#r "nuget: Cross.Identity, 1.1.0-dev.78"
#:package Cross.Identity@1.1.0-dev.78
#addin nuget:?package=Cross.Identity&version=1.1.0-dev.78&prerelease
#tool nuget:?package=Cross.Identity&version=1.1.0-dev.78&prerelease
Cross.Identity
Библиотека идентификации и аутентификации для .NET: настраиваемые сценарии (регистрация, вход, восстановление пароля, выдача и обновление токенов), JWT, Argon2, верификация по email/SMS, процессный движок с JSON-описанием потоков.
Возможности
- Process Engine — выполнение сценариев (flow) по JSON-дефинициям с последовательными шагами (steps).
- Потоки — регистрация, вход по паролю/коду, forgot password, token, refresh token, получение пользователя, запрос и проверка кодов (email/SMS).
- JWT — выпуск и валидация access/refresh токенов, настраиваемые claims и время жизни.
- Безопасность — хеширование паролей (Argon2), одноразовые коды, нормализация телефонов.
- Каналы — email и SMS (отправка кодов через Cross.Notification).
- Формы — декларативное описание полей и правил валидации (equal, requiredIf, atLeastOneRequired и др.).
Требования
- .NET 8.0
Структура решения
Cross.Identity.slnx
├── Cross.Identity # Основная библиотека (flow, JWT, сущности, сервисы)
├── Cross.Identity.Tests # Тесты (NUnit, Moq, FluentAssertions)
├── Cross.Notification # Отправка уведомлений: Email (MailKit), SMS (net7.0/net8.0)
├── Cross.PepperVault # Хранение секретов (pepper и др.)
├── Cross.PepperVault.* # Провайдеры: Env, FileJson, AwsSecretsJson, AzureKv*, GcpSecretManagerJson, HcvKv2Json
├── _nuget/ # config.nuspec для публикации пакета Cross.Identity
├── .github/workflows/ # CI (dotnet.yml)
├── RefreshToken.md # Рекомендации по срокам жизни и ротации refresh-токенов
├── LICENSE.md
└── README.md
Структура проекта Cross.Identity
Cross.Identity/
├── FlowExecutor.cs, IFlowExecutor.cs # Точка входа: выполнение flow по (flow, operation) и входному словарю
├── IdentityConstants.cs, ClaimConstants.cs
├── Entities/ # EF Core-сущности и конфигурации
│ ├── UserAccountEntity, AccessTokenEntity, RefreshTokenEntity
│ ├── EmailVerificationEntity, PhoneVerificationEntity
│ ├── ProviderEntity, UserExternalLoginEntity
│ └── *Configuration
├── Infrastructure/
│ └── IdentityContext.cs # DbContext
├── Services/ # Доменные сервисы
│ ├── UserService, IUserService
│ ├── CodeService, ICodeService
│ ├── JwtTokenService, IJwtTokenService
│ └── Crypto/ # PasswordHasher (Argon2), PhoneNormalizer
├── Dtos/ # FlowResult, ResolveBy, NotificationMessage
├── Options/ # AuthenticationOptions
├── Helpers/ # CodeGeneratorHelper, JwtKeys
├── Extensions/ # ServiceCollectionExtensions (AddCrossIdentity, провайдеры дефиниций)
└── ProcessEngine/
├── Core/ # Ядро движка
│ ├── Bag, BagKey, BagMapExtensions
│ ├── IStep, IStepFactory, StepRegistry, StepResult
│ ├── ProcessLoader, ProcessBuilder, ProcessExecutor
│ ├── IRequestInput, RequestInput
│ ├── Enums/ # ChannelEnum, FlowOperationEnum, StepStatusEnum
│ └── Forms/ # Схемы форм и валидация
│ ├── FormSchema, FieldDescriptor, FieldTypeEnum
│ ├── ValidatorFactories/ # UnifiedFormValidatorFactory, правила (Equal, RequiredIf, AtLeastOneRequired, …)
│ └── Providers/ # IFormSchemaProvider, InMemoryFormSchemaProvider
├── Steps/ # Реализации шагов (CollectForm, CreateUser, SendCode, Token, …)
├── Factories/ # Фабрики шагов (CollectFormStepFactory, TokenStepFactory, …)
└── Definitions/
├── Flows/ # JSON-файлы сценариев (license.Register, game.Token, shop.auth, …)
├── Templates/ # Шаблоны писем (register.*.html/txt, verify.*, reset.*)
├── Providers/ # IProcessDefinitionProvider, Composite, FileSystem, EmbeddedResource
└── Helpers/ # JsonHelpers
Использование
- Подключение в приложении (ASP.NET Core):
services.AddCrossIdentity(configuration);
// Регистрирует: IFlowExecutor, StepRegistry, все IStepFactory, UserService, CodeService, JwtTokenService,
// провайдер дефиниций (файлы + embedded), формы и т.д.
- Выполнение сценария — в контроллере или минимальном API передайте тело запроса как словарь и вызовите:
var result = await _flowExecutor.ExecuteAsync(
input: requestBodyAsDictionary,
flow: "license", // например: license, game, shop, edoctors
operation: FlowOperationEnum.Token,
cancellationToken);
// result.Data — объект с полями, заданными шагом collectResult (например access_token, refresh_token).
- Дефиниции потоков — JSON в
ProcessEngine/Definitions/Flows/(и при необходимости из файловой системы). Имена файлов:{flow}.{Operation}.json(напримерlicense.Token.json,game.Register.json). Подробное описание всех flow и шагов — в ProcessEngine/Definitions/Flows/README.md.
Зависимости (NuGet)
- Cross.ErrorHandlers
- Cross.Headers
- Konscious.Security.Cryptography.Argon2
- Magick.NET.Core
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Relational
- Microsoft.Extensions.Http
- PhoneNumbersCore
- System.IdentityModel.Tokens.Jwt
- ProjectReference: Cross.Notification, Cross.PepperVault
Сборка и тесты
dotnet build
dotnet test
Тесты
Категории (NUnit)
Константы — Cross.Identity.Tests.Common.TestCategory, атрибуты: [Category(TestCategory.UNIT)], [Category(TestCategory.INTEGRATION)], [Category(TestCategory.FUNCTIONAL)].
| Категория | Назначение |
|---|---|
| UNIT | Моки, один компонент, без InMemory EF |
| INTEGRATION | EFTestsBase (InMemory EF + реальные сервисы), RunFlowCommandHandlerTestsBase / Identity/FlowTests (сквозной process engine) |
| FUNCTIONAL | Зарезервировано (E2E / TestServer / внешние зависимости), пока не используется |
Примеры запуска:
dotnet test --filter "Category=Unit"
dotnet test --filter "Category=Integration"
Именование методов
Соглашение Given_When_Then:
- Given — контекст/предусловия.
- When — действие.
- Then — ожидаемый результат.
Пример: ExistingUser_RequestCode_SendsCodeAndReturnsLastCode.
Структура: Cross.Identity.Tests/Identity/ — FlowTests (integration), StepTests и StepFactoryTests (unit); Services/ — unit или integration в зависимости от базового класса (EFTestsBase → integration).
Дополнительно
- RefreshToken.md — рекомендации по срокам жизни access/refresh токенов и ротации.
- LICENSE.md — лицензия.
ToDo
Организовать переход с System.IdentityModel.Tokens.Jwt на Microsoft.IdentityModel.JsonWebTokens
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
- Cross.ErrorHandlers (>= 7.3.0)
- Cross.Headers (>= 1.0.0)
- Konscious.Security.Cryptography.Argon2 (>= 1.3.1)
- Magick.NET.Core (>= 13.6.0)
- Microsoft.EntityFrameworkCore (>= 8.0.8)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.8)
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.IdentityModel.JsonWebTokens (>= 8.16.0)
- PhoneNumbersCore (>= 1.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.0-US-129-Make-a-user-re... | 46 | 5/28/2026 |
| 1.1.0-dev.88 | 0 | 6/17/2026 |
| 1.1.0-dev.87 | 0 | 6/17/2026 |
| 1.1.0-dev.86 | 45 | 6/12/2026 |
| 1.1.0-dev.82 | 47 | 6/10/2026 |
| 1.1.0-dev.81 | 47 | 6/3/2026 |
| 1.1.0-dev.80 | 50 | 6/3/2026 |
| 1.1.0-dev.79 | 46 | 6/3/2026 |
| 1.1.0-dev.78 | 49 | 5/29/2026 |
| 1.1.0-dev.13 | 66 | 4/8/2026 |
| 1.1.0-dev.11 | 59 | 4/5/2026 |
| 1.1.0-dev.10 | 68 | 4/5/2026 |
| 1.1.0-dev.9 | 65 | 3/31/2026 |
| 1.1.0-dev.8 | 63 | 3/31/2026 |
| 1.1.0-dev.7 | 62 | 3/30/2026 |
| 1.1.0-dev.6 | 69 | 3/30/2026 |
| 1.1.0-dev.5 | 64 | 3/29/2026 |
| 1.1.0-dev.3 | 67 | 3/27/2026 |
| 1.0.1-preview21212121.84 | 44 | 6/10/2026 |
| 1.0.0 | 166 | 2/28/2026 |
Cross.Identity: identity and authentication flows, JWT, process engine.