J'essaie de développer une application utilisant Blazor Webassembly et je me demande comment je peux protéger toute ma demande si l'utilisateur n'est pas authentifié. Le comportement que j'oublierais est:
Mieux
Pour le moment, j'ai mis en œuvre ce comportement en appliquant le [Authorize]
Attribut à chaque page, mais je voudrais le centraliser.
J'ai atteint cet objectif sur le côté serveur de blazor appliquant le [Authorize]
attribut à l'intérieur de _Host.razor
composant.
Y a-t-il une solution même pour le côté du client Blazor?
Fondamentalement pour appliquer l'autorisation à toutes les pages de blazorapp.client, vous devez ajouter:
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
... dans votre fichier _imports.razor.
De plus, vous pouvez ajouter:
@attribute [Microsoft.AspNetCore.Authorization.AllowAnonymous]
... sur les pages qui ne nécessitent pas d'autorisation.
De plus, si vous vouliez rediriger un utilisateur sur n'importe quelle page, voici quelque chose que j'ai proposé:
<NotAuthorized>
@if (true) { navMan.NavigateTo("login"); }
</NotAuthorized>
... Où Navman est une instance injectée de NavigationManager. Ici, je redirige de l'utilisateur à mon login.Razor s'ils essaient d'accéder à une page utilisateur autorisée uniquement.
J'ai essayé la solution de @Brett et ça a fonctionné, mais à rediriger vers la page, l'utilisateur l'est venu de cela fini par dire Authorizing...
, Checking login state...
Et puis enfin Completing login...
et est coincé là-bas. L'utilisateur a ensuite dû cliquer sur un lien ou tapez manuellement l'URL précédente pour récupérer.
Microsoft a maintenant une documentation pour " nécessite une autorisation de l'application complète ".
Selon la documentation, vous pouvez soit:
_Imports.razor
fichier:@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
J'ai ajouté le code à _Imports.razor
Mais alors je n'ai reçu qu'un écran blanc pour le contenu:
J'ai ensuite remarqué que https://localhost:44123/authentication/login
m'a également donné un écran blanc que Shared\RedirectToLogin.razor
Normalement pointe vers. J'ai ensuite ajouté @attribute [AllowAnonymous]
à Pages\Authentication.razor
Et puis tout a fonctionné comme prévu et je ne suis pas coincé coincé.
Avec cette solution, je pourrais également voir la valeur par défaut You are logged out.
un message.
Lors de mon voyage se familiariser avec Blazor, je suis un tutoriel et l'auteur a un moyen agréable et propre de résoudre ce problème aussi. Comme tout semble être un composant dans Blazor, votre page de connexion est probablement un composant également. C'est au moins dans le tutoriel. Donc, tout ce qu'il fait est ceci:
<NotAuthorized>
<Login />
</NotAuthorized>
Et vous devez ajouter la bonne utilisation à votre composant de connexion bien sûr.
L'inconvénient de cette solution est que l'URL ne correspond pas à la page que vous voyez lorsque vous n'êtes pas connecté.