9
votes

MVC6 non autorisé entraîne de rediriger à la place

J'ai essayé d'empêcher la redirection lorsque je retourne une iactionnelle notaurée d'un contrôleur, mais quelles que soient mes tentatives, il est notauthorized se traduit par une redirection.

J'ai essayé ce qui est mentionné Here (même problème, utilisant le cadre de bêta plus âgé, j'utilise 1.0.0-RC1-final). Je n'ai pas l'espace de nom de notifications (a été supprimé dans RC1-Final). P>

Ceci est mon contrôleur de connexion: P>

        services.Configure<CookieAuthenticationOptions>(o =>
        {
            o.LoginPath = PathString.Empty;
            o.ReturnUrlParameter = PathString.Empty;
            o.AutomaticChallenge = false;
        });


2 commentaires

Essayez-vous de le faire sur une page de connexion? Ou est-ce pour l'authentification de l'API de repos? Si c'est pour une API, vous pourriez regarder cela: Wildermuth.com/2015/9/10/asp_net_5_identity_and_rest_apis


API de repos, votre lien suppose que les notifications espaces de noms existent, mais il a été supprimé. La solution liée ne fonctionne plus.


4 Réponses :


9
votes

La solution ne doit pas configurer directement CookieAuthentiollageOptions directement, mais faites-la via IdentityOptions comme ceci:

        services.Configure<IdentityOptions>(o =>
        {
            o.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
            {
                OnRedirectToLogin = ctx =>
                {
                    if (ctx.Response.StatusCode == (int)HttpStatusCode.Unauthorized)
                    {
                        return Task.FromResult<object>(null);
                    }
                    ctx.Response.Redirect(ctx.RedirectUri);
                    return Task.FromResult<object>(null);
                }
            };
        });


2 commentaires

Il suffit d'utiliser o.cokies.atapiClicationcookie.automaticchallenge = false; suffisait pour moi (je n'ai jamais voulu une redirection).


@ Peppel-G C'est la seule chose que je puisse me rendre au travail. Merci beaucoup.



8
votes

pris d'ici (Shawn Wildermuth -> API d'identité et de repos ASP.NET 5 -> Commentaire de "Mehdi Hanafi") et a testé l'API avec Postman

config.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
{
    OnRedirectToLogin = ctx =>
    {
        if (ctx.Request.Path.StartsWithSegments("/api") &&
        ctx.Response.StatusCode == 200)
        {
            ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            return Task.FromResult<object>(null);
        }
        else
        {
            ctx.Response.Redirect(ctx.RedirectUri);
            return Task.FromResult<object>(null);
        }
    }
};


1 commentaires

Comment l'obtenez-vous de rediriger en premier lieu. Je souhaite à Dieu que je pourrais avoir le mien pour rediriger. Ça ne le fera pas.



2
votes

Si vous avez des pages pour lesquelles la redirection est souhaitée et que d'autres URL qui ne doivent pas avoir de redirection, voir cette question pour une solution qui utilise la logique redirection par défaut uniquement pour les URL non-API:

Supprimer Redirect sur les URL de l'API dans ASP.NET CORE


0 commentaires

4
votes

de l'identité 2.0, Vous auriez besoin d'ajouter: xxx

et dans configureservices: xxx

La vérification des segments doit bien sûr être ajustée à vos itinéraires. < / p>


0 commentaires