Erweiterte Platzhalter

Platzhalter wie ${user.email} oder ${device.model} werden an mehreren Stellen in Relution genutzt, u. a. bei Gerätenamen, Zertifikaten, Exchange-Konten oder App-Konfigurationen. Über die zugrunde liegende Template-Engine FreeMarker stehen dabei zusätzliche Funktionen zur Verfügung, mit denen Platzhalter weiter angepasst werden können.

Ab Relution 26.5.3 können Platzhalter-Ausdrücke nur noch die Werte lesen, die als Platzhalter vorgesehen sind, also die im Portal unter Verfügbare Platzhalter angebotenen. Andere Eigenschaften bleiben leer, der Aufruf anderer Methoden lässt die Auswertung fehlschlagen (siehe Hinweise →). Eigene Ausdrücke, die über die angebotenen Platzhalter hinausgehen, sollten nach dem Update geprüft werden. ${device.rooted} und ${device.jailbroken} werden seitdem ausgewertet: Bei einem gerooteten bzw. per Jailbreak veränderten Gerät wird true eingesetzt, andernfalls bleibt der Platzhalter leer.


Teilzeichenfolgen (Substring)

Mit der Notation [start..*länge] wird nur ein Ausschnitt eines Werts verwendet: ab Position start höchstens länge Zeichen. Die Zählung beginnt bei 0. Ist der Wert kürzer, wird entsprechend weniger eingesetzt, bei leerem Wert nichts. Voraussetzung ist, dass start nicht hinter dem Ende des Werts liegt; andernfalls schlägt die Ersetzung wie bei [start..ende] fehl (siehe Hinweis unten).

  • ${user.givenName[0..*1]} → erster Buchstabe des Vornamens
  • ${device.model[0..*2]} → erste zwei Zeichen des Gerätemodells

Beispiel: ${user.givenName[0..*1]}${user.surname[0..*1]}-${device.model[0..*2]}-${(device.custom1)!"00000"} ergibt bei einem Benutzerkonto „Max Mustermann“ mit einem custom1-Wert von 00042 auf einem iPad12,1 beispielsweise MM-iP-00042.


Standardwert bei nicht gesetztem Feld

Ist ein Feld nicht gesetzt, kann mit dem !-Operator ein Standardwert hinterlegt werden: ${(device.custom1)!"00000"}. Ist das benutzerdefinierte Feld custom1 nicht gesetzt, wird stattdessen 00000 verwendet, anstatt dass der Platzhalter leer bleibt. Ein gesetzter, aber leerer Wert gilt dagegen als vorhanden: Der Standardwert greift dann nicht, und der Platzhalter bleibt leer.


Groß-/Kleinschreibung und Zeichen ersetzen

Über ?lower_case bzw. ?upper_case wird ein Wert vollständig in Klein- oder Großbuchstaben umgewandelt. Mit ?replace("alt", "neu") lassen sich einzelne Zeichen oder Zeichenfolgen ersetzen, beispielsweise um Umlaute für Systeme aufzulösen, die keine Sonderzeichen im Benutzernamen zulassen:

${user.surname?lower_case?replace("ä","ae")?replace("ö","oe")?replace("ü","ue")?replace("ß","ss")}


Lokalen Teil einer E-Mail-Adresse verwenden

Um aus ${user.name} (bzw. ${user.email}) nur den Teil vor dem @-Zeichen zu verwenden, stehen mehrere Varianten zur Verfügung:

  • ${user.name?keep_before("@")}
  • ${user.name?split("@")[0]}
  • ${user.name[0..user.name?index_of("@")-1]}

Enthält der Wert kein @, liefern die ersten beiden Varianten den vollständigen Wert, während die dritte fehlschlägt. Empfohlen wird daher ?keep_before.


Benutzerzertifikate

Neu in 26.5

Über Platzhalter der Form ${user.certificate.…} werden die im Benutzerprofil hinterlegten Zertifikate (Abschnitt Benutzerdefinierte Zertifikate) als base64-kodierte Zeichenkette in eine Konfiguration eingefügt — zum Beispiel in eine Managed App Konfiguration, deren Felder ein Zertifikat als base64-String erwarten. Aufgelöst wird der Platzhalter beim Übertragen der Konfiguration anhand des Benutzers, der dem jeweiligen Gerät zugewiesen ist.

Drei Auswahlformen stehen zur Verfügung:

PlatzhalterAuflösung
${user.certificate.EXCHANGE}Zertifikat des Subtyps mit der längsten Restlaufzeit
${user.certificate.EXCHANGE["mein-zertifikat"]}Zertifikat mit exakt diesem Namen (Groß-/Kleinschreibung wird beachtet); bei mehreren gleichnamigen das mit der längsten Restlaufzeit
${user.certificate.EXCHANGE[device.serialnumber]}Zertifikatsname wird aus einem anderen Platzhalter berechnet

