web-dev-qa-db-fra.com

Blazor Rediriger pour se connecter si l'utilisateur n'est pas authentifié

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:

  • Si un utilisateur anonyme demande une page, il sera redirigé vers la page de connexion

Mieux

  • Un utilisateur DOIT être authentifié pour l'utilisation de cette application

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?

6
Leonardo Lurci

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.

1
mend0k

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.

enter image description here

enter image description here

enter image description here

Microsoft a maintenant une documentation pour " nécessite une autorisation de l'application complète ".

https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/?view=aspnetcore-5.0#require-authorize-Pour-App

Selon la documentation, vous pouvez soit:

  • Utilisez la directive Autoriser l'attribut dans le _Imports.razor fichier:
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
  • Ajoutez l'attribut Authorize à chaque composant Razor dans le dossier Pages.

J'ai ajouté le code à _Imports.razor Mais alors je n'ai reçu qu'un écran blanc pour le contenu:

enter image description here

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é.

enter image description here

Avec cette solution, je pourrais également voir la valeur par défaut You are logged out. un message.

enter image description here

0
Ogglas

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é.

0
Cornelis