Vertec Python Modul "vtcauth"

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:
  • AccessToken
  • RefreshToken
  • ApplicationID
  • ApplicationSecret

Die Properties müssen inkl. prefix genau so bezeichnet werden: {prefix}Name. Für den Präfix "Outlook" also OutlookAccessToken, OutlookRefreshToken etc.

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 False, kann aber im mitgegebenen config mit True übersteuert werden. Liefert Informationen über die Authentisierung als Output in der Python Konsole.

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 True. Kann mit False übersteuert werden, falls die Anmeldung als Applikation erfolgen soll.

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 query.

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.

Beispiel

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.

Stub File

Das Modul vtcauth wird auch als Stub File mitgeliefert.

Verwendung in geplanten Aufgaben

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:

  • Als Administrator an Vertec und beim Drittsystem anmelden
  • Auf der geplanten Aufgabe muss dieser User hinterlegt werden
  • Die geplante Aufgabe einmal manuell ausführen, so werden AccessToken und RefreshToken auf dem Administrator gespeichert und die geplante Aufgabe kann später selbständig darauf zugreifen. 
  • Das AccessToken wird so lange automatisch erneuert, wie das RefreshToken gültig ist. Läuft auch das RefreshToken ab, muss die geplante Aufgabe erneut einmal manuell ausgeführt werden. 
  • Wann das RefreshToken abläuft, wird in einer Benutzerproperty expires_at hinterlegt und kann vom Administrator, wenn er in Vertec eingeloggt ist, via vtcapp.getpropertyvalue() abgefragt werden.

Netherlands

United Kingdom