tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
1320
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SoerenSchmidt SoerenSchmidt ist offline Grünschnabel
    Registriert seit
    Apr 2010
    Beiträge
    4
    Hallo,

    ich habe ein Problem mit der Authentifizierung eines Webservice den ich selbst geschrieben habe. Solange er Lokal aufgerufen wird, arbeitet alles wie erwartet. Jedoch sobald der Aufruf von einer anderen Maschine eintrifft, sendet der IIS den HTTP-Code 401 (Authorization required). Eigentlich ist der Service auf Anonymous-Authentifizierung eingestellt (IIS-Konfiguration der Maschine, Standardwebseite und Web.config des Service selbst), dennoch erwartet der IIS eine Windows-Authentifizierung.
    Die NTFS-Rechte können ausgeschlossen werden, da "*.aspx"-Seiten auch extern aufgerufen werden können, nur wenn eine Funktion innerhalb der "*.svc"-Datei angesprochen wird, fordert der IIS die Authentifizierung.

    Hat hier jemand eine Idee, was das Problem sein könnte? Gibt es eventuell eine spezielle Konfigurationsdatei der Windows Communication Foundation?

    Weitere Informationen:

    Webserver: IIS 7
    OS: Windows Server 2008
    IDE: Visual Studio 2008
    .NET Framework: 3.5 SP1
    AspKompatibilität wird benötigt.
    Service Architektur: REST
    HTTP-Handler: svc-Integrated
    AppPool: DefaultAppPool (Integrated)


    Hier ist die Web.config des Webservice. Habe ich vielleicht hier etwas vergessen, oder falsch eingetragen?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    
    <system.web>
            <compilation debug="true">
                <assemblies>
                    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                </assemblies>
            </compilation>
        <anonymousIdentification enabled="true"/>
        <authorization>
          <allow users="?"/>
          <deny users="*"/>
        </authorization>
        <pages>
          <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </controls>
        </pages>
        
        <httpHandlers>
          <remove verb="*" path="*.asmx"/>
          <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
     
        <httpModules>
          <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
        
        </system.web>
      
        <system.codedom>
            <compilers>
                <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                    <providerOption name="CompilerVersion" value="v3.5" />
                    <providerOption name="WarnAsError" value="false" />
                </compiler>
            </compilers>
        </system.codedom>
     
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
          <remove name="ScriptModule" />
          <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
          <remove name="WebServiceHandlerFactory-Integrated"/>
          <remove name="ScriptHandlerFactory" />
          <remove name="ScriptHandlerFactoryAppServices" />
          <remove name="ScriptResource" /> 
          <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
               type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
               type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        </handlers>
        <defaultDocument>
          <files>
            <add value="Service.svc" />
          </files>
        </defaultDocument>
      </system.webServer>
      
        <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <bindings>
          <basicHttpBinding>
            <binding name="basicBinding" maxReceivedMessageSize="655360">
              <readerQuotas maxArrayLength="655360" />
              <security mode="None"/>
            </binding>
          </basicHttpBinding>
          <webHttpBinding>
            <binding name="ConMMBinding" maxReceivedMessageSize="655360">
              <readerQuotas maxArrayLength="655360" />
              <security mode="None"/>
            </binding>
          </webHttpBinding>
        </bindings>
        <behaviors>
          <endpointBehaviors>
            <behavior name="httpBehavior">
              <webHttp />
            </behavior>
          </endpointBehaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior">
              <serviceCredentials>
               <windowsAuthentication allowAnonymousLogons="true"/>
              </serviceCredentials>
     
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        
            <services>
                <service name="Service" behaviorConfiguration="ServiceBehavior">
            <endpoint address="" behaviorConfiguration="httpBehavior" binding="webHttpBinding" bindingConfiguration="ConMMBinding" contract="IService">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
              <headers>
                <system.webServer>
                  <security>
                    <authentication>
                      <anonymousAuthentication enabled="true"/>
                    </authentication>
                    <authorization>
                      <add accessType="Allow" users="?"/>
                    </authorization>
                  </security>
                </system.webServer>
              </headers>
            </endpoint>
                </service>
            </services>
        </system.serviceModel>
    </configuration>

    Wenn ich versuche hier im Bereich Webserver die Authentifizierung einzustellen, bekomme ich die Meldung, dass mir es von einer höheren Instanz verboten ist, oder das Überschreiben untersagt ist.
    Quelltext der nicht einzustellen geht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <system.webServer>
    ...
        <security>
          <authentication>
            <anonymousAuthentication enabled="true"/>
            <windowsAuthentication enabled="false" />
          </authentication>
        </security>
      </system.webServer>

    Welche Instanz könnte das sein? Oder wie kann ich das Überschreiben erlauben?
    Im IIS-Manager sind die Methoden so eingestellt, wie ich sie auch versuche in der Web.config zu setzen.

    Ich danke vielmals im Voraus und hoffe, dass mir jemand weiterhelfen kann.

    Mit freundlichen Grüßen
    Sören Schmidt
     

  2. #2
    SoerenSchmidt SoerenSchmidt ist offline Grünschnabel
    Registriert seit
    Apr 2010
    Beiträge
    4
    Hallo,
    ich habe weiter tausende von Einstellungen versucht, mit dem Ergebnis, dass ich bereits eines meiner Testsysteme zerstört habe. Mir ist nun jedoch aufgefallen, dass es nichts mit dem Zugriff von einer externen Maschine zutun hat, das Verhalten kann ich reproduzieren, sobald nicht der Eintrag "localhost", sondern direkt die IP-Adresse verwendet wird.
    Hat hier jemand einen Tip, was ich falsch mache?

    Das mit dem Verbot zum Überschreiben kann in der "maschine.config" eingestellt werden. Diese Datei befindet sich normalerweise im Verzeichnis des Frameworks. Z.B.: C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG.

    Grüße Sören
    Geändert von SoerenSchmidt (28.04.10 um 23:42 Uhr)
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 18.11.08, 23:51
  2. Antworten: 0
    Letzter Beitrag: 06.07.07, 16:57
  3. EXE kann bei Anderen nicht ausgeführt werden
    Von Mickeyman im Forum VisualStudio & MFC
    Antworten: 9
    Letzter Beitrag: 28.10.06, 14:05
  4. Links werden in textarea ausgeführt
    Von truderich im Forum PHP
    Antworten: 7
    Letzter Beitrag: 18.01.06, 22:40
  5. Antworten: 0
    Letzter Beitrag: 15.01.04, 11:54

Stichworte