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.
- À partir du projet
Web.Api
->Manage NuGet Packages
- Faire une recherche pour
Microsoft.AspNetCore.Authentication.JwtBearer
- 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
.
// 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
.
- À partir du projet
Web.Api
, sous le dossierControllers
->Add
->Scaffolded Item
- Choisir
API Controller - Empty
- 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
.
/// <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:
- Password
- Sous le projet
Application
, sous le dossierDtos
->Add
->Directory
- Nommez le dossier
Auth
- Sous le nouveau dossier
Auth
, ->Add
->Class/Interface
- Nommez la classe
ConnexionDto
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é
- Sous le projet
Application
, sous le dossierAuth
, ->Add
->Class/Interface
- Nommez la classe
ResultatConnexionDto
public class ResultatConnexionDto
{
public string Token { get; set; }
}