Announcement

Collapse
No announcement yet.

EWS Authentifizierung - Unterschied Client Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EWS Authentifizierung - Unterschied Client Server

    Hallo Forum,

    ich hole mir vom Exchange Server per EWS Termine, die dann (je nach Berechtigung des Benutzers) auch bearbeitet werden sollen.

    Voraussetzungen:

    Server:
    Windows Server 2008 R2 mit IIS7
    ASP.NET-Identitätswechsel und Windows-Authentifizierung ist aktiviert

    Client:
    Windows 7 Professional und IE10 (oder 9)
    Web.Config: <authentication mode="Windows"/> <identity impersonate="true"/>

    Quellcodeausschnitt:
    Code:
    Dim service As ExchangeService = New ExchangeService(ExchangeVersion.Exchange2007_SP1)
    service.Url = New System.Uri("https://meinefirma.de/EWS/Exchange.asmx")
    service.UseDefaultCredentials = True
    'service.UseDefaultCredentials = False
    'service.Credentials = New NetworkCredential("ich", "meinPasswort", "meinefirma")
    service.TraceListener = New TraceListener
    service.TraceFlags = TraceFlags.All
    service.TraceEnabled = True
    
    Dim attendees As New List(Of AttendeeInfo)()
    Dim adressen As String() = {"[email protected]", "[email protected]", "[email protected]"}
    For Each s As String In adressen
        attendees.Add(s)
    Next
    Dim tw As New TimeWindow(New Date(2013, 8, 12), NewDate(2013, 8, 15))
    Dim userAvailability As GetUserAvailabilityResults = service.GetUserAvailability(attendees, tw, AvailabilityData.FreeBusy)
    Nun gibt es drei Zenarien
    1: Start aus dem VisualStudio - PC Browser mit URL "localhost...." - alles funktioniert bestens.
    2: Ich bin am Server mit meinem Benutzer angemeldet und benutze den Browser vom Server. URL "//meinserver/intranet/..." - geht.
    3: Ich benutze den Browser von meinem PC mit URL "//meinserver/intranet/..." und bekomme bei service.GetUserAvailability ein 401 Unauthorized zurück.
    Dummerweise ist 3 natürlich das, wie es hinterher laufen soll. Dann habe ich die 3 Zenarien mit
    Code:
    service.UseDefaultCredentials = False
    service.Credentials = New NetworkCredential("ich", "meinPasswort", "meinefirma")
    durchgespielt. Funktioniert überall. Dann habe ich mir die EWS Aufrufe protokollieren lassen. Bis auf Zenario 3 sind alle 5 Traces gleich (abgesehen von den Uhrzeiten und der ID).

    Die 5 gleichen Traces:
    Code:
    16.08.2013 08:57:42 : EwsRequestHttpHeaders --- <Trace Tag="EwsRequestHttpHeaders" Tid="519" Time="2013-08-16 06:57:42Z">
    POST /EWS/Exchange.asmx HTTP/1.1
    Content-Type: text/xml; charset=utf-8
    Accept: text/xml
    User-Agent: ExchangeServicesClient/14.03.0032.000
    Accept-Encoding: gzip,deflate
    
    
    </Trace>
    
    16.08.2013 08:57:43 : EwsRequest --- <Trace Tag="EwsRequest" Tid="519" Time="2013-08-16 06:57:43Z" Version="14.03.0032.000">
      <?xml version="1.0" encoding="utf-8"?>
      <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Header>
          <t:RequestServerVersion Version="Exchange2007_SP1" />
          <t:TimeZoneContext>
            <t:TimeZoneDefinition Id="W. Europe Standard Time" />
          </t:TimeZoneContext>
        </soap:Header>
        <soap:Body>
          <m:GetUserAvailabilityRequest>
    .....
          </m:GetUserAvailabilityRequest>
        </soap:Body>
      </soap:Envelope>
    </Trace>
    
    16.08.2013 08:57:43 : EwsResponseHttpHeaders --- <Trace Tag="EwsResponseHttpHeaders" Tid="519" Time="2013-08-16 06:57:43Z">
    200 OK
    Content-Length: 158255
    Cache-Control: private, max-age=0
    Content-Type: text/xml; charset=utf-8
    Date: Fri, 16 Aug 2013 06:57:42 GMT
    Server: Microsoft-IIS/7.0
    X-AspNet-Version: 2.0.50727
    X-Powered-By: ASP.NET
    
    
    </Trace>
    
    16.08.2013 08:57:43 : EwsResponse --- <Trace Tag="EwsResponse" Tid="519" Time="2013-08-16 06:57:43Z" Version="14.03.0032.000">
      <?xml version="1.0" encoding="utf-8"?>
      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Header>
          <t:ServerVersionInfo MajorVersion="8" MinorVersion="3" MajorBuildNumber="298" MinorBuildNumber="1" Version="Exchange2007_SP1" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" />
        </soap:Header>
        <soap:Body>
    .....
        </soap:Body>
      </soap:Envelope>
    </Trace>

    Bei Zenario 3 ist der EWSRequest identisch zu den anderen 5, allerdings bekomme ich dann
    Code:
    16.08.2013 08:52:27 : EwsResponseHttpHeaders --- <Trace Tag="EwsResponseHttpHeaders" Tid="48" Time="2013-08-16 06:52:27Z">
    401 Unauthorized
    Server: Microsoft-IIS/7.0
    WWW-Authenticate: Negotiate,NTLM
    X-Powered-By: ASP.NET
    Date: Fri, 16 Aug 2013 06:52:26 GMT
    Content-Length: 0
    und die EWSResponse fehlt dann natürlich.

    Ich kann mir das Verhalten nicht erklären und hoffe, dass es einer von Euch kann. Habe ich eine Konfigurationsmöglichkeit übersehen?


    PS: Die service.UseDefaultCredentials = False Metode ist nicht die Lösung, denn dann funktioniert es zwar für mich, aber die Kollegen können meine Termine bearbeiten, die Eigenen jedoch nicht.
Working...
X