Dies ist eine Demo, die zeigt, wie man mit Beziehungseigenschaften (auch bekannt als Rollenparameter) in ForgeRock IDM >=6.5 arbeitet. In dieser Demo zeige ich auch eine Lösung zur Abfrage dieser Parameter. In der Demo erstelle ich eine Rolle „Fahrer“ und die Rollenparameter sind alle Fahrzeuge, die zum „Fahrer“ „gehören“. In einigen Anwendungsfällen möchte ich nicht nur „wer ist ein Fahrer“ oder „Ist der Benutzer ein Fahrer“ abfragen, sondern auch „Wer ist der Fahrer dieses Autos“.
Ich danke meinem lieben College Tim Vogt, der mir Input gegeben hat.
Sie können den Code herunterladen und hier testen!
[bogo]
Table of Contents
Zweck der Demo
Der Zweck dieser Demo ist es, zu zeigen, wie die Beziehungen mit ForgeRock IDM 6.5x funktionieren. Sie können „Rollenparameter“ definieren, um eine individuelle Information zu präsentieren, die die Rolle mit einem Benutzer verbindet. Diese Parameter können den verwalteten Objekten im IDM hinzugefügt werden. Die Beziehung stellt eine Verknüpfung von und zu einer Rolle zu einem Benutzerobjekt dar. In diesen Links können Sie Parameter zuweisen (wir nennen sie Beziehungseigenschaften). Diese „Parameter“ sind spezifisch für diesen „Link“. IDM nutzt dies durch DEFAULT in dem Rollenobjekt, das einem Benutzerobjekt zugeordnet werden kann. In diesem Fall kann eine Zeitbeschränkung angelegt werden, damit eine Rollenzuordnung für diesen Benutzer nur temporär erfolgen kann. Die Rollen können auch zur Bereitstellung für Zielsysteme wie AD, LDAP und viele andere Zielsysteme verwendet werden.
Sie können dieses Objektmodell für jedes verwaltete Objekt in IDM nutzen. Der Vorteil ist, dass zu dieser Verknüpfung zwischen diesen Objekten ein individueller „Verknüpfungsparameter“ angelegt wird.
Ein zweiter Anwendungsfall ist die Abfrage dieses Parameters. In meinem Beispiel erstelle ich eine Rolle „Fahrer“ und weise diese einem Benutzer mit dem Parameter des Autokennzeichens „M-HN 1234“ zu. Nun möchte ich die Frage stellen: „Welche Benutzer haben den Rollentreiber für das Auto M-HN 1234“. Der REST Aufruf kann so definiert werden, dass auch die Antworten der Benutzer-IDs mit angezeigt werden.
Wenn Sie möchten, dass eine Abfrage beispielsweise alle Benutzerobjekte als Antwort enthält, empfehle ich einen benutzerdefinierten Endpunkt, der den Fahrzeugparameter abfragt und als Ergebnis des benutzerdefinierten Endpunkts ein „vollständiges“ Lesen der Benutzerobjekte durchführt. Natürlich können Sie auch einen benutzerdefinierten Endpunkt erstellen, um die Antwort nach Bedarf zu erweitern.
Überblick Rollen im IDM
Im Kapitel “Managing Roles” finden Sie alle Details zum Rollen Objekt in IDM.
IDM starten
Um IDM z.B. lokal zu starten:
./startup.sh -p pathto/object-properties -w pathto/object-properties
config/prep des IDM
- managed object configuration
- Hinzufügen eines Rollenparameters „Autos“ zum verwalteten Objekt „Rolle“.

- Abgleich der csv-Demo-Benutzer (Sie haben zwei Benutzer zum Testen: bjensen und acarter)
either do it from the admin console
http://localhost:8080/admin/#properties/systemCsvfileAccounts_managedUser/
or use a restcall:
curl --request POST \
--url 'http://localhost:8080/openidm/recon?_action=recon&mapping=systemCsvfileAccounts_managedUser&waitForCompletion=true' \
--header 'X-OpenIDM-Password: openidm-admin' \
--header 'X-OpenIDM-Username: openidm-admin' \
Response:
{
"_id": "9a7c0543-235b-4eb2-b289-e4a3b5233ce2-67370",
"state": "SUCCESS"
}
- create a role “driver”:
curl --request POST \
--url 'https://localhost:8443/openidm/managed/role/?action=create' \
--header 'X-OpenIDM-Password: openidm-admin' \
--header 'X-OpenIDM-Username: openidm-admin' \
--data '{\n "_id": "driver",\n "name": "Driver",\n "description": "Example role for Drivers"\n}'
Response:
{
"_id": "driver",
"_rev": "0000000097815538",
"name": "Driver",
"description": "Example role for Drivers"
}
TIPP: Ich verwende hier die _id, um die Rolle direkt mit /managed/role/driver anstelle einer UUID aufzurufen!

