Avec la sortie ASP.NET Core updates in .NET 5 Preview 8, deux nouvelles fonctions font leurs apparitions : ProtectedLocalStorage et ProtectedSessionStorage.
Jusqu’à présent j’utilisais la superbe librarie de Chris Sainty : Blazored SessionStorage qui fait parfaitement son boulot ! Maintenant avec ses nouvelles fonctions disponibles, on va pouvoir ajouter un grain de sécurité aux variables stockées dans le navigateur. L’avantage est que l’utilisation est très simple, vos variables seront illisibles et vous pourrez détecter lors de leur lecture si elles ont été altérées !
Mise en place :
Dans un premier temps, il faut upgrader le projet en .NET 5 Preview 8 (ou plus si vous lisez mon post dans le futur 😁):
1) Mettez à niveau :
- Microsoft.AspNetCore.* package references → 5.0.0-preview.8.*. ou +
- Microsoft.Extensions.* package references → 5.0.0-preview.8.*. ou +
- System.Net.Http.Json package references → 5.0.0-preview.8.*. ou +
2) Ensuite, ajoutez le paquet Nuget Microsoft.AspNetCore.Components.ProtectedBrowserStorage
3) Puis, dans startup.cs à ConfigureServices, ajoutez :
4) Enfin dans _Imports.razor, ajouter :
LocalStorage ou SessionStorage
C’est comme vous voulez mais la différence est là selon votre besoin :
Local Storage | Session Storage | |
Capacité | 10Mo | 5Mo |
Accessible depuis | Tous les onglets | L’onglet actif |
Expiration | Jamais | A la fermeture de l’onglet |
Dans mon cas je vais utiliser SessionStorage :
Stocker une variable
// code HTML
@code
{
protected override async Task OnInitializedAsync()
{
await protectedSessionStorage.SetAsync("userToken", mytoken);
}
}
Attention, n’écrivez pas une variable int par exemple directement, cela plantera à la lecture ; Ajoutez .ToString()
Lire une variable
// code HTML
@code
{
protected override async Task OnInitializedAsync()
{
ProtectedBrowserStorageResult<string> toto = await protectedSessionStorage.GetAsync<string>("userToken");
if (toto.Success)
{
string mytoken = toto.Value;
}
else
{
// Demander gentiment à l'utilisateur de quitter votre application
}
}
}
On le voit, le gros avantage est que la variable est illisible et si elle est altérée pour une raison ou pour une autre vous pouvez gérer votre code comme bon vous semble.