Konfiguration
Die Konfiguration erfolgt in der Datei appsettings.json vom WebDAV-Server.
Hinweis: Pfadangaben müssen mit doppelten Backslashes geschrieben werden.
Serilog
Es wird das Serilog-Logsystem verwendet. Dazu kann die Dokumentation unter serilog-settings-configuration abgerufen werden. Der folgende Ausschnitt ist eine Beispielkonfiguration. Unter WriteTo unter Args muss der Pfad (path) angepasst werden.
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"rollingInterval": "Day",
"rollOnFileSizeLimit": true,
"fileSizeLimitBytes": 100000,
"path": "%TEMP%\\webdav_mandant_log-{Date}.log"
}
}
]
},
Cache
Der WebDav-Service speichert Cache-Daten in einem Verzeichnis:
"FileDistributedCache":
{
"Path": "../cache",
"EnableCacheCleanup": true,
"CleanupInterval": "0.00:05:00"
}
Path
(erforderlich): Verzeichnispfad, in dem Cache-Daten gespeichert werden. Lokale Verzeichnisse, SMB- und NFS-Verzeichnisse werden unterstützt.EnableCacheCleanup
(optional): Aktiviert einen Background-Tasks der abgelaufene Cache-Items aus dem Verzeichnispfad löscht.CleanupInterval
(optional, default: 0.00:05:00 (5 Minuten)): Intervall einer Hintergrundaufgabe um abgelaufene Cache-Daten zu entfernen.
CMI Server
Die Parameter für die Kommunikation mit dem CMI Server werden wie gefolgt hinterlegt:
"ServerService": {
"ApiBaseUrl": "https://mandant.kunde.ch/private/"
},
ApiBaseUrl
ist die vollständige URL, die auf den OWIN-private Endpoint vom CMI Server zeigen muss.
Falls ein Relay-Server im Einsatz ist, muss die URL von diesem angegeben werden.
Backend-Authentifizierung
Der WebDav-Service muss dem CMI Server valide Access-Tokens präsentieren, um Daten abzurufen. Dazu muss der WebDav-Service eine Authentifizierung gegenüber CMI STS durchführen.
Es wird der CMI STS in Version >= 3 unterstützt.
Konfiguration für CMI STS 3
"security": {
"authority": "https://sts3.kunde.ch/mandant",
"client_id": "webdav",
"client_secret": "E2cATXM4bIquHPVf"
}
authority
(erforderlich): Die Url vom CMI STS. Beim CMI STS 3 inkl. der Mandantenkennung (im obigen Besispiel mandant)client_id
(erforderlich): Eine beliebige Client ID. Ein Client mit dieser ID muss beim CMI STS ebenfalls konfiguriert sein.client_secret
(erforderlich): Das Client Secret muss mit dem Client Secret übereinstimmten, dass beim CMI STS hinterlegt wurde.
Weitere optionale Einstellungen unter security
"security": {
"login_dialog_size": "1200x800"
}
login_dialog_size
(optional): Die Grösse des von Word angezeigten Anmeldefensters (default: 1200x800).
Achtung: Der frühere Parameter
ExternalBaseUrl
wird nicht mehr ausgewertet. Stattdessen sollte der Proxy Forwarded-For-Header senden und der Service so konfiguriert werden, dass diese ausgewertet werden. Url-Pfade werden mit dem ParameterBasePath
hinterlegt.
Frontend-Authentifizierung
Nutzende des WebDav-Service müssen durch diesen Authentifiziert werden. Dazu gibt es zwei Methoden:
- MS-OFBA, unterstützt ab CMI Server Release 20
- URL-Token-basiert, unterstützt ab CMI Server Release 25
Für MS-OFBA gibt es keine Konfigurationsoptionen. Für die URL-Token-basierte Methode gibt es folgende Optionen:
"UrlTokenSettings": {
"DisableUrlToken": false,
"RefreshIntervalInMinutes": 15,
"UrlTokenLength": 32,
"UrlTokenInitialLifetimeInSec": 120,
"UrlTokenLifetimeInHours": 24
}
DisableUrlToken
(optional): Deaktiviert die URL-Token-basierte Methode.RefreshIntervalInMinutes
(optional): Interval für eine Hintergrundaufgabe, die STS Access-Tokens am CMI STS durch neue Tokens ersetzt, bevor sie ablaufen.UrlTokenLength
(optional): Länge des URL-Tokens, welche an Microsoft Office zum abrufen eines Dokuments weitergegeben wird.UrlTokenInitialLifetimeInSec
(optional): Initiale Gültigkeitsdauer für das URL-Token, innerhalb dessen Microsoft Office diesen verwenden muss. Bei extrem langen Startzeiten von Microsoft Office muss dieser Wert erhöht werden.UrlTokenLifetimeInHours
(optional): Maximale Vorhalte, für die ein URL-Token gültig ist und ein entsprechendes CMI STS Token vom WebDav-Service aktuell gehalten wird. Die Vorhaltezeit wird zurückgesetzt, wenn Microsoft Office mit dem WebDav-Service kommuniziert.
WebDav-Einstellungen
Diese optionalen Einstellungen betreffen die WebDAV-Engine.
"DavEngineOptions": {
"UseFullUris": true,
"OutputXmlFormatting": true
},
"DavLoggerOptions": {
"LogFile": "..\\logs\\WebDAVlog.txt",
"IsDebugEnabled": true
}
Bei LogFile handelt es sich um das Log der WebDAV-Engine. Dieser Pfad ist zu setzen.
Konfiguration der Umsysteme
Die folgenden Konfigurationen müssen an den Umsystemen vorgenommen werden, damit diese mit dem WebDav-Server zusammenarbeiten.
Konfiguration des CMI Servers
Die Konfiguration erfolgt in der Datei metatool.ini vom CMI Server.
[WebDAV]
Url = https://cmi-webdav_mandant.kunde.ch
MSOFBADisabled=0
UrlToken=0
Url
(erforderlich): URL zum WebDav-Service, unter der der CMI Server und die Clients den Service erreichen können.MSOFBADisabled
(optional):0
aktiviert die Authentifizierungsmethode MS-OFBA,1
deaktiviert diese.UrlToken
(optional):0
deaktiviert die Token-basierte Authentifizierungsmethode,0
deaktiviert diese.
Konfiguration der Web Clients
Die Konfiguration erfolgt in der Datei config.json im Web Client.
"webDav": {
"serviceUrl": "https://cmi-webdav-mandant.kunde.ch"
}
Konfiguration des CMI STS
Für den Mandanten einen spezifischen Client anlegen:
"Clients": [
{
"ClientId": "webdav",
"AccessTokenLifetime": 36000,
"AllowAccessTokensViaBrowser": true,
"AllowedGrantTypes": ["delegation", "implicit"],
"RedirectUris":["<WebDav-Basis-Url>/account/callback"],
"AllowedScopes": [
"openid",
"profile",
"metatool",
"webdav-api"
],
"ClientSecrets": [
{
"value": "Sha-512 encodiertes Client-Secret. Siehe hierzu auch die STS 3 Dokumentation zur Client-Konfiguration.",
"description": "Eine optionale Beschreibung des Secrets."
}
]
}
]
- Das
AccessTokenLifetime
muss hoch sein (aus fachlicher Sicht 12 Stunden). AllowedGrantTypes
muss sowohlimplicit
(Anmeldung bei Office für Desktop) als auchdelegation
enthalten (Office für iOS und Android).- In
ClientSecrets.0.value
wird das Secret eingetragen, dass der WebDAV-Server zum Lösen des Delegation-Token verwendet (wird nur bei Authentifizieren von Office für Android und iOS gebraucht).
Betrieb hinter einem Proxy
Wird der Service hinter einem Proxy betrieben, ist die Herkunft einer Anfrage nicht bekannt. Callback-Urls und Cookies werden nicht korrekt an den Client zurückgeliefert. Microsoft dokumentiert das Szenario einer ASP.NET Core Anwendung hinter einem Proxy im Artikel "Configure ASP.NET Core to work with proxy servers and load balancers".
Um zu prüfen, welche Redirect-Uris der Service an Clients wie Microsoft Office sendet, kann der Diagnose-Endpunkt /info/discovery
direkt mit einem Browser aufgerufen werden.
X-Forwarded Header
Viele Proxies senden zusätzliche http-Header um die Herkunft einer Anfrage dem Zielsystem mitzuteilen:
Der Service kann konfiguriert werden, diese Header anstatt der Verbindungsinformationen des Proxies zu verwenden. Wenn keine Konfiguration vorgenommen wird, werden die Header nicht verwendet. Das Verhalten zu den Forward-Headern wird in der Sektion ForwardedHeaders
konfiguriert. Es stehen alle Optionen der Klasse ForwardedHeadersOptions zur Verfügung.
In diesem Abschnitt wird die Dokumentation der Klasse ForwardedHeadersOptions
von Microsoft nicht wiederholt, es werden nur Konfigurationshinweise zu einigen Optionen dokumentiert.
ForwardedHeaders
: Wenn mehrere Optionen dieses Flags verwendet werden sollen, können die Flags kommagetrennt aufgeführt werden.All
aktiviert alle Optionen.KnownProxies
: Bekannte Proxies können als Array von Ip-Adressen angegeben werden.KnownNetworks
: Bekannte Netzwerke können als Array in der CIDR-Notation0.0.0.0/0
/0:0:0:0:0:0:0:0/0
angegeben werden.
{
"ForwardedHeaders": {
"ForwardedHeaders": "XForwardedFor, XForwardedHost, XForwardedProto",
"KnownProxies": ["10.0.0.6", "10.0.0.7"],
"KnownNetworks": [ "10.0.0.0/8", "::1/128"]
}
}
Basispfad / Hosting in einem anderen Unterverzeichnis
Beinhaltet die öffentliche Url einen Basis-Url-Pfad, werden Callback-Urls generiert, bei denen dieser Pfad fehlt. Der Basispfad muss dem Service bekannt gemacht werden:
{
// Der Basis-Pfad muss mit einem Slash beginnen
"BasePath": "/mybasepath"
}
Beispiel:
- Öffentliche Url am Proxy: https://example.com/services/webdav
- Binding am Web Server: https://myhost.local/webdav
- Zu konfigurierender Pfad:
/services/webdav
Hinweis: Dieses Beispiel muss mit den X-Forwarded-Host Header kombiniert werden, damit statt myhost.local, der Host example.com verwendet wird.
CORS konfigurieren
Wenn der Webclient sowie der WebDAV-Server auf unterschiedlichen URLs laufen, ist es nötig in der Config des WebDAVs die URL des Webclients zu hinterlegen damit Requests von diesem aus nicht fehlschlagen. Dies geschieht über AllowedCors unter Security:
"security": {
"authority": "https://sts3.kunde.ch/mandant",
"client_id": "webdav",
"client_secret": "E2cATXM4bIquHPVf"
"AllowedCors": "localhost:4200"
}