Pour l’une des applications de la Diagonale du Poulpe, nous souhaitons pouvoir nous authentifier, pour avoir un compte personnalisé.
Pour éviter de créer tout un système d’authentification et donc de recréer une roue existante, nous avons décidé de :
- utiliser l’authentification externe de facebook
- ne pas utiliser un compte local (pour cette première étape)
Du middleware et du paramétrage de service
Pour utiliser l’authentification externe, il existe X étapes essentielles à respecter.
C’est parti, suivez le guide :
- Ajouter les références manquantes
- Paramétrer le ConfigurationBuilder (app)
- Ajouter des extensions de méthodes à la collection de Services.
Ajout des références manquantes
Puisque tout est module (un peu beaucoup comme node.js en fait, sauf qu’à la place des npm packages, on a des dlls) dans .net core, ici, nous allons installer le module (la dll) qui va nous manquer pour utiliser l’authentification Facebook :
Microsoft.AspNetCore.Authentication.Facebook
C’est une librairie qui s’installe depuis NuGet.
Paramétrer le ConfigurationBuilder
Il est important d’ajouter un middleware qui va vérifier les authentifications dans les requêtes :
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
….
app.UseAuthentication();
Il nous faut également penser à ajouter la gestion des cookies :
app.UseCookiePolicy();
Extensions de méthodes pour le ServiceCollection
Enfin, clou du spectacle pour que tout fonctionne, il nous faut :
- Etendre le ServiceCollection dans la méthode ConfigureServices : services.AddAuthentication()
- Compléter cette extension avec le paramétrage pour Facebook :
services.AddAuthentication().AddFacebook(option =>
{
option.AppId = Configuration[« Authentication:Facebook:AppId »];
option.AppSecret = Configuration[« Authentication:Facebook:AppSecret »];
});
Penser sécurité des données sensibles
En voyant la dernière partie du code ajouté, vous vous dîtes, attends, là, vous déconnez : charger tout depuis un fichier de configuration, c’est pas cool …
Mettre des données sensibles dans un fichier de configuration, ça craint, non ?
Et vous avez totalement raison !
Comment faire alors, pour éviter ça ?
Pourquoi ne pas avoir un fichier de données sensibles qui ne serait présent qu’en développement ?
Et pourquoi ne pas permettre que ces données sensibles ne soient accessibles, en production, qu’à travers des variables d’environnement ?
Vous avez tout bon, prochaine étape, nous ajoutons l’appel aux données sensibles, via AddUserSecrets.