Création d'une application MVC
Présentation
Notre SSO prendra la forme d’une simple application ASP.NET MVC (Model View Controller). Cela surprendra sûrement nombre d’entre vous, mais un SSO n’est pas une application visuellement complexe, il s’agit juste de quelques champs de saisie. Les règles métier ne le sont pas plus : vérifier qu’un e-mail est correct, qu’un mot de passe respecte bien les règles établies, etc. Dans ces conditions, l’utilisation d’un framework JavaScript tel que React, Angular ou encore du framework Microsoft Blazor serait un peu surdimensionnée.
Cela reste toutefois possible et peut présenter un intérêt, par exemple, si votre entreprise a un design system complet sur la base d’un de ces frameworks. Toutefois, l’utilisation d’un front-end séparé complexifie les choses tant d’un point de vue de la sécurité que de l’hébergement, il faut donc bien peser le pour et le contre.
Création du projet
Les captures d’écran de ce livre sont faites avec Visual Studio 2022, mais vous pouvez tout à fait utiliser d’autres éditeurs tels que Visual Studio Code, ou encore Rider.
Commencez par créer un nouveau projet :
![images/02EI001.png](https://www.eni-training.com/download/36911e24-2989-4658-9b22-fe9795af6f09/images/02EI001.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Et choisissez une application web MVC en C# :
![images/02EI002.png](https://www.eni-training.com/download/36911e24-2989-4658-9b22-fe9795af6f09/images/02EI002.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Puis, configurez son nom et l’emplacement de la solution sur votre disque dur :
![images/02EI003.png](https://www.eni-training.com/download/36911e24-2989-4658-9b22-fe9795af6f09/images/02EI003.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Et les options de base :
![images/02EI004.png](https://www.eni-training.com/download/36911e24-2989-4658-9b22-fe9795af6f09/images/02EI004.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Une fois le projet créé, l’arborescence doit correspondre à ceci :
![images/02EI005.png](https://www.eni-training.com/download/36911e24-2989-4658-9b22-fe9795af6f09/images/02EI005.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Le template de projet que nous avons créé contient déjà les mécaniques nécessaires à un système d’authentification basique. Dans le fichier Program.cs sont définis les services qui seront disponibles via l’injection de dépendance.
L’injection de dépendances est un modèle de conception qui a pour but d’injecter les dépendances d’une classe lors de la construction de celle-ci, plutôt que de les instancier dans les méthodes qui en ont besoin. Ceci évite d’avoir un couplage fort entre les classes et permet l’utilisation de dépendances factices pour les tests.
L’abstraction de la base de données se fait au travers des DbContext d’Entity Framework :
var connectionString =
builder.Configuration.GetConnectionString("DefaultConnection") ?? ...