2016-09-29 3 views
0

Ich bin neu in WCF. Ich habe WCF-Methode erstellt, die Datei zurückgibt. Ich entfaltet es App-Service Azure und es funktionierte, als ich es wie folgtAzure gehostet WCF azure Active Directory-Authentifizierung gibt zurück 404

genannt
https://myapp.azurewebsites.net/myService.svc/MyMethod?MyParam=MyValue 

als ich auf Azure Active Directory-Authentifizierung für azur App-Service gedreht und ich bekomme jetzt 404 Fehler. Aber die Authentifizierung gegen AAD funktioniert - ich werde zur Login-Seite weitergeleitet, wenn ich nicht im User versenkt bin.

Ich habe versucht, SO und Google zu suchen und ich kann nicht herausfinden, was ich falsch mache oder wenn es einfach nicht möglich ist, diesen Weg mit WCF einzurichten.

Web config:

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/> 
    </appSettings> 
    <system.web> 
    <customErrors mode="Off"/> 
    <compilation targetFramework="4.5.2"/> 
    <httpRuntime targetFramework="4.5.2"/> 
    <httpModules> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/> 
    </httpModules> 
    </system.web> 

    <system.serviceModel> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <bindings> 
     <webHttpBinding> 
     <binding name="ServiceWebBindingName" transferMode="Streamed" maxReceivedMessageSize="2147483647" > 
      <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="DefaultRestServiceBehavior"> 
      <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" automaticFormatSelectionEnabled="false"/> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="My.App.Service"> 
     <endpoint address="myService.svc" 
       binding="webHttpBinding" 
       bindingConfiguration="ServiceWebBindingName" 
       behaviorConfiguration="DefaultRestServiceBehavior" 
       name="FileManagerServiceEndpoint" 
       contract="My.App.IService"/> 
     </service> 
    </services> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="ApplicationInsightsWebTracking"/> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" 
     preCondition="managedHandler"/> 
    </modules> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="false"/> 
    <validation validateIntegratedModeConfiguration="false"/> 
    </system.webServer> 

</configuration> 
+0

haben Sie diesen Beitrag, der über die Integration von wcf + AAD spricht https://dzone.com/articles/exercise-3-securing-wcf – Aravind

+0

Ich tat, in dem Artikel, sie verwenden nicht azurblaues Hosting mit Setup-Authentifizierung , aber alles im Code tun, wenn ich es richtig verstanden habe. – Evlo

+0

Ja, der Authentifizierungsteil ist in den Code getan .. – Aravind

Antwort

0

So fand ich heraus, dass ich gar nicht bemerkt, dass meine ursprüngliche Service-URL war

http://myapp.azurewebsites.net/myService.svc/MyMethod?MyParam=MyValue 

und eine, die ich nach dem azur Anzeige weitergeleitet wurde Authentifizierung Zugabe war

https://myapp.azurewebsites.net/myService.svc/MyMethod?MyParam=MyValue 

So Umleitungspunkte zu HTTPS und nicht HTTP.

Es ist wahrscheinlich möglich, eine azure Ad-Anwendung nicht HTTPS-Verkehr zu erzwingen, aber im Geiste der Sicherheit und um mögliche IE-Zone Switching Probleme zu vermeiden, fügte ich HTTPS-Transport zu meiner WCF-Bindung in web.config. Hier ist ein gutes Beispiel, wie man es macht How to enable HTTPS on WCF RESTful Service? und es funktioniert jetzt einwandfrei.

Verwandte Themen