Die Autorisierung wurde für diese Anfrage verweigert. Immer

8

Ich habe bereits ein MVC webApi-Projekt erstellt und möchte nun Authentifizierung und Autorisierung verwenden. Ich denke, dass ich diese Sicherheit bereits implementiert habe, aber aus irgendeinem Grund wird etwas schlecht, wenn ich meine Zugangsdaten schreibe und versuche, einige webApi-Methoden aufzurufen, wird die Meldung "Autorisierung wurde abgelehnt für diese Anfrage" angezeigt.

Dies ist der Code, den ich implementiert habe.

WebApiConfig:

%Vor%

Routing-Konfiguration:

%Vor%

Controller:

%Vor%

HTML:

%Vor%

JS:

  

$ (Dokument) .ready (Funktion () {       $ ('# btnLogIn'). click (logIn); });

%Vor%     
user3442776 07.10.2015, 22:29
quelle

3 Antworten

11

Sie sollten das [AllowAnonymous] -Attribut dem LogInPost

Ihres Controllers hinzufügen

Wenn Sie Ihren Filtern den Wert AuthorizeAttribute hinzugefügt haben, haben Ihre Controller davon ausgegangen, dass sie für alle Aktionen, einschließlich derjenigen, die für die Anmeldung verwendet wurde, standardmäßig eine Autorisierung benötigen.

    
Jonathon Chase 07.10.2015 23:29
quelle
3

Machst du Windows-Authentifizierung? erhalten Sie den Fehler "Zugriff verweigert"?

Manchmal führt IISEXpress und IIS einen Trick aus, und um das zu überwinden, habe ich die Site in der lokalen iis (inetmgr) gehostet, die Authentifizierung aktiviert (Fenster, falls zutreffend) und jetzt ausführen.

P.S. Nicht alle Maschinen haben standardmäßig einen IIS-Server installiert. Wenn inetmgr nicht funktioniert, müssen Sie es über die Systemsteuerung installieren - & gt; Windows-Funktionen - & gt; Wählen Sie alle Features von IIS und ASP .NET

aus

Hoffe, das wird helfen.

    
dotNetAuthor 07.10.2015 23:31
quelle
2

Entschuldigung für solch eine späte Antwort - Ich habe Ihre Frage gefunden, weil ich, nachdem ich von der von IIS gehosteten Web-API zu einer selbst gehosteten Web-API gewechselt bin, gerade das gleiche Problem festgestellt habe.

In meinem Fall wurde das Problem durch die Initialisierung von Thread.CurrentPrincipal verursacht. Etwas Hintergrund:

  1. Ich verwende einen benutzerdefinierten AuthenticationHandler (von DelegationHandler erben)
  2. In diesem Handler überschreibe ich die SendAsync-Methode, um eine benutzerdefinierte Benutzervalidierung durchzuführen.
  3. Wenn die Validierung erfolgreich ist, konstruiere ich eine Instanz der ClaimsPrincipal-Klasse, die einige Behauptungen über den aktuellen Benutzer enthält.

Zuvor habe ich diese ClaimsPrincipal-Instanz Thread.CurrentPrincipal zugewiesen, bevor die Nachricht an die verbleibenden Nachrichtenhandler in der Pipeline weitergeleitet wurde. Die Lösung für mich bestand jedoch darin, stattdessen das Prinzipalelement für die HttpRequestContext-Instanz zu verwenden, die zu der HttpRequestMessage-Instanz gehört, die an SendAsync übergeben wird. Daher (in F #),

%Vor%

Ich hoffe, dass Ihnen das irgendwie helfen kann.

    
1MuddyDog 10.05.2016 05:50
quelle