Als Subtyp wird die Kategorie angegeben, die im Benutzerprofil für das Zertifikat ausgewählt ist. Beim Subtyp spielt die Groß-/Kleinschreibung keine Rolle.

Kategorie im BenutzerprofilSubtyp
Allgemeines ZertifikatGENERAL_CERTIFICATE
WLANWIFI
ExchangeEXCHANGE
VPN und AppsVPN
S/MIME-VerschlüsselungSMIME_ENCRYPTION
S/MIME SignierungSMIME_SIGNING

Zertifikatsname in eckigen Klammern

Bei berechneten Namen wird der innere Platzhalter ohne umschließendes ${…} geschrieben, also [device.serialnumber] statt [${device.serialnumber}] — verschachtelte ${…}-Ausdrücke werden nicht unterstützt. Für Namen, die nur aus Buchstaben, Ziffern und Unterstrichen bestehen, funktioniert auch die Punktform ${user.certificate.EXCHANGE.iPhone}.

Passwort für PKCS#12-Zertifikate

Für passwortgeschützte PKCS#12-Zertifikate (z. B. eine S/MIME-Identität) wird das Importpasswort über den reservierten Schlüssel password mitgeliefert:

  • ${user.certificate.SMIME_SIGNING.password}
  • ${user.certificate.SMIME_SIGNING["mein-zertifikat"].password}

Bei Zertifikaten, die kein PKCS#12-Container sind, bleibt der Wert leer. Da password ein reservierter Schlüssel ist, kann ein Zertifikat, das selbst den Namen password trägt, nicht über Platzhalter ausgewählt werden — sowohl die Punkt- als auch die Klammerform liefern in diesem Fall das Passwort. Für solche Zertifikate sollte ein anderer Name verwendet werden.

Ausgabeformat

Unabhängig vom hochgeladenen Dateiformat (PEM oder DER) liefert der Platzhalter immer die base64-kodierte DER-Form des Zertifikats. PKCS#12-Container werden unverändert base64-kodiert ausgeliefert, sodass sie zusammen mit dem Passwort direkt von der empfangenden App importiert werden können. Andere Zertifikatstypen werden ebenfalls so ausgeliefert, wie sie gespeichert sind.

Beispiel einer Managed App Konfiguration für einen E-Mail-Client mit S/MIME-Signatur:

<key>SMIMECertificate</key>
<string>${user.certificate.SMIME_SIGNING}</string>
<key>SMIMECertificatePassword</key>
<string>${user.certificate.SMIME_SIGNING.password}</string>

Verfügbarkeit

Benutzerzertifikat-Platzhalter sind für Konfigurationen vorgesehen, deren Inhalt an das Gerät des zugewiesenen Benutzers übertragen wird, insbesondere Managed App Konfigurationen (iOS/macOS, Android Enterprise), Knox-Konfigurationen (Android Enterprise, Samsung KNS), eigene Konfigurationsprofile (.mobileconfig) und Windows Custom CSP. In diesen Konfigurationen führt das Portal sie auch unter Verfügbare Platzhalter auf. Nicht aufgelöst werden sie (der Platzhalter bleibt leer) in Gerätenamen, also beim Umbenennen von Geräten und in Gerätename-Konfigurationen für Apple und Windows, unter Android Enterprise in Sperrbildschirm- und Supportnachrichten, bei der Arbeitskonto-Einrichtung und in Setup-Aktionen sowie in Skript-Umgebungsvariablen und in Webhook-Aktionen von Gerätegruppen. Für Linux-Konfigurationen werden sie nicht unterstützt. In eigenen Konfigurationsprofilen (.mobileconfig) ist der Platzhalter nur in String-Feldern möglich, nicht in data-Feldern; in Managed App Konfigurationen funktioniert beides.

Kann kein Zertifikat ermittelt werden — etwa bei unbekanntem Subtyp, nicht vorhandenem Namen oder fehlender Benutzerzuweisung —, bleibt der Platzhalter leer und die Konfiguration wird dennoch ausgeliefert. Details zur Ursache werden im Serverlog protokolliert.


Hinweise

Welche Basis-Platzhalter (z. B. ${user.email}, ${device.serialnumber}) in einer bestimmten Konfiguration zur Verfügung stehen, wird im Konfigurationsformular bzw. im jeweiligen Dialog im Abschnitt Verfügbare Platzhalter angezeigt. Ein Klick auf einen Eintrag kopiert ihn in die Zwischenablage.

Nicht gesetzte Werte werden als leere Zeichenfolge eingesetzt. Schlägt dagegen die Auswertung eines Ausdrucks fehl — etwa bei einem Ausschnitt [0..0] aus einem gesetzten, aber leeren Wert oder einem unbekannten Funktionsnamen —, betrifft das nicht nur den einzelnen Platzhalter: Der gesamte Text des Felds bzw. der Konfiguration wird unverändert ausgeliefert, also mit allen nicht ersetzten ${…}-Ausdrücken. Die Ursache wird im Serverlog protokolliert.

Top