use case: Zuweisung der Rolle „Fahrer“ an einen Benutzer mit der Eigenschaft Rolle
Ich weise die Rolle einem Benutzer mit dem Parameter „cars“ dem Benutzer „bjensen“ zu:
curl --request PATCH \
--url https://localhost:8443/openidm/managed/user/bjensen \
--header 'Content-Type: application/json' \
--header 'X-OpenIDM-Password: openidm-admin' \
--header 'X-OpenIDM-Username: openidm-admin' \
--data '[\n {\n "operation" : "add",\n "field" : "/roles/-",\n "value" : {\n "_ref": "managed/role/driver",\n "_refProperties": { "cars": "M-HN 1234" }\n }\n }\n ]'
Response:
{
"_id": "bjensen",
"_rev": "0000000070dd1b5e",
"mail": "bjensen@example.com",
"givenName": "Barbara",
"sn": "Jensen",
"description": "Created By CSV",
"userName": "bjensen",
"telephoneNumber": "1234567",
"accountStatus": "active",
"effectiveRoles": [
{
"_ref": "managed/role/driver"
}
],
"effectiveAssignments": []
}
Der Benutzer sollte nun die Rolle „Fahrer“ enthalten:

von der Relationship sieht es so aus:
Beispiel Admin Dashboard für relationale Benutzer->Rolle

Beispiel Admin Dashboard für Beziehungsrolle->Benutzer

Beispiel curl
Aufruf der Rolle direkt
curl --request GET \
--url 'http://localhost:8080/openidm/managed/user/bjensen?_fields=roles'
--header 'X-OpenIDM-Password: openidm-admin' \
--header 'X-OpenIDM-Username: openidm-admin' \
sample respond:
{
"_id": "bjensen",
"_rev": "00000000a0aa11bb",
"roles": [
{
"_ref": "managed/role/driver",
"_refResourceCollection": "managed/role",
"_refResourceId": "driver",
"_refProperties": {
"cars": "M-HN 1234",
"_id": "1fc4f216-eedb-4c61-bc6e-d505e87d3e11",
"_rev": "00000000d8639b19"
}
}
]
}
Aufruf des Benutzers:
curl --request GET \
--url 'http://localhost:8080/openidm/managed/user/bjensen?_fields=roles' \
--header 'X-OpenIDM-Password: openidm-admin' \
--header 'X-OpenIDM-Username: openidm-admin' \
respond:
{
"_id": "bjensen",
"_rev": "00000000a0aa11bb",
"roles": [
{
"_ref": "managed/role/driver",
"_refResourceCollection": "managed/role",
"_refResourceId": "driver",
"_refProperties": {
"cars": "M-HN 1234",
"_id": "1fc4f216-eedb-4c61-bc6e-d505e87d3e11",
"_rev": "00000000d8639b19"
}
}
]
}
use case: Abfrage der Beziehungseigenschaften zu einer Rolleneigenschaft „car“.
the query in a more reader friendly way:
openidm/repo/relationships/?_queryFilter=firstResourceCollection eq 'managed/role' and properties/cars eq "M-HN 1234"
curl --request GET \
--url 'http://localhost:8080/openidm/repo/relationships/?_queryFilter=firstResourceCollection%20eq%20%27managed/role%27%20and%20properties/cars%20eq%20%22M-HN%201234%22' \
--header 'X-OpenIDM-Password: openidm-admin' \
--header 'X-OpenIDM-Username: openidm-admin' \
response:
{
"result": [
{
"_id": "1fc4f216-eedb-4c61-bc6e-d505e87d3e11",
"_rev": "00000000d8639b19",
"firstResourceCollection": "managed/role",
"firstResourceId": "driver",
"firstPropertyName": "members",
"secondResourceCollection": "managed/user",
"secondResourceId": "bjensen",
"secondPropertyName": "roles",
"properties": {
"cars": "M-HN 1234"
}
}
],
"resultCount": 1,
"pagedResultsCookie": null,
"totalPagedResultsPolicy": "NONE",
"totalPagedResults": -1,
"remainingPagedResults": -1
}
postman collections
coming soon.
Copyright
============= Copyright 2014-2017 ForgeRock AS. All Rights Reserved
Use of this code requires a commercial software license with ForgeRock AS. or with one of its affiliates. All use shall be exclusively subject to such license between the licensee and ForgeRock AS.
This demo is based on the sample: One-Way Sync With CSV Sample
This sample demonstrates reconciliation between a CSV file and the managed/user repository. For documentation relating to this sample, see https://backstage.forgerock.com/docs/idm/6.5/samples-guide#chap-sync-with-csv