Travailler avec les url de retour dans asp.net de base
Nous essayons de rediriger l'utilisateur(à l'aide de retourner URL) de la page de connexion si l'utilisateur n'est pas authentifié/autorisé lors de l'accès à l'URL donnée. Cependant, nous ne sommes pas en mesure d'ajouter les paramètres personnalisés(clientname dans ce cas) dans le chemin de rediriger l'utilisateur vers la page de connexion. Nous sommes à l'aide de asp.net l'identité de cadre de base.
Dans De Démarrage.cs nous avons défini l'itinéraire ci-dessous, qui seront applicables à tous.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "Edge",
template: "{clientname}/{controller}/{action}");
});
également ajouté au-dessous de la ligne de code pour s'assurer que toutes les Url d'authentification requis
services.AddMvc(o =>
{
o.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));
})
et configuré le IdentityOptions
pour rediriger vers la page de connexion comme suit
services.Configure<IdentityOptions>(opt =>
{
opt.Cookies.ApplicationCookie.LoginPath = new PathString("/Account/Login");
});
et Compte Contrôleur ci-dessous est la méthode de login
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
this.ViewData["ReturnUrl"] = returnUrl;
return View();
}
Si l'utilisateur tente d'accéder à une URL sans authentification il doit rediriger vers la page de connexion. Considérons ci-dessous méthode de l'Indice de la Maison Contrôleur comme un exemple.
public IActionResult Index()
{
return View();
}
Mais chaque fois que nous essayons de rediriger l'utilisateur vers la page de login, il n'ajoute pas le nom du client dans l'URL. Il fait en dessous de l'URL où clientname est manquant dans /Account/Login
http://localhost:5002/Account/Login?ReturnUrl=/ClientA/home/index
De ce fait, il en est résulté une erreur 404 Page not found.Donc, ce que les changements que nous devons faire pour la bonne redirection.
L'Url doit être constituée comme suit
http://localhost:5002/ClientA/Account/Login?ReturnUrl=/ClientA/home/index
- vous pouvez poster l'ensemble de la routeconfig.cs
- Je suis à l'aide de asp.net noyau où routeconfig.cs n'est pas présent. Nous avons défini les itinéraires de Démarrage.cs fichier dont j'ai fourni dans le code
Vous devez vous connecter pour publier un commentaire.
Vous êtes particulièrement réglage de la LoginPath sur vos options d'authentification. Par défaut, il sera toujours vous diriger là où vous êtes authentifié, indépendamment de la ressource que vous avez essayé de l'atteindre. Je crois que vous pouvez avoir à remplacer ou d'en hériter/remplacer certaines des entrailles, afin d'avoir la LoginPath être dynamique basé sur de la ressource que vous demandez. Je ne suis pas sûr si dynamique LoginPaths sont pris en charge nativement le contraire? J'ai peut-être tort.
Sur une autre note de sécurité, vous devez vérifier que la ressource dans la ReturnUrl est local à votre application avant de l'utiliser, ou même retourner à la page d'accueil de votre application. Sinon, il est possible pour une URL mal formée à usurper le rediriger l'emplacement d'une ressource conçue pour imiter le vrai en apparence, mais avec une intention malveillante.
Il semble qu'ils ont changé dans le .Net Core, MVC
Comment cela a fonctionné pour moi:
Maintenant passer à HTML Rasoir Code:
Et il fonctionne bien maintenant!
vous pouvez utiliser
Events
pour obtenir de la Demande et de la rediriger vers ce que l'url que vous souhaitez comme cet exemple.voir ce lien: Comment faire pour rediriger les accès refusé de connexion en fonction de l'URL sur ASP.NET Core 2 Identité?