2016-04-11 5 views
1

Dies ist eine einfache "Web API 2" -App.ASP.NET API returns Die Berechtigung wurde für diese Anforderung auf localhost verweigert, funktioniert aber normal auf Azure

public void ConfigureAuth(IAppBuilder app) 
     { 
      app.UseWindowsAzureActiveDirectoryBearerAuthentication(
       new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
       { 
        Tenant = ConfigurationManager.AppSettings["ida:Tenant"], 
        TokenValidationParameters = new TokenValidationParameters 
        { 
         SaveSigninToken = true, 
         ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] 
        }, 
       }); 
     } 

Wie gezeigt, verwendet die Anwendung die WindowsAzureActive Directory-Authentifizierung und Autorisierung.

Beachten Sie, dass es normal funktioniert, wenn es in der Azure API-App veröffentlicht wird, verweigert jedoch immer die Anforderung in localhost.

Ich bin mir nicht sicher, was passiert ist, es hat früher funktioniert.

Grüße

Antwort

0

Normalerweise ist dies aufgrund einer Nichtübereinstimmung im Publikum Sie in dem Web-API (den Wert, den Sie über ValidAudience eingestellt) erwarten und was Sie in den eingehenden Token erhalten. Der Wert im Token gibt die Ressourcen-ID an, die Sie beim Anfordern des Tokens vom Client verwendet haben. Ändern Sie den Clientcode, um beim Aufruf der Instanz localhost vs. Azure API eine andere Zielgruppe anzufordern? Wie veröffentlichen Sie die API in Azure? Wenn Sie VS verwenden und in den Einstellungen des Veröffentlichungsassistenten das Kontrollkästchen "Organisationsauthentifizierung verwenden" aktiviert ist, hat die bereitgestellte Web-API in der Datei web.config einen anderen Zielgruppenwert.

+0

Ja, ich habe herausgefunden, dass dies der Fall ist. Aber ich bin mir nicht sicher, ob ich das vollständig verstehe, denn auf Azure funktioniert es wie es ist. Aber localhost tut es nicht. Es funktioniert nur, wenn ich die Zielgruppe vom azurblauen Portal in die gleiche wie die App Uri ändere. Jetzt bin ich fest, dass Login von SPA fehlschlägt, da es die gleiche Zielgruppe wie die ClientId und nicht die App Uri benötigt. irgendwelche Ideen hier? –

+2

Anstelle von validAudience, benutze bitte torknvalidationparameters.validaudiences (Plural) und füge dort sowohl die clientID als auch die App id uri hinzu – vibronet

+0

Ich habe nicht gemerkt, dass das tatsächlich du bist; Danke und tolle Arbeit in AAD; erstaunliche Build-Sitzung –