Aller au contenu principal

31-1 Préparation de l'API

La première étape sera de faire la logique d'authentification auprès de l'API. Comme nous l'avons fait pour les formulaires, une fois que la logique est en place et fonctionnelle au niveau de l'API, il est plus facile de basculer vers le code client. Cela permet entre autres d'isoler plus facilement les problèmes potentiels.

Installation de Microsoft.AspNetCore.Authentication.JwtBearer

La librairie JwtBearer permettra de récupérer en provenance de l'en-tête HTTP Authorization le jeton JWT et de le valider automatiquement.

  1. À partir du projet Web.Api -> Manage NuGet Packages
  2. Faire une recherche pour Microsoft.AspNetCore.Authentication.JwtBearer
  3. Installer la librairie dans le projet Web.Api

Ajouter Identity au projet d'API

De plus, nous aurons besoin de Identity, la librairie de gestion d’utilisateurs de Microsoft. On peut ajouter la dépendance et la lier à nos classes utilisateur et role via Program.cs.

Snowfall.Web.Api/Program.cs
// Identity
builder.Services.AddScoped<IRoleStore<ApplicationRole>, RoleRepository>();
builder.Services.AddScoped<IUserStore<ApplicationUser>, UserRepository>();
builder.Services
.AddIdentity<ApplicationUser, ApplicationRole>();

Ajouter un contrôleur d'authentification

Pour authentifier les utilisateurs et retourner un jeton, nous aurons besoin d'un contrôleur. On appellera ce dernier de la même façon que dans le projet MVC, soit AuthController.

  1. À partir du projet Web.Api, sous le dossier Controllers -> Add -> Scaffolded Item
  2. Choisir API Controller - Empty
  3. Nommer le contrôleur AuthController

Ajouter une fonction d'authentification de base

Pour recevoir et traiter les demandes de connexion, une action de contrôleur sera nécessaire. Commençons par une fonction de base Connexion qui dépondra aux requêtes vers /api/auth de type POST.

Snowfall.Web.Api/Controllers/AuthController.cs
/// <summary>
/// POST /api/auth
/// Permets d'authentifier un utilisateur et de retourner un jeton d'authentification (JWT)
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> Connexion()
{
return Ok();
}

Définir un DTO pour la connexion et le retour de connexion

Pour gérer la connexion, il nous faudra un DTO pouvant recevoir les informations de connexion (courriel et mot de passe) et un DTO pouvant retourner le jeton.

Créer ConnexionDto

Pour connecter un utilisateur, le DTO contiendra les informations suivantes:

  • Email
  • Password
  1. Sous le projet Application, sous le dossier Dtos -> Add -> Directory
  2. Nommez le dossier Auth
  3. Sous le nouveau dossier Auth, -> Add -> Class/Interface
  4. Nommez la classe ConnexionDto
Snowfall.Application/Dtos/Auth/ConnexionDto.cs
public class ConnexionDto
{
// N'oubliez pas la gestion des messages d'erreur (Ressources)
[Required]
[EmailAddress]
public string? Email { get; set; }

[Required]
[DataType(DataType.Password)]
public string? Password { get; set; }
}

Créer ResultatConnexionDto

Pour retourner le résultat de l'authentification, on créera un DTO ResultatConnexionDto qui comprendra essentiellement:

  • Jeton: le jeton advenant le cas où l'authentification a fonctionné
  1. Sous le projet Application, sous le dossier Auth, -> Add -> Class/Interface
  2. Nommez la classe ResultatConnexionDto
Snowfall.Application/Dtos/Auth/ResultatConnexionDto.cs
public class ResultatConnexionDto
{
public string Token { get; set; }
}