0

ich für meinen Api Azure App Dienste verwenden (ASP.NET Core) und ich habe einen Api-Controller wie dieseazur-mobile-apps 401 Fehler bekommen, wenn invokeApi Aufruf

[Route("api")] 
public class PingController : Controller 
{ 
    [HttpGet] 
    [Route("ping")] 
    public string Ping() 
    { 
     return "Pong"; 
    } 

    [Authorize] 
    [HttpGet("claims")] 
    public object Claims() 
    { 
     return User.Claims.Select(c => 
     new 
     { 
      Type = c.Type, 
      Value = c.Value 
     }); 
    } 
} 

Dann ich bin versucht, Zugang dies von einem Ionic2 (Typoskript & Cordova) Implementierung wie diese

this.client = new WindowsAzure.MobileServiceClient('https://mysite.azurewebsites.net/'); 
this.client.login('google').then(result=>{ 
    this.client.invokeApi("claims", { 
     body: null, 
     method: "get" 
    }).done(function (results) { 
     alert(JSON.stringify(results)); 
    }, function (error) { 
     let msg = error.message; 
     let request = error.request; 
     alert(msg+';'+request.status); 
    }); 
}); 

der Anmeldebildschirm zeigt richtig und der Service wird aufgerufen, aber nicht mit 401-Fehler. Es funktioniert, wenn ich den 'Ping' Service anrufe. Der HTTP-Aufruf hat X-ZUMO-Header, die ich denke, sollte für die Authentifizierung gut sein (?):

GET /api/claims HTTP/1.1 
Host: mysite.azurewebsites.net 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
ZUMO-API-VERSION: 2.0.0 
X-ZUMO-INSTALLATION-ID: 10badf87-... 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 
X-ZUMO-AUTH: eyJ0eXAiOiJKV... 
accept: application/json 
X-ZUMO-VERSION: ZUMO/2.0 (lang=Cordova; os=--; os_version=--; arch=--; version=2.0.0-41128.193844) 
Referer: http://localhost:8000/index.html 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 
Cookie: ARRAffinity=4df5cc005.... 

die Azure App Debug-Protokoll zeigt nur Standard-401-Bildschirm des IIS. sagen, die Ressource wurde als "anonym" zugänglich gemacht. Ich habe zuvor Aut0 benutzt und Sie müssen JWT Bearer Optionen in der App Konfiguration registrieren. Aber für Azure sehe ich keine Tutorials, die einen ähnlichen Schritt machen. Was fehlt mir also, damit das funktioniert?

+0

Fügen Sie den Berechtigungsheader Ihrer Anspruchsanforderung hinzu. Du bekommst ein Ergebnis von der Anmeldung, benutze es – misha130

+0

@ misha130 deshalb ist der X-ZUMO-AUTH Header da. https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-overview – n00b

Antwort

1

Ich schrieb über App-Service in ASP.NET-Core hier: https://shellmonger.com/2017/03/02/azure-app-service-authentication-in-an-asp-net-core-application/

Grundsätzlich - Sie das Token in .NET-Core behandeln müssen. Es ist nicht nativ.

+0

Danke. Meine Frage war eigentlich ein Duplikat davon: http://stackoverflow.com/questions/41501612/trouble-getting-claimsprincipal-populated-when-using-easyauth-to-authenticate-ag – n00b

+0

@ adrian-hall your repository https: // github.com/adrianhall/netcore-server/tree/p5 ist nicht verfügbar. Code irgendwo anders? – Ben

+0

Ich bin nicht mehr mit MSFT - das Sample war ein Teil von einem der Repos, die beim Verlassen von MSFT übertragen wurde. Es tut uns leid! Ich aktualisiere den Blog, um den Link zu entfernen –

0

Nachdem ich Stunden damit verbracht habe, habe ich festgestellt, dass App Services den Claims Principal für die ASP.NET Core Application nicht füllt. Dies bedeutet, dass es die X-ZUMO-Header nicht behandelt und sie nicht validiert.

Schauen Sie sich das SO Question

Die vorgeschlagene Lösung ist die X-ZUMO-Header zu verwenden, um einen Anruf zu dem /.auth/me Dienst zu machen, die alle Ansprüche zurück und verwenden Sie die Antwort des Authentifizierungskontext zu setzen in Ihrer ASP.NET Core-Anwendung.

Diese GitHub Repository macht dies jetzt sehr einfach zu tun. Es definiert eine Erweiterungsmethode, so dass Sie dies für Ihre Anwendung durch Aufruf von

app.UseAzureAppServiceAuthentication();

Verwandte Themen