Cross.Identity
1.1.0-dev.116
See the version list below for details.
dotnet add package Cross.Identity --version 1.1.0-dev.116
NuGet\Install-Package Cross.Identity -Version 1.1.0-dev.116
<PackageReference Include="Cross.Identity" Version="1.1.0-dev.116" />
<PackageVersion Include="Cross.Identity" Version="1.1.0-dev.116" />
<PackageReference Include="Cross.Identity" />
paket add Cross.Identity --version 1.1.0-dev.116
#r "nuget: Cross.Identity, 1.1.0-dev.116"
#:package Cross.Identity@1.1.0-dev.116
#addin nuget:?package=Cross.Identity&version=1.1.0-dev.116&prerelease
#tool nuget:?package=Cross.Identity&version=1.1.0-dev.116&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.Messaging).
- External OAuth — Google, Microsoft, GitHub, Apple; OAuth state в БД (
auth.ExternalLoginStates), multi-instance без sticky. - Формы — декларативное описание полей и правил валидации (equal, requiredIf, atLeastOneRequired и др.).
- Лицензирование (JWT) — проверка ключа Peshkov при первом вызове flow; без ключа в dev/test работа продолжается с предупреждением в логах.
Требования
- .NET 8.0
Структура репозитория
Cross.Identity.slnx
├── Cross.Identity/ # NuGet-библиотека
│ ├── FlowExecutor.cs, IFlowExecutor.cs
│ ├── Entities/, Infrastructure/ # EF Core (пользователи, токены, верификации, external login)
│ ├── Services/ # User, Code, JwtToken; Crypto/; ExternalOAuth/
│ ├── Licensing/ # JWT-лицензия Peshkov (Accessor, Validator, ProductInfo)
│ ├── Options/ # AuthenticationOptions, IdentityServiceConfiguration
│ ├── Extensions/, Helpers/, Dtos/, Enums/
│ ├── ProcessEngine/
│ │ ├── Core/ # Bag, StepRegistry, ProcessLoader, Forms/валидация
│ │ ├── Steps/, Factories/ # Шаги и их DI-фабрики
│ │ └── Definitions/ # Flows/*.json, Templates/, Providers/
│ ├── FLOWS.md # Описание flow и шагов
│ └── config.nuspec
├── Cross.Identity.Tests/ # NUnit (unit + integration)
├── Sample.Api/ # Пример минимального API (ASP.NET Core)
├── .cursor/triage/docs/ # Отчёты automated triage (.data/, ci-report-*.md)
├── .github/workflows/ # dotnet.yml, triage.yml
├── RefreshToken.md
├── LICENSE.md
└── README.md
Использование
- Подключение в приложении (ASP.NET Core):
services.AddCrossIdentity(configuration);
// Регистрирует: IFlowExecutor, StepRegistry, все IStepFactory, UserService, CodeService, JwtTokenService,
// LicenseAccessor, LicenseValidator, ILicenseProductInfo, провайдер дефиниций (файлы + embedded), формы и т.д.
Ключ лицензии (опционально) — секция CrossIdentity в конфигурации или переменная окружения CrossIdentity__LicenseKey:
{
"CrossIdentity": {
"LicenseKey": "<license key here>"
}
}
Проверка выполняется автоматически при первом вызове IFlowExecutor.ExecuteAsync — дополнительный код не нужен. Ключи: peshkov.biz.
Поведение:
| Сценарий | Результат |
|---|---|
| Ключ не задан | LogCritical, flow выполняется (dev/test) |
| Невалидный JWT | LogError, flow выполняется |
| Просроченный / неверный тип продукта | LogError + LogCritical, flow выполняется |
| Валидный ключ | LogInformation с edition и датой истечения |
- Выполнение сценария — в контроллере или минимальном 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, LastCode).
- Дефиниции потоков — JSON в
ProcessEngine/Definitions/Flows/(и при необходимости из файловой системы). Имена файлов:{flow}.{Operation}.json(напримерlicense.Token.json,game.Register.json). Подробное описание flow и шагов — в FLOWS.md.
Зависимости (NuGet)
- Cross.ErrorHandlers
- Cross.Headers
- Cross.Messaging
- Cross.PepperVault
- Konscious.Security.Cryptography.Argon2
- Microsoft.EntityFrameworkCore (+ InMemory, Relational)
- Microsoft.Extensions.Http
- Microsoft.IdentityModel.JsonWebTokens
- PhoneNumbersCore
Сборка и тесты
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 is compatible. 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 is compatible. 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. |
-
net10.0
- Cross.ErrorHandlers (>= 7.6.0)
- Cross.Headers (>= 1.2.1)
- Cross.Messaging (>= 2.1.0)
- Cross.PepperVault (>= 1.2.0)
- Konscious.Security.Cryptography.Argon2 (>= 1.3.1)
- Microsoft.EntityFrameworkCore (>= 10.0.9)
- Microsoft.EntityFrameworkCore.InMemory (>= 10.0.9)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.9)
- Microsoft.Extensions.Http (>= 10.0.9)
- Microsoft.IdentityModel.JsonWebTokens (>= 8.16.0)
- PhoneNumbersCore (>= 1.1.1)
-
net8.0
- Cross.ErrorHandlers (>= 7.6.0)
- Cross.Headers (>= 1.2.1)
- Cross.Messaging (>= 2.1.0)
- Cross.PepperVault (>= 1.2.0)
- Konscious.Security.Cryptography.Argon2 (>= 1.3.1)
- Microsoft.EntityFrameworkCore (>= 8.0.8)
- Microsoft.EntityFrameworkCore.InMemory (>= 8.0.8)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.8)
- Microsoft.Extensions.Http (>= 8.0.1)
- Microsoft.IdentityModel.JsonWebTokens (>= 8.16.0)
- PhoneNumbersCore (>= 1.1.1)
-
net9.0
- Cross.ErrorHandlers (>= 7.6.0)
- Cross.Headers (>= 1.2.1)
- Cross.Messaging (>= 2.1.0)
- Cross.PepperVault (>= 1.2.0)
- Konscious.Security.Cryptography.Argon2 (>= 1.3.1)
- Microsoft.EntityFrameworkCore (>= 9.0.9)
- Microsoft.EntityFrameworkCore.InMemory (>= 9.0.9)
- Microsoft.EntityFrameworkCore.Relational (>= 9.0.9)
- Microsoft.Extensions.Http (>= 9.0.15)
- 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... | 51 | 5/28/2026 |
| 1.1.0-dev.118 | 0 | 6/29/2026 |
| 1.1.0-dev.117 | 0 | 6/29/2026 |
| 1.1.0-dev.116 | 0 | 6/29/2026 |
| 1.1.0-dev.115 | 0 | 6/29/2026 |
| 1.1.0-dev.114 | 0 | 6/29/2026 |
| 1.1.0-dev.113 | 0 | 6/29/2026 |
| 1.1.0-dev.108 | 0 | 6/29/2026 |
| 1.1.0-dev.107 | 0 | 6/29/2026 |
| 1.1.0-dev.106 | 0 | 6/29/2026 |
| 1.1.0-dev.105 | 0 | 6/29/2026 |
| 1.1.0-dev.104 | 0 | 6/29/2026 |
| 1.1.0-dev.103 | 0 | 6/29/2026 |
| 1.1.0-dev.102 | 0 | 6/29/2026 |
| 1.1.0-dev.101 | 0 | 6/29/2026 |
| 1.1.0-dev.100 | 37 | 6/26/2026 |
| 1.1.0-dev.99 | 46 | 6/25/2026 |
| 1.1.0-dev.98 | 53 | 6/25/2026 |
| 1.1.0-dev.97 | 46 | 6/25/2026 |
| 1.0.0 | 170 | 2/28/2026 |
Cross.Identity: identity and authentication flows, JWT, process engine.
Licensing
- JWT license validation (Peshkov software) on first IFlowExecutor.ExecuteAsync call.
- Configure via CrossIdentity:LicenseKey in appsettings or CrossIdentity__LicenseKey environment variable.