Beveiliging voor externe componenten

Oracle Content Management biedt externe ontwikkelaars de mogelijkheid om hun aangepaste componenten te integreren in het Oracle Content Management platform, maar ze op te slaan op een externe server.

Elke externe component moet geregistreerde instellingen en eindpunten voor weergave in Oracle Content Management hebben. Naast eindpunten moeten ontwikkelaars ook een unieke geheime sleutel voor de geregistreerde component opgeven.

In Oracle Content Management worden de eindpunten van de geregistreerde component aangeroepen om de inhoud weer te geven op een sitepagina. Omdat deze eindpunten zichtbaar zijn op het openbare internet, moeten ontwikkelaars controleren of de eindpunten van een geregistreerde externe component wel worden aangeroepen vanuit Oracle Content Management. Om de authenticiteit van de aanroep te kunnen verifiëren, wordt een ondertekend token geleverd aan de geregistreerde eindpunten van een URL. De aanroepende partij wordt geauthenticeerd door de digitale handtekening die in het ondertekende token is ingesloten, te verifiëren met de geheime sleutel van de externe component die tijdens het registratieproces is opgegeven.

De indeling van het token is:

{base64 encoded serialized JSON data}.{base64 encoded signature}

Hieronder ziet u een voorbeeld van een token dat wordt doorgegeven aan de geregistreerde eindpunten van een app:

eyJpbnN0YW5jZWlkIjoiQTRGOTE3REY5OTZEN0Q3ODBCMjUzODZFOTFEMDA3ODJGMjVBRjY2Rjc3OTIiLCJzaWduZGF0ZSI6IjE0NDU2MzcwNTk5MTciLCJzaXRlZG9tYWluIjoic2VydmljZTEtdGVuYW50MS51cy5vcmFjbGUuY29tIiwicGVybWlzc2lvbnMiOiJTSVRFX09XTkVSIiwiZW50aXRsZW1lbnRzIjoiIn0=.5p3of7t11OwuysF3zpm+YgICSHH8C/BHczdbVZx2VH8=

Het token bestaat uit twee afzonderlijke delen: gegevens en een handtekening, van elkaar gescheiden met het scheidingsteken '.'

De algemene richtlijn voor ontwikkelaars is dat ze het token altijd moeten authenticeren in de bewerk- of voorbeeldmodus voordat ze de aanroepende partij toegang verlenen tot geregistreerde eindpunten van een component. Naast het authenticeren van de aanroepende partij in het instellingeneindpunt, moeten ontwikkelaars ook altijd de waarde voor SITE_OWNER (site-eigenaar) in het veld permissions (rechten) van het token controleren. In het veld permissions van het token wordt de waarde van SITE_OWNER alleen getoond in de bewerkmodus. Een token dat is gegenereerd tijdens een bewerksessie wordt nooit persistent gemaakt in het paginamodel en wordt uitgeschakeld met een runtimetoken met een NULL-waarde in het veld permissions.

Gegevens

Het gegevensgedeelte van de instance is een Base64 JSON gecodeerde string. Dit is de structuur van de JSON-string:

{
  "instanceid": "BBDC7614F693B75110D811E6C0B77C935FAEC5112E5E",
  "permissions": "",
  "entitlements": "",
  "signdate": "1435426735293",
  "sitedomain": "service1-tenant4.localhost"
}
Veldnaam Beschrijving

instanceid

Unieke ID van een component voor een Oracle Content Management tenant

signdate

Datum van genereren handtekening

sitedomain

Domeinnaam van de Oracle Content Management instance.

permissions

Set rechten van het sitelid In de bewerkmodus heeft deze de waarde SITE_OWNER. In een andere modus heeft deze geen waarde.

entitlements

Lijst met extra functies die door de site-eigenaar zijn aangeschaft

Handtekening

Het gegevensgedeelte van de externe componentinstance wordt geserialiseerd voordat het wordt ondertekend door een APP_SECRET_KEY. Deze geheime sleutel moet worden gegenereerd en aan de ontwikkelaar worden getoond bij het registreren van de component. De handtekening wordt berekend door een hash van het gegevensgedeelte van de componentinstance te genereren (een geserialiseerde JSON-structuur) met de geheime sleutel, zoals hier wordt getoond:

$signature = HMAC (serialized JSON structure, APP_SECRET_KEY)

Het hashalgoritme dat bij het genereren van de handtekening wordt gebruikt, is SHA256. Het token is vervolgens de aaneenschakeling van de geserialiseerde JSON-structuur en de gegenereerde handtekeningcomponent, zoals hier wordt getoond:

$instance = {base64encoded serialized JSON structure}.{base64encoded $signature}