ASP.NET Core 2.0 désactiver automatique défi
Après la mise à niveau de mon ASP.NET projet Core à la 2.0, les tentatives d'accès à des ordinateurs d'extrémité protégés ne retourne plus de 401, mais redirige vers une (non-existant) d'extrémité dans une tentative pour permettre à l'utilisateur de s'authentifier.
Le comportement souhaité est de l'application, il suffit de retourner un 401. Auparavant, je mettrais AutomaticChallenge = false
lors de la configuration de l'authentification, mais selon cet article le paramètre n'est plus pertinente (en fait, il n'existe pas plus).
Mon authentification est configuré comme ceci:
De démarrage.cs.ConfigureServices():
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(o =>
{
o.Cookie.Name = options.CookieName;
o.Cookie.Domain = options.CookieDomain;
o.SlidingExpiration = true;
o.ExpireTimeSpan = options.CookieLifetime;
o.TicketDataFormat = ticketFormat;
o.CookieManager = new CustomChunkingCookieManager();
});
Configurer():
app.UseAuthentication();
Comment puis-je désactiver automatique défi, de sorte que l'application renvoie 401 lorsque l'utilisateur n'est pas authentifié?
Ce que j'ai fait pour (temporairement) la résolution de ce problème est l'utilisation de mon personnalisée
[Auth]
attribut, et j'étais de retour à 400 au lieu de 401.Pourriez-vous parler de ce que cette propriété n'?
OriginalL'auteur severin | 2017-08-25
Vous devez vous connecter pour publier un commentaire.
Comme l'ont souligné certains des autres réponses, il n'est plus un paramètre pour désactiver le défi avec l'authentification par cookie. La solution est de remplacer
OnRedirectToLogin
:Cela pourrait changer dans l'avenir: https://github.com/aspnet/Security/issues/1394
OriginalL'auteur severin
Après quelques recherches, j'ai trouvé que nous pouvons faire face à ce problème si le soufflet approche:
On peut ajouter deux schéma d'Authentification à la fois l'Identité et JWT; et l'utilisation de l'Identité régime pour l'authentification et JWT schéma pour le défi, JWT ne redirigera pas à toute connexion en route tout un défi.
cela fonctionne pour moi
Gardez à l'esprit que l'ordre est important. Ne fonctionne pas pour moi alors que AddAuthentication était avant AddIdentity. L'ordre dans cette réponse est correcte.
OriginalL'auteur Zheng Xing
Selon cette article:
En 1.x, le AutomaticAuthenticate et AutomaticChallenge propriétés étaient destinés à être installés sur un seul schéma d'authentification. Il n'y a pas de bonne façon de respecter cela.
En 2.0, ces deux propriétés ont été enlevés comme des drapeaux sur l'individu AuthenticationOptions instance et qui ont déménagé dans la base de AuthenticationOptions classe. Les propriétés peuvent être configurées dans le AddAuthentication appel de méthode à l'intérieur de la ConfigureServices méthode de Démarrage.cs
Vous pouvez également utiliser une version surchargée de la AddAuthentication méthode pour définir plus d'une propriété. Dans la suite de méthode surchargée exemple, le schéma par défaut est définie à CookieAuthenticationDefaults.AuthenticationScheme. Le schéma d'authentification peut également être spécifié dans votre propre [Autoriser] des attributs ou des politiques d'autorisation.
Définir un schéma par défaut dans la version 2.0 si l'une des conditions suivantes est remplie:
les régimes de
Une exception à cette règle est le AddIdentity méthode. Cette méthode ajoute des cookies pour vous et définit la valeur par défaut de l'authentification et de défi systèmes à la demande de cookie IdentityConstants.ApplicationScheme. En outre, il définit la connexion par défaut dans le schéma à l'externe cookie IdentityConstants.ExternalScheme.
Espère que cela vous aidera.
OriginalL'auteur Sergey
Semblable à @Serverin, réglage de la OnRedirectToLogin de l'Application Cookie travaillé, mais doit être fait dans la déclaration de services suivants.AddIdentity en Démarrage.cs:ConfigureServices:
OriginalL'auteur sammarcow
C'est le code source de CookieAuthenticationEvents.OnRedirectToLogin :
Vous pouvez ajouter des "X-requested-with: XMLHttpRequest" en-Tête de la demande tout en faisant des appels de l'API à partir de votre client.
OriginalL'auteur Zack
Je ne suis pas sûr de savoir comment générer l'erreur 401, toutefois, si vous utilisez l':
Cela vous permettra de rediriger quelque part, quand le défi a échoué.
OriginalL'auteur Gary Holland
Une autre façon de faire ce qui est plus DI/analyse de l'environnement est d'utiliser
AuthenticationSchemeOptions.EventsType
(une autre réponse points ici). Cela vous permettra de tirer d'autres composants dans le processus de résolution.Voici un exemple, y compris l'enregistrement et la résolution qui s'arrête à la redirection par défaut pour vous connecter sur un non authentifié demande, et, au lieu juste de retour avec un dur
401
. Il dispose également d'un slot pour toutes les autres dépendances qui peuvent avoir besoin de connaître les requêtes authentifiées.Dans
Startup.cs
:Puis, dans
MyEventsWrapper.cs
:OriginalL'auteur eouw0o83hf