Zum Hauptinhalt springen

Authentifizierung

Alle IDCloud-APIs (Web & SDK- und API-Verträge) verwenden OAuth2 mit JWT Bearer Grant Type (RFC 7523). Sie generieren eine kurzlebige JWT-Assertion in Ihrem Back-End, tauschen sie gegen ein Bearer-Token aus und verwenden dieses Token bei jedem nachfolgenden Aufruf.

Führen Sie dies niemals auf der Client-Seite durch

Die JWT-Assertion muss ausschließlich in Ihrem Back-End generiert werden. Legen Sie Ihren privaten Schlüssel niemals in Front-End-Code, mobilen Apps, Repositories oder Logs offen.

Anmeldedaten abrufen

Bevor Sie Token generieren können, benötigen Sie ein von Unico bereitgestelltes Dienstkonto. Kontaktieren Sie den Unico-Support und geben Sie folgendes an:

  • Name des Dienstkontos (max. 12 Zeichen)
  • Name, E-Mail und Telefonnummer der verantwortlichen Person (nur Nummern aus Brasilien, USA oder Mexiko)

Sie erhalten:

  • Eindeutiger Kontoname
  • Mandanten-ID (Tenant ID)
  • Basis-JWT-Payload
  • Private-Key-Datei (Format .pem)
Ein Konto pro Umgebung

Verwenden Sie separate Dienstkonten für UAT und Produktion.

JWT-Assertion erstellen

Die Assertion ist ein JWT im kompakten JWS-Format: {Base64url(Header)}.{Base64url(Payload)}.{Base64url(Signature)}.

Header
{
"alg": "RS256",
"typ": "JWT"
}
Payload
ClaimWertHinweise
iss<account_name>@<tenant_id>.iam.acesso.ioWird mit Ihren Anmeldedaten bereitgestellt
audhttps://identityhomolog.acesso.io (UAT) oder https://identity.acesso.io (Produktion)Muss mit dem Token-Endpoint-Host übereinstimmen
scope*Gewährt alle Berechtigungen
iatUnix-Zeitstempel (Sekunden)Zeitpunkt der JWT-Ausstellung
expiat + max 3600Darf iat nicht um mehr als 1 Stunde überschreiten
{
"aud": "https://identity.acesso.io",
"scope": "*",
"iat": 1738086000,
"exp": 1738089600
}
Signature

Signieren Sie Header + Payload mit RS256 (RSA + SHA-256) und dem von Unico bereitgestellten privaten Schlüssel im Format .pem.

Fügen Sie keine zusätzlichen Claims hinzu

Jedes Feld, das nicht oben aufgeführt ist (z. B. sub, jti, nbf), führt zu einem Fehler 1.2.22. Verwenden Sie ausschließlich die angezeigten Claims.

Token anfordern

Der Token-Endpoint ist für beide Verträge identisch:

UmgebungEndpoint
ProduktionPOST https://identity.acesso.io/oauth2/token
UATPOST https://identityhomolog.acesso.io/oauth2/token
Request
ParameterWert
Content-Typeapplication/x-www-form-urlencoded
grant_typeurn:ietf:params:oauth:grant-type:jwt-bearer
assertionIhr signiertes JWT
curl -X POST https://identity.acesso.io/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
-d "assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
Response
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
FeldTypBeschreibung
access_tokenstringJWT-Zugriffstoken. Verwenden Sie es als Authorization: Bearer <token> bei allen API-Aufrufen.
expires_inintegerAblaufzeit in Sekunden. Beispiel: 3600.
token_typestringImmer Bearer.

Token verwenden

Fügen Sie das Token dem Authorization-Header jeder API-Anfrage hinzu. Der Header ist für beide Verträge identisch — was sich unterscheidet, ist der Host und Pfad der aufgerufenen API:

VertragProduktions-HostUAT-Host
Web & SDKhttps://api.idcloud.unico.apphttps://api.idcloud.uat.unico.app
APIhttps://api.id.unico.apphttps://api.id.uat.unico.app

Web & SDKAuthorization ist der einzige erforderliche Auth-Header:

curl -X POST https://api.idcloud.unico.app/client/v1/process \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'

APIAuthorization wird zusammen mit dem APIKEY-Header verwendet:

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ ... }'

Token erneuern

