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.
Teilzeichenfolgen (Substring)
Mit der Notation [start..ende] wird nur ein Ausschnitt eines Werts verwendet. Die Zählung beginnt bei 0.
${user.givenName[0..0]}→ erster Buchstabe des Vornamens${device.model[0..1]}→ erste zwei Zeichen des Gerätemodells
Beispiel: ${user.givenName[0..0]}${user.surname[0..0]}-${device.model[0..1]}-${(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 leerem Feld
Ist ein Feld leer oder nicht gesetzt, kann mit dem !-Operator ein Standardwert hinterlegt werden: ${(device.custom1)!"00000"}. Ist das benutzerdefinierte Feld custom1 nicht befüllt, wird stattdessen 00000 verwendet, anstatt dass der Platzhalter leer bleibt oder einen Fehler verursacht.
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.username} (bzw. ${user.email}) nur den Teil vor dem @-Zeichen zu verwenden, stehen mehrere gleichwertige Varianten zur Verfügung:
${user.username?keep_before("@")}${user.username?split("@")[0]}${user.username[0..user.username?index_of("@")-1]}
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:
| Platzhalter | Auflösung |
|---|---|
${user.certificate.EXCHANGE} | Zertifikat des Subtyps mit der längsten Restlaufzeit |
${user.certificate.EXCHANGE["mein-zertifikat"]} | Zertifikat mit exakt diesem Namen |
${user.certificate.EXCHANGE[device.serialnumber]} | Zertifikatsname wird aus einem anderen Platzhalter berechnet |
Als Subtyp stehen die Funktionen aus dem Benutzerprofil zur Verfügung: GENERAL_CERTIFICATE, WIFI, EXCHANGE, VPN, SMIME_ENCRYPTION und SMIME_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}.
${user.certificate.EXCHANGE.mein-zertifikat} wird als Rechenoperation interpretiert und führt dazu, dass die gesamte Konfiguration ohne ersetzte Platzhalter ausgeliefert wird.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.
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 stehen in allen platzhalterfähigen Konfigurationen für iOS, macOS, tvOS, Android Enterprise, Android, Windows, Samsung KNS und ChromeOS zur Verfügung. 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 jeweils unterhalb des entsprechenden Eingabefelds im Relution-Portal angezeigt.