Zugriffsschlüssel sind die Grundlage für einen alternativen Autorierungsmechanismus, der mittels einer annehmbaren Strategie das Schreiben oder Lesen von Objekten oder Derivaten ermöglicht.
Mit einer zugehörigen Strategie können Zugriffsschlüssel die Grundlage für einen unabhängigen oder nebenläufigen Autorierungsansatz schaffen.
Eine wesentliche Motivation ist die Autorisierung unabhängig vom Nutzersystem (Nutzer) für Dritte (Gäste), exemplarisch beleuchtet etwa für Peer-Reviews.
Dabei zielt der Ansatz auf das Lesen, aber auch Schreiben von Objekten oder Derivaten.
Denn fundamental wird zwischen Lese- und Schreibzugriffsschlüssel unterschieden, die persistent oder temporär aktiviert werden kann, siehe Gebrauch.
Ein Nutzer kann für ein Objekt oder Derivat genau einen Zugriffsschlüssel persistent aktivieren.
Zusätzlich können Gäste oder Nutzer gegebenenfalls Zugriffsschlüssel temporär für ein Objekt oder Derivat aktivieren.
Hierbei unterliegt der Zugriffsschlüssel der Browser-Session.
Zugriffsschlüssel können grundsätzlich deaktiviert werden.
Die Gültigkeit kann optional zeitlich über ein Ablaufdatum beschränkt werden.
Die REST-API V2 bietet eine Möglichkeit für die Verwaltung von Zugriffsschlüsseln.
Bis LTS 2024.06 muss ein Nutzer oder Gast dafür mindestens über Schreibrechte verfügen.
Gegebenenfalls muss die REST-API zusätzlich aktiviert werden, wenn beispielsweise die Verwaltung von Zugriffsschlüsseln für Gäste zugelassen werden soll.
Ab LTS 2025.06 sind dafür eigene Berechtigungen erforderlich.
Darüber hinaus steht ein Ansatz für eine Webapplikation zur Verwaltung von Zugriffsschlüsseln bereit.
Zusammenfassung aller Properties mit default Werten und Beispielen, die Zugriffsschlüssel betreffen:
|
|
Die Ablage der Secrets wird bis LTS 2023.06 wie folgt konfiguriert:
|
|
Ab LTS 2024.06 wird die Ablage über einen SecretProcessor konfiguriert. Das Verfahren für das Hashing ist unverändert, bestehende Zugriffsschlüssel bleiben daher gültig. Eine abweichend konfigurierte Anzahl an Iterationen muss in das neue Property übernommen werden.
|
|
Strukturell betrachtet setzt sich ein Zugriffsschlüssel substanziell aus einem Secret und Type zusammen.
Secret definiert das Geheimnis, das ein Nutzer kennen muss, um den Zugriffsschlüssel zu aktivieren.
Der Wert kann frei gewählt werden, jedoch kann der Wert nach dem Hinzufügen des Zugriffsschlüssels nicht mehr eingesehen oder geändert werden.
Das Secret wird default gehasht im Backend abgelegt, siehe Konfiguration.
Type spiegelt die Berechtigung wieder, die sich aus der Aktivierung des Zugriffsschlüssels für ein Objekt oder Derivat ergibt.
Der Ansatz unterstützt Lese- und Schreibzugriffsschlüssel: Der Type eines Lesezugriffschlüssels wird mit dem Wert read beschrieben, ein Schreibzugriffsschlüssel mit dem Wert writedb.
Optional kann der Status eines Zugriffsschlüssels mit IsActive beschrieben werden.
Hiermit kann der Zugriffsschlüssel de- und aktiviert werden
IsActive wird mit true (aktiviert) oder false (deaktiviert) beschrieben.
Mit Expiration kann ein Ablaufdatum für den Zugriffsschlüssel gesetzt werden.
Damit lässt sich die Gültigkeit zeitlich einschränken.
Als Wert wird prinzipiell ein Unix Timestamp erwartet.
Comment dient für zusätzliche Informationen, die eventuell wichtig für die Verwaltung sind.
Die folgende Ansicht zeigt einen Zugriffsschlüssel im JSON-Format mit allen manipulierbaren Eigenschaften:
|
|
Ab LTS 2025.06 werden Zugriffsschlüssel über die REST-API nicht mehr pro Objekt,
sondern über eine eigene Ressource verwaltet. Ein Zugriffsschlüssel enthält deshalb zusätzlich seine Referenz
(Reference, in der Regel eine Objekt- oder Derivat-ID) und wird über eine eindeutige Id (UUID) angesprochen.
Außerdem werden Ersteller, Erstelldatum, letzter Bearbeiter und Datum der letzten Änderung
(createdBy, created, lastModifiedBy, lastModified) ausgegeben.
Beim Erstellen werden secret, reference und type erwartet:
|
|
Bis LTS 2024.06 reicht für die Verwaltung von Zugriffsschlüsseln das Recht
writedb auf dem Objekt bzw. Derivat sowie auf restapi:/.
Mit der neuen REST-API (ab LTS 2024.06.1 als Draft, ab
LTS 2025.06 ausschließlich) wird für jeden Zugriffsschlüssel das Recht
manage-access-key-{type} auf der Referenz des Schlüssels geprüft, also z.B.
manage-access-key-read für einen Lesezugriffsschlüssel eines Objekts.
Die Prüfung erfolgt über die konfigurierte Zugriffsstrategie, sodass die Rechte etwa über default_mods
vergeben werden können. Das Recht manage-access-key auf POOLPRIVILEGE erlaubt die
Verwaltung aller Zugriffsschlüssel.
Zusätzlich erfordert die REST-API das Recht manage-access-key auf restapi:/access-keys
bzw. restapi:/. Existiert nur für eine dieser IDs eine Regel, wird diese verwendet, existieren beide,
müssen beide erfüllt sein. Ohne Regel ist der Zugriff nur dem Superuser erlaubt.
| Recht | ID | Bedeutung |
|---|---|---|
manage-access-key-read | Objekt-/Derivat-ID | Lesezugriffsschlüssel verwalten |
manage-access-key-writedb | Objekt-/Derivat-ID | Schreibzugriffsschlüssel verwalten |
manage-access-key | POOLPRIVILEGE | alle Zugriffsschlüssel verwalten |
manage-access-key | restapi:/access-keys | Zugriff auf den REST-Endpunkt |
Zugriffsschlüssel können persistent oder temporär aktiviert werden. Persistent bedeutet, dass der Zugriffsschlüssel als Attribut im Nutzerdatensatz in der Datenbank abgelegt wird. Diese Funktionalität kann derzeit noch nicht über das Front-End genutzt werden. Temporär bedeutet, dass der Zugriffsschlüssel in der HTTP-Session abgelegt wird und nach Ablauf der Session erneut übermittelt werden muss.
Für die temporäre Aktivierung steht der AccessKeyFilter bereit, der default für das Object-Servlet aktiviert werden kann.
In Kombination mit der bereitgestellten Strategie kann der Filter abgeleitet aus MCR.ACL.AccessKey.Strategy.AllowedSessionPermissionTypes eingeschaltet werden.
Sofern der Filter eingeschaltet ist, wird der Query-String auf das Secret über den Parameter accesskey geprüft - beispielhaft: receive/<object>?accesskey=<secret>.
Nur nur wenn der Zugriffsschlüssel zum angefragten Objekt passt, wird dieser temporär für die HTTP-Session aktiviert - ansonsten ignoriert.
Sonderzeichen (Secret) sollten im Pfad codiert werden, siehe URL-Encoding.
Über die MyCoRe Kommandozeile können auch administrative Operationen für Zugriffsschlüssel ausgeführt werden.
Für den Export von Objekten/Derivaten liegt jeweils ein Style-Sheet save-accesskey bereit, das alle Zugriffsschlüssel in einem JSON-Array in einem ServFlag accesskeys abelegt.
Allgemein werden Zugriffsschlüssel bei einem Update eines Objekts/Derivates nicht berücksichtigt.
Beim Löschen eines Objekts/Derivats werden alle zugehörigen Zugriffsschlüssel gelöscht.
Beim Import eines Objekts/Derivats werden die ServFlags mit dem Typ accesskeys erwartet im JSON-Array-Format.
clear all access keys
clear all access keys for {0}
create access key for {0} from file {1}
update access key for {0} with secret {1} from file {2}
delete access key for {0} with secret {1}
import access keys for {0} from file {1}
export access keys for {0} to file {1}
clean up access key user attributes
hash access key secret {0} for {1}