Token laufen nach 3600 Sekunden ab. Implementieren Sie eine proaktive Erneuerung in Ihrem Back-End:

  • Verfolgen Sie expires_in aus der Token-Antwort und speichern Sie den Ablaufzeitstempel.
  • Fordern Sie ein neues Token an, wenn noch 10 Minuten oder weniger bis zum Ablauf verbleiben.
  • Warten Sie in der Produktionsumgebung nie auf ein 401, bevor Sie eine Erneuerung auslösen.

API-Referenz

Die vollständige OpenAPI-Spezifikation für den Token-Endpoint ist in authentication.yaml verfügbar.

MethodePfadBeschreibung
POST/oauth2/tokenTauscht eine signierte JWT-Assertion gegen ein Bearer-Zugriffstoken aus

Fehlercodes

CodeBeschreibungMaßnahme
1.0.1Die in der iss-Bildung angegebene ID ist falschÜberprüfen Sie, ob das iss-Feld mit der Mandanten-ID übereinstimmt, die bei der Generierung des privaten Schlüssels angegeben wurde
1.0.14Anwendung ist nicht aktivPrüfen Sie mit dem Projektmanager, ob die verwendete Anwendung aktiv ist
1.1.1Der Parameter scope wurde nicht angegebenFügen Sie "scope": "*" zu Ihrem JWT-Payload hinzu
1.2.4JWT-Assertion ungültigDie JWT-Assertion ist nicht mehr gültig. Zwei mögliche Ursachen: (a) der aktuelle Zeitpunkt liegt nach exp (JWT tatsächlich abgelaufen — generieren Sie für jede Token-Anfrage eine neue Assertion); oder (b) exp überschreitet iat + 3600 (Gültigkeitsdauer zu lang — begrenzen Sie exp auf iat + 3600).
1.2.5JWT-Validierung fehlgeschlagenDas JWT kann nicht validiert werden. Überprüfen Sie die Parameter und stellen Sie sicher, dass es mit RS256 und dem richtigen privaten Schlüssel signiert wurde
1.2.6Privater Schlüssel ist nicht mehr gültigDer zum Signieren des JWT verwendete private Schlüssel ist nicht mehr akzeptiert. Fordern Sie neue Anmeldedaten für das Konto an
1.2.7JWT bereits verwendetDas JWT wird nicht mehr akzeptiert, da es bereits verwendet wurde. Generieren Sie für jede Token-Anfrage eine neue Assertion
1.2.11Konto ist nicht aktivDas verwendete Konto ist nicht aktiv
1.2.14Konto verfügt nicht über die erforderlichen BerechtigungenDas verwendete Konto besitzt nicht die erforderlichen Berechtigungen
1.2.18Konto vorübergehend gesperrtDas Konto wurde vorübergehend gesperrt, da die Anzahl ungültiger Authentifizierungsversuche überschritten wurde
1.2.19Nicht autorisierte BenutzerverkörperungDas JWT enthält einen sub-Claim, der auf ein Konto verweist, das nicht zur Verkörperung autorisiert ist. Entfernen Sie den sub-Claim aus dem Payload.
1.2.20JWT-Dekodierung fehlgeschlagenDas JWT konnte nicht dekodiert werden. Überprüfen Sie das Token-Format und stellen Sie sicher, dass es mit RS256 signiert wurde.
1.2.21Falscher privater Schlüssel / Authentifizierung fehlgeschlagenDie JWT-Signatur konnte für kein bekanntes Schlüsselpaar dieses Kontos verifiziert werden. Stellen Sie sicher, dass Sie den richtigen .pem-Schlüssel für dieses Dienstkonto und diese Umgebung verwenden.
1.2.22Nicht erlaubte Felder im PayloadDas JWT enthält zusätzliche Payload-Felder, die nicht erlaubt sind. Entfernen Sie alle Claims, die nicht in dieser Anleitung aufgeführt sind (z. B. sub, jti, nbf). Hinweis: Falls ein sub-Claim enthalten war und stattdessen Fehler 1.2.19 aufgetreten ist, hat dieser Fehler Vorrang.
1.3.1IP-ZugriffsbeschränkungIhre IP befindet sich nicht auf der Zulassungsliste für dieses Konto
1.3.2Zeitbasierte ZugriffsbeschränkungDie Anfrage liegt außerhalb des erlaubten Zeitfensters für dieses Konto

Nächste Schritte