Microsoft Modern Authentication
Microsoft Modern Authentication Grundlagen der Authentifzierung über das OAuth2 Verfahren
Siehe
MailOpen(), Konfiguration des Servers -
Konfiguration,
SOA-Service -
Konfigurationsdatei
CONZEPT 16 unterstützt die von Microsoft geplante Authentifizierung für
den Mail-Versand. MailOpen() und die CONZEPT
16-Web-Administration
unterstützen das neue Verfahren.
SMTP-Server, die in der Azure-Cloud laufen, bzw. über Microsoft 365 sollen Anfang 2023 so umgestellt werden, dass für den Mailversand ein OAuth-basiertes Authentifizierungsverfahren notwendig ist. Zur Authentifizierung werden dann folgende Kennungen benötigt:
- OAuth Verzeichnis-ID auch Mandanten-ID (engl. tenant id)
- OAuth Anwendungs-ID auch Client-ID (engl. client id)
Diese Kennungen werden von Microsoft (nach Einrichtung einer App-Registrierung) zu Verfügung gestellt.
Das OAuth-Verfahren löst damit die Übermittlung eines Kennwortes bei der Authentifizierung mit dem SMTP-Server ab. Statt dessen wird aus Verzeichnis- und Anwendungs-ID über einen Authentifizierungs-Server ein Token generiert. Das Token autorisiert dann den Client gegenüber dem SMTP-Server zum Versenden von E-Mails.
Für die Generierung des Token ist eine manuelle Interaktion zwischen dem Anwender (der die Mail versenden möchte) und dem Microsoft-Server notwendig. Danach kann der Token für eine begrenzte Zeit (in der Regel mehrere Tage) dazu verwendet werden, E-Mail-Nachrichten zu versenden. Endet die Gültigkeit des Tokens, wird eine erneute Legitimation notwendig.
CONZEPT 16 vereinfacht das Verfahren, indem ein Token-Cache auf einem frei wählbaren Verzeichnis des Datenträgers angelegt wird. Möchte ein Benutzer (identifiziert durch seine E-Mail-Adresse) eine Nachricht mit dem neuen Verfahren versenden, prüft CONZEPT 16 zunächst das Vorhandensein eines entsprechenden Token im Token-Cache. Sofern ein Token existiert, wird dieser für die Authentifizierung verwendet. Existiert kein Token oder ist dieser nicht mehr gültig, muss ein neuer Token vom Authentifizierungs-Server (wie oben beschrieben) angefordert werden.
Der Token-Cache wird beim Starten der entsprechenden CONZEPT 16-Programms eingelesen und ist danach im Hauptspeicher verfügbar. Selbst wenn der Pfad gelöscht wird, bleiben die Tokens im Arbeitsspeicher (bis zur Beendigung des Programms) enthalten.
Unterstützte Komponenten
CONZEPT 16-Server
Die Web-Administration des CONZEPT 16-Datenbank-Servers enthält im Bereich E-Mail-Benachrichtigung Eingabefelder in denen die Verzeichnis-ID, die Anwendungs-ID und der Pfad für den Token-Cache spezifiziert werden können.
Mit der Schaltfläche "Mail-Test" kann der Versand einer Alert-Mail überprüft werden. Dabei wird folgender Ablauf durchgeführt:
- Es wird nach einem passenden Token im Token-Cache gesucht.
- Ist ein Token vorhanden, wird versucht damit die Verbindung herzustellen.
- Wird der Token zurückgewiesen oder ist kein passender Token vorhanden, dann wird eine Interaktion notwendig.
Sofern Punkt (3) eintritt, wird im Log des Datenbank-Manager Prozesses folgender Eintrag generiert:
OAuth DeviceFlow email=<e-mail-address> url=<microsoft-url> user-code=<user-code>
Wird das Protkoll mit dem
Log-Viewer
aufgerufen, wird mit einem Doppelklick auf den Eintrag der
Standard-Browser gestartet und zu der URL <microsoft-url>
weitergeleitet. Dort muss der Anwender, der die E-Mail versenden möchte,
den Benutzer-Code <user-code> eingeben, um sich zu authentifizieren.
Der Benutzer-Code kann einfach über die Zwischenablage eingefügt werden.
Nach der Authentifizierung befindet sich ein entsprechendes Token im
Token-Cache, das bei nachfolgenden Authentifizierungen verwendet wird.
CONZEPT 16 Client (Standard und Advanced)
Der Befehl vsSource
wurde für die OAuth-Authentifizierung erweitert (siehe dort).>
Neu hinzugekommen sind die Parameter für die Verzeichnis-Id (TenantId),
die Anwendungs-Id (ClientId) und den Token-Cache-Pfad. Sofern diese drei
Argumente angegeben werden, wird beim Absenden der Mail durch
MailClose() versucht die Authentifizierung über OAuth herzustellen.
Hierbei passiert folgendes:
- Es wird in dem angegebenen Pfad nach einem passenden Token gesucht.
- Ist ein Token für die Absendeadresse vorhanden, wird versucht damit die Verbindung herzustellen.
- Wird der Token zurückgewiesen oder ist kein passender Token vorhanden, dann wird eine Interaktion notwendig.
Sofern Punkt (3) eintritt, wird ein Meldungsfenster angezeigt, dass die URL, die zur Authentifizierung verwendet werden muss und den Benutzercode, der in der URL eingegeben werden muss, enthält.
Nach Bestätigung des Meldungsfensters wird der Standard-Browser gestartet und zu der zuvor angezeigten URL weitergeleitet. Dort muss der Anwender, der die E-Mail versenden möchte, den Benutzer-Code eingeben, um sich zu authentifizieren. Der Benutzer-Code kann einfach über die Zwischenablage eingefügt werden.
Die Authentifizierung hat ein Timeout von aktuell drei Minuten. Erfolgt
die Authentifizierung innerhalb dieser Zeitspanne kehrt MailClose()
mit dem Resultat _ErrOk (0) zurück, sofern die
Authentifizierung erfolgreich war und die Mail versendet wurde. Wird die
Zeitspanne überschritten, kehrt MailClose() mit dem Wert
_ErrTimeout (-2) zurück.
Erfolgt ein Aufruf in die DLL-Schnittstelle über DllLoad() aus
Standard- oder Advanced-Client steht die Erweiterung zum Versenden über
OAuth auch zur Verfügung.
CONZEPT 16 SOA
MailOpen() und MailClose() können auch hier zum Versenden via
OAuth verwendet werden. Falls eine Authentifizierung notwendig ist, wird
dies im Protokoll des SOA-Task protokolliert. Hierbei handelt es sich um
denselben Eintrag wie beim Datenbank-Server und auch dieselbe
Interaktionsmethode.
Für die Versendung von Alert-Mails können in der
SOA-Konfigurationsdatei
drei neue Einträge angegeben werden: alert_mail_oauth_tenantid, alert_mail_oauth_clientid
und alert_mail_oauth_cachepath zur Definition der Verzeichnis-ID, Client-ID und
des Token-Cache Pfades.
CONZEPT 16 API
In der erweiterten Programmierschnittstelle (c16_pgxe.dll) können MailOpen() und MailClose() auch hier zum Versenden via OAuth verwendet werden. Falls eine Authentifizierung notwendig ist, wird die gleiche Interaktionsmethode wie bei Standard- und Advanced-Client verwendet (Meldungsfenster mit anschließendem Starten der Browsers).
Die Programmierschnittstelle ohne Erweiterung (c16_pgxw.dll und c16_pgx_w64.dll) unterstützen den Versand via OAuth nicht.