- Überblick
- JavaScript-Funktionen
- Python-Funktionen
- Bereitstellen und ausführen
Zugriff auf Plattformdienste
Orchestrator-Assets, Buckets, Warteschlangen und Prozesse, die für eine JavaScript-Funktion über das UiPath TypeScript SDK verfügbar sind, mit der Wahl zwischen delegierter und Funktionsidentität.
JavaScript-Funktionen erreichen Plattformressourcen über das UiPath TypeScript SDK. Im Paket ist nichts hartcodiert: Die Koordinaten stammen von ctx.platform und das Token von einer der beiden Identitäten, die die Laufzeit zur Verfügung stellt.
import { UiPath } from "@uipath/uipath-typescript/core";
import { Assets } from "@uipath/uipath-typescript/assets";
const { baseUrl, orgId, tenantId } = ctx.platform;
const sdk = new UiPath({
baseUrl,
orgName: orgId,
tenantName: tenantId,
secret: ctx.user.accessToken, // or ctx.robot.accessToken
});
import { UiPath } from "@uipath/uipath-typescript/core";
import { Assets } from "@uipath/uipath-typescript/assets";
const { baseUrl, orgId, tenantId } = ctx.platform;
const sdk = new UiPath({
baseUrl,
orgName: orgId,
tenantName: tenantId,
secret: ctx.user.accessToken, // or ctx.robot.accessToken
});
@uipath/uipath-typescript gehört zu dependencies, nicht zu devDependencies: Die bereitgestellte Funktion installiert nur Produktionsabhängigkeiten.
Auswählen der Identität
| Muster | Token | Wer benötigt Ordnerzugriff? |
|---|---|---|
| Delegiert | ctx.user.accessToken | Der aufrufende Benutzer benötigt Assets.View für den Ordner |
| Funktionsidentität | ctx.robot.accessToken | Nur das Dienstkonto der Funktion; Der Aufrufer benötigt nichts |
Delegiert ist die Standardauswahl: Es gelten die eigenen Berechtigungen des Aufrufers, sodass die Funktion nicht verwendet werden kann, um mehr zu sehen, als der Aufrufer berechtigt ist. Die eigene Identität der Funktion ist für Ressourcen vorgesehen, die außerhalb der Reichweite des Aufrufers bleiben müssen – Anmeldeinformationen in einem eingeschränkten Ordner, die nur die Funktion lesen darf.
In diesem Fall muss das, was der Handler abruft, eingeschränkt sein. Ein privilegiertes Back-End, das einen vom Aufrufer bereitgestellten Ressourcennamen liest, übergibt alles, was seine Identität sehen kann:
const READABLE = new Set(["PartnerApiCredential"]);
if (!READABLE.has(input.assetName)) {
throw new FunctionError(`"${input.assetName}" is not readable by this function.`, 403);
}
const READABLE = new Set(["PartnerApiCredential"]);
if (!READABLE.has(input.assetName)) {
throw new FunctionError(`"${input.assetName}" is not readable by this function.`, 403);
}
Assets
const response = await new Assets(sdk).getAll({
filter: `Name eq 'ApiBaseUrl'`,
folderId: 42,
});
const value = response.items[0]?.value;
const response = await new Assets(sdk).getAll({
filter: `Name eq 'ApiBaseUrl'`,
folderId: 42,
});
const value = response.items[0]?.value;
folderId ist erforderlich: Ohne diese gibt der Aufruf Metadaten mit leeren Werten zurück.
folderId ist die numerische ID des Ordners, nicht sein Schlüssel. Ein Ordnerschlüssel ist eine GUID, und die Übergabe eines Schlüssels, zu dem die numerische ID gehört, wird als Berechtigungsfehler und nicht als falscher Bezeichner abgelehnt, wodurch Sie an der falschen Stelle suchen. ctx.platform.folderKey gibt Ihnen den Schlüssel des aktuellen Aufrufs an; Lösen Sie die numerische ID daraus auf, wenn ein Aufruf eine erfordert.
Der Benutzername und das Kennwort eines Anmeldeinformations-Assets werden von diesen Endpunkten für kein Token zurückgegeben. Das Lesen erfordert die eigene Identität der Funktion und den Roboter-Ausführungspfad, der ctx.robot.key erfordert – damit es nur in einer bereitgestellten Ausführung funktioniert. Siehe Aufrufen des Orchestrator.
Bei einem Geheimnis- Assets kommt der Wert im Feld SecretValue an. StringValue, das Feld, das den Wert eines Text-Assets enthält, ist für ein Geheimnis leer – stattdessen sieht es nach einer fehlerhaften Funktion und nicht nach dem falschen Feld aus.
Ein Asset verfügt auch über eine AllowDirectApiAccess -Einstellung, die seinen Wert mit dem eigenen Token des Aufrufers lesbar macht. Das Aktivieren ist eine Erweiterung und kein Aktivierungsschritt: Die Einstellung ist identitätsorientiert, sodass der Wert für jede Identität lesbar wird, die Assets.View für den Ordner enthält, einschließlich eines Browsers, der das Token des angemeldeten Benutzers enthält. Die eigene Identität der Funktion ist die sicherere Wahl gegenüber dem Aktivieren dieser Einstellung.
Andere Dienste
Derselbe Client stellt Buckets, Warteschlangen, Aufträge, Prozesse, Entitäten und Integration Service-Verbindungen bereit. Die vollständige Oberfläche finden Sie in der SDK-Referenz .
Anmeldeinformationen und Sicherheit
- Geheimnisse befinden sich live in Orchestrator-Assets und werden zur Runtime gelesen – codieren Sie sie niemals hartcodiert oder übergeben Sie sie dem Projekt.
- Die rollenbasierte Zugriffskontrolle auf Ordnerebene (RBAC) regelt, was jede Identität lesen kann. Mit dem delegierten Muster, das der Zugriff des Aufrufers ist; Bei der eigenen Identität der Funktion ist es die des Dienstkontos.
- Geben Sie ein abgeleitetes Ergebnis anstelle eines Geheimnisses zurück, wo immer Sie können, und protokollieren Sie die Aktion, niemals den Wert.