Das Vertec Python Modul "vtcauth" für die einfache Anmeldung via OAuth.
Ab Version 6.8 gibt es das Vertec Python Modul vtcauth, um eine OAuth Authentisierung in beliebigen Schnittstellen und Python Scripts in Vertec verwenden zu können.
Dieses beinhaltet einen Decorator authenticate, welchem als Argument ein config Dictionary mitgegeben wird.
Die Parameter, welche im config Dictionary mitgegeben werden können, sind folgende in vtcauth vorhandenen Instanzvariablen:
prefix |
Ein Präfix kann dazu verwendet werden, folgende Werte aus Vertec Properties automatisiert auszulesen und zu speichern:
Die Properties müssen inkl. prefix genau so bezeichnet werden: Wird im config ein prefix angegeben, werden diese Werte automatisch aus den Vertec Properties gelesen bzw. darin gespeichert. Wird kein prefix angegeben, müssen diese Konfigurationen einzeln im config mitgegeben werden. |
logging |
Standardwert ist |
client_id |
Entspricht der Application ID. Muss nur angegeben werden, wenn nicht via prefix abgedeckt. |
client_secret |
Entspricht dem Application Secret. Muss nur angegeben werden, wenn nicht via prefix abgedeckt. |
individual_login |
Standardwert ist |
scope |
Definiert den Umfang des Zugriffs, den die Anwendung auf die Ressourcen eines Benutzers benötigt. Standard (MS Graph): "https://graph.microsoft.com/.default offline_access" Muss nur mitgegeben werden, wenn OAuth für einen anderen Endpunkt verwendet werden soll. |
|
use_password |
Ab Vertec 6.8.0.12. Dabei handelt es sich um ein Legacy Feature von OAuth, welches nur noch in dem Fall verwendet werden soll, falls das Drittsystem keine andere Anmeldung unterstützt. Standardwert ist False. Wird es auf True gesetzt, erfolgt die Anmeldung via username und password. |
|
username |
Wird verwendet, wenn use_password auf True gesetzt ist. |
|
password |
Wird verwendet, wenn use_password auf True gesetzt ist. |
response_mode |
Standardwert ist |
redirect_uri |
Entspricht der Vertec Callback Adresse und kann bis und mit Vertec 6.8.0.11 nicht mit dem config übersteuert werden. Ab Vertec 6.8.0.12 kann die redirect_uri im config übersteuert werden. Das wird bei der Verwendung in geplanten Aufgaben im Cloud Abo benötigt, wo die Vertec Callback Adresse 127.0.0.1:8081 zurückliefert, was für die automatisierte geplante Aufgabe nicht ausreichend ist. |
tenant_id |
Wird bei Verwendung von MS Graph benötigt und muss dementsprechend mit dem config mitgegeben werden. |
auth_base_url |
Endpunkt für Autorisierung. Standard (MS Graph):
"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize"
Muss nur mitgegeben werden, wenn OAuth für einen anderen Endpunkt verwendet werden soll. |
token_endpoint |
Endpunkt für die Tokens. Standardmässig für MS Graph ausgelegt:
"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
Muss nur mitgegeben werden, wenn OAuth für einen anderen Endpunkt verwendet werden soll. |
access_token |
AccessToken. Muss nur angegeben werden, wenn nicht via prefix abgedeckt. |
refresh_token |
RefreshToken. Muss nur angegeben werden, wenn nicht via prefix abgedeckt. |
Der minimale Aufruf (für MS Graph) in einem Script sieht so aus:
from vtcauth import authenticate # config example using vertec properties with prefix config_prefix = { "tenant_id":"xxxxxxxxxxxxxxxxxxx.onmicrosoft.com", "prefix":"DmsSharePoint", "logging":True,} # using decorator from vtcauth with config_prefix dict @authenticate(config_prefix)
Die gesamte OAuth Authentisierung findet über den Decorator @authenticate(config_prefix) statt.
Falls der User in der angesprochenen Applikation nicht bereits angemeldet ist, hat er für die Authentisierung eine Minute Zeit. Meldet er sich im geöffneten Login Dialog des angesprochenen Produkts nicht innerhalb von einer Minute an, gibt es ein Timeout.
Falls das Token abgelaufen oder ungültig ist, kann eine TokenExpiredException aufgerufen werden. Diese triggert den OAuth Mechanismus, um neue Tokens zu holen. Ist ein RefreshToken vorhanden und gültig, wird das AccessToken mit dem RefreshToken geholt. Die Exception kann im gleichen Aufruf (standardmässig) maximal dreimal ausgeführt werden, danach wird ein Fehler geworfen.
In diesem Beispiel werden die ersten 10 Sites eines SharePoint ausgegeben (MS Graph mit OAuth Authentisierung):
import requests from vtcauth import authenticate, TokenExpiredException # config example using vertec properties with prefix config_prefix = { "tenant_id":"xxxxxxxxxxxxxxxxxxx.onmicrosoft.com", "prefix":"DmsSharePoint", "logging":True,} class SharePointSiteQuery: # using decorator from vtcauth with config_prefix dict @authenticate(config_prefix) def get_sites_with_prefix_config(self): return self.get_sites() def get_sites(self): headers = { "Authorization": "Bearer {}".format(self.access_token), "Content-Type": "application/json",} response = requests.get("https://graph.microsoft.com/v1.0/sites?search=*&$top=10", headers=headers) if response.ok: content = response.json() elif: response.status_code == requests.codes.unauthorized: raise TokenExpiredException else: print(response.json().get("error").get("code") + ' - ' + response.json().get("error").get("message")) query = SharePointSiteQuery() query.get_sites_with_prefix_config()
Die Vertec SharePoint Extension verwendet neu intern ebenfalls das Modul vtcauth. Am Betrieb der Schnittstelle ändert sich dadurch nichts.
Das Modul vtcauth wird auch als Stub File mitgeliefert.
Ab Vertec 6.8.0.12 kann das Modul vtcauth auch via geplante Aufgaben verwendet werden.
Wenn individuelle Anmeldung verwendet wird, muss wie folgt vorgegangen werden:
expires_at hinterlegt und kann vom Administrator, wenn er in Vertec eingeloggt ist, via vtcapp.getpropertyvalue() abgefragt werden.