Aller au contenu
← Tous les projets

JeBalance — application N-tier

Application ASP.NET Core 7 / Blazor en architecture DDD, avec authentification JWT par rôles.

Code source sur GitHub ↗

Le projet

JeBalance est une plateforme de signalement de fraude fiscale, réalisée dans le cadre du cours d’architecture N-tiers. Un citoyen y dépose une dénonciation ; l’administration fiscale la traite via des endpoints protégés par rôle.

Fonctionnalités

Architecture

L’application suit une architecture Domain Driven Design sur le framework ABP, structurée en trois couches.

Couche Web — HttpApi. Point d’entrée des requêtes, et donc l’endroit où l’authentification est configurée. La validation des jetons JWT y est déclarée :

context.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.IssuerSigningKey)),
        ValidateIssuer = true,
        ValidIssuer = jwtSettings.Issuer,
        ValidateAudience = true,
        ValidAudience = jwtSettings.Audience,
        ValidateLifetime = true,
    };
});

Couche Application — logique métier. Les interfaces d’AppService, les DTO et les modèles sont déclarés côté Application Contract, les implémentations côté Application. Particularité intéressante d’ABP : en héritant d’ApplicationService, les contrôleurs REST sont générés automatiquement à partir des noms de méthodes, sans écrire un seul contrôleur.

public class DenonciationAppService : ApplicationService, IDenonciationAppService, ITransientDependency

La protection d’un endpoint tient alors en un attribut :

[Authorize(Roles = "adminFiscale")]

Le mapping entité ↔ DTO est délégué à AutoMapper, qui n’a besoin d’aucune configuration tant que les propriétés portent le même nom.

Couche Domaine et infrastructure. Les entités héritent d’Entity<Guid>, ce qui confie à ABP l’indexation et les clés uniques. Le DbContext, les repositories et les migrations Entity Framework Core vivent dans le projet EntityFrameworkCore :

public interface IEfCoreDenonciationRepository : IRepository<Entities.Denonciation, Guid>
{
    Task<Guid> RegisterDenonciationAsync(Entities.Denonciation denonciation);
    Task<Entities.Denonciation> GetDenonciationAsync(Guid id);
    Task<List<Entities.Denonciation>> ListDenonciationNonTraiteAsync();
}

Hériter d’IRepository<Entity, Guid> fournit les opérations CRUD sans les réécrire.

Bilan

Tous les endpoints sont fonctionnels et testés. En revanche, faute de temps, l’interface Blazor n’a pas pu être reliée à l’ensemble des endpoints : la création de dénonciation, la réponse administrative et le changement de statut VIP se pilotent via l’API, pas encore depuis l’écran.