SmartJWT 1.0.24
dotnet add package SmartJWT --version 1.0.24
NuGet\Install-Package SmartJWT -Version 1.0.24
<PackageReference Include="SmartJWT" Version="1.0.24" />
<PackageVersion Include="SmartJWT" Version="1.0.24" />
<PackageReference Include="SmartJWT" />
paket add SmartJWT --version 1.0.24
#r "nuget: SmartJWT, 1.0.24"
#:package SmartJWT@1.0.24
#addin nuget:?package=SmartJWT&version=1.0.24
#tool nuget:?package=SmartJWT&version=1.0.24
π§ SmartJWT SDK
Dynamic, Context-Aware JWT Authorization & Rules Engine for .NET
Stop hardcoding permissions.
Build intelligent, adaptive JWT authorization that evolves with your business rules β not your code.
SmartJWT enables you to generate smart JWT tokens whose claims and permissions are dynamically evaluated at runtime based on real-world context such as time, location, operation, resource, role, client identity, and custom business rules.
β¨ Less code. Fewer bugs. Stronger security.
Designed for startups, SaaS platforms, and enterprise-scale systems.
π Why SmartJWT?
Traditional JWTs are static.
Real-world authorization is not.
SmartJWT bridges that gap by introducing a dynamic rules engine that enriches tokens at issuance time Γ’β¬β without databases, complex conditionals, or permission sprawl.
With SmartJWT you can:
- β Eliminate hardcoded role/permission logic
- β Adapt authorization based on context
- β Reduce development time and security errors
- β Scale authorization rules without refactoring
- β Monetize and license your platform securely
β‘ How it works
Get your credentials:
Obtain an API Key from the provider. This key is required to use SmartJWT services.Configure your rules:
Define your dynamic rules for claims and permissions. These rules determine how JWTs are enriched based on context such as user role, location, operation, etc.Configure SmartJWT:
Set up session token settings (Optional) and API Key (Required) in your application configuration. You can also register initial rules if needed.Validate & Generate:
The SDK validates your API Key before issuing a JWT and evaluates all applicable rules for the request context.
If the rules allow it, a JWT is generated with dynamic claims and permissions.
No database connection is needed for validation; everything is handled in-memory based on the rules and context.Use the JWT:
Include the generated JWT in your HTTP headers or API requests as usual. SmartJWT ensures that claims and permissions are applied dynamically based on your defined rules.
π³ Pricing & Licensing
SmartJWT SDK is licensed per API Key, available on a monthly or yearly basis:
| Plan | Price (USD) |
|---|---|
| Monthly | 50 |
| Yearly | 500 |
Purchase
Monthly (1 Month Access)
π Pay with PayPalYearly (1 Year Access)
π Pay with PayPal
API Key Delivery
After completing the payment, please send the payment receipt or proof of payment to
π§ zefyr92@gmail.com
with the subject line:
βRequest for SmartJWT API Keyβ
Your API key will be delivered after payment verification.
Once your payment is confirmed, you will receive your API Key and instructions to integrate SmartJWT into your project.
π¬ Support & Questions
If you have any questions or need assistance with SmartJWT, you can reach us at:
π§ zefyr92@gmail.com
Please use the following subject line to distinguish support requests from API Key requests:
βSmartJWT Support / Questionβ
Our team will get back to you as soon as possible.
π SmartJwt Rule Builder
To simplify the creation of dynamic rules, policies, and endpoint assignments, we provide a local GUI tool.
Executable Name: SmartJWTRuleBuilder.exe
πΉ Purpose
- Create new dynamic rules.
- Generate policies and associate them with rules.
- Configure endpoints and assign policies.
- Automatically generate the
SmartJWTConfiguration.csclass, ready to use in your API.
πΉ Usage of the local tool
π This tool can be used with a valid, purchased API key.
Download the tool:
Download SmartJwt Rule BuilderRun the executable:
SmartJWTRuleBuilder.exe
- Auto Generate Custom Dinamyc Rule Class:
π¦ Installation
dotnet add package SmartJWT
SmartJWT Quick Start
Simplify your configuration and register dynamic rules in a single call.
β‘ Quick Start (Program.cs)
// Configure SmartJWT (Session Token + Licensing + Dynamic Rules)
builder.Services.AddSmartJWT(options =>
{
// 1οΈβ£ Session Token Settings (Optional)
options.SecretKey = "super-secret-key-that-should-be-in-env-vars-at-least-32-chars-for-simetric-algorithm";
options.PrivateKey = "my private key for asimetric algorithm";
options.Algorithm = SecurityAlgorithms.HmacSha256;
options.Issuer = "SmartJWT.Example";
options.Audience = "SmartJWT.Users";
options.ExpirationMinutes = 60;
// 2οΈβ£ Licensing & API Key Settings (Required)
options.ApiKey = "sk_v1_your_purchased_api_key";
// 3οΈβ£ Dynamic Rules (Required)
options.Rules = new List<DynamicRule>
{
new DynamicRule
{
RuleId = "admin-rule",
Priority = 10,
IsActive = true,
Conditions = new List<RuleCondition>
{
new RuleCondition
{
Type = ConditionType.Role,
Operator = ConditionOperator.Equals,
Value = "Admin"
}
},
ClaimsToAdd = new List<DynamicClaim>
{
new DynamicClaim("role", "Admin")
},
Permissions = new List<string> { "read:all", "write:all" },
RiskScore = 5
},
new DynamicRule
{
RuleId = "read-only-user",
Priority = 5,
IsActive = true,
Conditions = new List<RuleCondition>
{
new RuleCondition
{
Type = ConditionType.Role,
Operator = ConditionOperator.Equals,
Value = "User"
}
},
ClaimsToAdd = new List<DynamicClaim>
{
new DynamicClaim("role", "User")
},
Permissions = new List<string> { "read:all" },
RiskScore = 1
}
};
});
π Generating Tokens
Inject DynamicJwtTokenGenerator into your controller , service or handlers and call GenerateSmartJWT passing the request context.
If you configured an ApiKey, you can use GenerateSmartJWT which internally validates the key before proceeding.
Note: SmartJWT performs a pre-validation step using your dynamic rules and policy engine. The token will only be generated if all conditions are satisfied, based on the user-defined dynamic rule class created via SmartJWT Rule Builder or manually.
Usage Example:
[HttpPost("login")]
public IActionResult Login([FromServices] DynamicJwtTokenGenerator generator)
{
// 1. Create the Request Context
var context = new SmartJWTRequestContext
{
UserId = "user-123",
UserName = "John Doe",
Role = "Admin",
Location = "LATAM",
RequestTime = DateTime.UtcNow,
IsMfaEnabled = true,
ResourcePath= "/api/orders",
};
// 2. Add custom data if needed for rules
context.CustomData.Add("Subscription", "Premium");
// 3. Generate the token (Rules are applied automatically)
var response = generator.GenerateSmartJWT(context);
return Ok(new {
token = response.Token,
appliedRules = response.AppliedRuleIds,
permissions = response.Permissions,
decisions = response.DecisionResult
});
}
π§ Rules Engine Overview
SmartJWT includes a built-in engine to evaluate conditions and dynamically enrich the JWT.
Engine Structure
- DynamicRule: Defines a rule with a
RuleId,Priority,Conditions,ClaimsToAdd, andPermissions. - RuleCondition: A specific requirement (e.g.,
Role Equals Admin) that must be met. - SmartJWTRequestContext: The data provided at runtime (User, Location, Time, etc.) against which rules are evaluated.
Available Condition Types
β
Role (Admin, User, etc.)
β
Location (US, LATAM, EU, etc.)
β
Time (Office hours, specific ranges)
β
Date (Specific calendar dates)
β
Operation (Read, Write, Delete)
β
Resource (Orders, Users, Settings)
β
Area (IT, Finance, HR)
β
Priority (Low, Medium, High)
β
IsMfaEnabled (Boolean status)
β
Enabled (Dynamic boolean status)
β
CustomData (Any custom key-value pair)
Available Operators
β
Equals, NotEquals
β
Contains, NotContains
β
In, NotIn (List of values)
β
GreaterThan, LessThan, GreaterThanOrEqual, LessThanOrEqual (For Sensitivity or Numbers)
β
StartsWith, EndsWith
β
Exists (For CustomData)
π οΈ Developer Definitions
As a developer, you have full control over:
- Rules to create: Defining identifying names like
"admin-office-hours"or"premium-access". - Specific Conditions: Mapping context fields to operators and values.
- Dynamic Claims: What data to inject into the JWT (e.g.,
access_level = "full"). - Permissions: Scopes to grant (e.g.,
"read:all","user:delete"). - Priority: Rules are evaluated in order of priority (higher number = higher priority).
π Practical Use Cases
1. Admin Access During Office Hours
Grant "full" access level only if the user is an Admin and the request is between 08:00 and 18:00.
var rule = new DynamicRule
{
RuleId = "admin-office-hours",
Priority = 10,
Conditions = new List<RuleCondition> {
new RuleCondition { Type = ConditionType.Role, Operator = ConditionOperator.Equals, Value = "Admin" },
new RuleCondition { Type = ConditionType.Time, Operator = ConditionOperator.In, Value = "08:00-18:00" }
},
ClaimsToAdd = new List<DynamicClaim> { new DynamicClaim("access_level", "full") }
};
2. Regional Access Restrictions (LATAM)
Users in LATAM receive "limited" access and only "read" permissions.
var rule = new DynamicRule {
RuleId = "latam-limited-access",
Conditions = new List<RuleCondition> {
new RuleCondition { Type = ConditionType.Location, Operator = ConditionOperator.Equals, Value = "LATAM" }
},
ClaimsToAdd = new List<DynamicClaim> { new DynamicClaim("access_level", "limited") },
Permissions = new List<string> { "read" }
};
3. MFA Required for Priority Resources
Only grant "delete" permissions if the resource priority is "High" AND MFA is enabled.
var rule = new DynamicRule {
RuleId = "secure-delete",
Conditions = new List<RuleCondition> {
new RuleCondition { Type = ConditionType.Priority, Operator = ConditionOperator.Equals, Value = "High" },
new RuleCondition { Type = ConditionType.IsMfaEnabled, Operator = ConditionOperator.Equals, Value = "true" }
},
Permissions = new List<string> { "delete" }
};
4. HR Area Resource Management
Grant managers in the HR Area permission to manage employees.
var rule = new DynamicRule {
RuleId = "hr-manager-rule",
Conditions = new List<RuleCondition> {
new RuleCondition { Type = ConditionType.Area, Operator = ConditionOperator.Equals, Value = "HR" },
new RuleCondition { Type = ConditionType.Role, Operator = ConditionOperator.Equals, Value = "Manager" }
},
Permissions = new List<string> { "manage_employees" }
};
5. Custom Subscription-Based Access
Use CustomData to check for a "Premium" subscription status.
var rule = new DynamicRule {
RuleId = "premium-features",
Conditions = new List<RuleCondition> {
new RuleCondition { Type = ConditionType.CustomData, CustomKey = "Subscription", Operator = ConditionOperator.Equals, Value = "Premium" }
},
ClaimsToAdd = new List<DynamicClaim> { new DynamicClaim("feature_set", "ultimate") }
};
Β© 2026 SmartJWT - Secure & Dynamic Authentication.
| 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. |
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.0)
- Microsoft.IdentityModel.Tokens (>= 7.1.2)
- System.IdentityModel.Tokens.Jwt (>= 7.1.2)
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.0.24 | 88 | 2/17/2026 | |
| 1.0.23 | 93 | 2/10/2026 | |
| 1.0.22 | 91 | 2/10/2026 | |
| 1.0.21 | 88 | 2/10/2026 | |
| 1.0.20 | 89 | 2/10/2026 | |
| 1.0.19 | 100 | 1/31/2026 | |
| 1.0.18 | 96 | 1/31/2026 | |
| 1.0.17 | 102 | 1/31/2026 | |
| 1.0.16 | 98 | 1/16/2026 | |
| 1.0.15 | 98 | 1/16/2026 | |
| 1.0.14 | 94 | 1/16/2026 | |
| 1.0.13 | 98 | 1/16/2026 | |
| 1.0.12 | 95 | 1/16/2026 | |
| 1.0.11 | 95 | 1/16/2026 | |
| 1.0.10 | 134 | 1/14/2026 | |
| 1.0.9 | 131 | 1/14/2026 |