mirror of
https://github.com/andwati/zitadel.git
synced 2026-11-02 04:12:16 +00:00
feat(action v2): add JWT and JWE payload type options (#11196)
# Which Problems Are Solved The payload in actions V2 is currently sent as JSON to the target endpoint. It might get exposed to intermediary infrastructure or logging systems. For these scenarios there needs to be an application-layer encryption, where the provider of the endpoint can define an key to be used for the encryption. # How the Problems Are Solved - Added an additional option to the target to specify the payload type: `JSON` (current and default), `JWT`, `JWE` (api and console) - added endpoints to upload and manage public keys (to be used for encryption) for a target - updated all action v2 executions (interceptors, oidc, saml, ...) to provide the `GetActiveSigningWebKey` from queries - implemented jwt and jwe in the exections incl. refactoring of code and tests - changes to the authn_keys table: - added a `fingerprint` column - dropped not null constraint on expiration - moved the `GetSignerOnce` into its own package to prevent circular dependencies # Additional Changes None # Additional Context closes #11061 --------- Co-authored-by: Marco A. <[email protected]> Co-authored-by: conblem <[email protected]> Co-authored-by: Silvan <[email protected]>
This commit is contained in:
co-authored by
Marco A.
conblem
Silvan
parent
72c8f0192c
commit
791d0587aa
+1
-1
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, computed, effect, EventEmitter, Inp
|
||||
import { combineLatestWith, Observable, ReplaySubject } from 'rxjs';
|
||||
import { filter, map, startWith } from 'rxjs/operators';
|
||||
import { MatTableDataSource } from '@angular/material/table';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2beta/target_pb';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2/target_pb';
|
||||
import { toSignal } from '@angular/core/rxjs-interop';
|
||||
import { CorrectlyTypedExecution } from '../../actions-two-add-action/actions-two-add-action-dialog.component';
|
||||
|
||||
|
||||
+3
-3
@@ -13,10 +13,10 @@ import {
|
||||
} from '../actions-two-add-action/actions-two-add-action-dialog.component';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { MessageInitShape } from '@bufbuild/protobuf';
|
||||
import { SetExecutionRequestSchema } from '@zitadel/proto/zitadel/action/v2beta/action_service_pb';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2beta/target_pb';
|
||||
import { SetExecutionRequestSchema } from '@zitadel/proto/zitadel/action/v2/action_service_pb';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2/target_pb';
|
||||
import { InfoSectionType } from '../../info-section/info-section.component';
|
||||
import { ExecutionFieldName } from '@zitadel/proto/zitadel/action/v2beta/query_pb';
|
||||
import { ExecutionFieldName } from '@zitadel/proto/zitadel/action/v2/query_pb';
|
||||
|
||||
@Component({
|
||||
selector: 'cnsl-actions-two-actions',
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import { ToastService } from 'src/app/services/toast.service';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { atLeastOneFieldValidator, requiredValidator } from 'src/app/modules/form-field/validators/validators';
|
||||
import { Message } from '@bufbuild/protobuf';
|
||||
import { Condition } from '@zitadel/proto/zitadel/action/v2beta/execution_pb';
|
||||
import { Condition } from '@zitadel/proto/zitadel/action/v2/execution_pb';
|
||||
import { distinctUntilChanged, startWith, takeUntil } from 'rxjs/operators';
|
||||
import { CreateQueryResult } from '@tanstack/angular-query-experimental';
|
||||
import { toSignal } from '@angular/core/rxjs-interop';
|
||||
|
||||
+2
-2
@@ -10,9 +10,9 @@ import {
|
||||
} from './actions-two-add-action-condition/actions-two-add-action-condition.component';
|
||||
import { ActionsTwoAddActionTargetComponent } from './actions-two-add-action-target/actions-two-add-action-target.component';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { Condition, Execution } from '@zitadel/proto/zitadel/action/v2beta/execution_pb';
|
||||
import { Condition, Execution } from '@zitadel/proto/zitadel/action/v2/execution_pb';
|
||||
import { Subject } from 'rxjs';
|
||||
import { SetExecutionRequestSchema } from '@zitadel/proto/zitadel/action/v2beta/action_service_pb';
|
||||
import { SetExecutionRequestSchema } from '@zitadel/proto/zitadel/action/v2/action_service_pb';
|
||||
|
||||
enum Page {
|
||||
Type,
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import { ToastService } from 'src/app/services/toast.service';
|
||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
import { InputModule } from 'src/app/modules/input/input.module';
|
||||
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2beta/target_pb';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2/target_pb';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { ActionConditionPipeModule } from 'src/app/pipes/action-condition-pipe/action-condition-pipe.module';
|
||||
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
||||
|
||||
+12
@@ -31,6 +31,18 @@
|
||||
</span>
|
||||
</cnsl-form-field>
|
||||
|
||||
<cnsl-form-field class="full-width">
|
||||
<cnsl-label>{{ 'ACTIONSTWO.TARGET.CREATE.PAYLOAD_TYPE' | translate }}</cnsl-label>
|
||||
<mat-select [formControl]="targetForm.controls.payloadType" name="payloadType">
|
||||
<mat-option *ngFor="let type of payloadTypes" [value]="type">
|
||||
{{ 'ACTIONSTWO.TARGET.CREATE.PAYLOAD_TYPES.' + type | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<span class="name-hint cnsl-secondary-text types-description">
|
||||
{{ 'ACTIONSTWO.TARGET.CREATE.PAYLOAD_TYPE_DESCRIPTION' | translate }}
|
||||
</span>
|
||||
</cnsl-form-field>
|
||||
|
||||
<cnsl-form-field class="full-width">
|
||||
<cnsl-label>{{ 'ACTIONSTWO.TARGET.CREATE.TIMEOUT' | translate }}</cnsl-label>
|
||||
<input cnslInput type="number" placeholder="10" [formControl]="targetForm.controls.timeout" />
|
||||
|
||||
+12
-6
@@ -10,11 +10,9 @@ import { requiredValidator } from '../../form-field/validators/validators';
|
||||
import { MessageInitShape } from '@bufbuild/protobuf';
|
||||
import { DurationSchema } from '@bufbuild/protobuf/wkt';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2beta/target_pb';
|
||||
import {
|
||||
CreateTargetRequestSchema,
|
||||
UpdateTargetRequestSchema,
|
||||
} from '@zitadel/proto/zitadel/action/v2beta/action_service_pb';
|
||||
import { PayloadType, Target } from '@zitadel/proto/zitadel/action/v2/target_pb';
|
||||
import { CreateTargetRequestSchema, UpdateTargetRequestSchema } from '@zitadel/proto/zitadel/action/v2/action_service_pb';
|
||||
import { getEnumKeyFromValue, getEnumKeys } from 'src/app/utils/enum.utils';
|
||||
|
||||
type TargetTypes = ActionTwoAddTargetDialogComponent['targetTypes'][number];
|
||||
|
||||
@@ -36,6 +34,7 @@ type TargetTypes = ActionTwoAddTargetDialogComponent['targetTypes'][number];
|
||||
export class ActionTwoAddTargetDialogComponent {
|
||||
protected readonly targetTypes = ['restCall', 'restWebhook', 'restAsync'] as const;
|
||||
protected readonly targetForm: ReturnType<typeof this.buildTargetForm>;
|
||||
protected readonly payloadTypes = getEnumKeys(PayloadType);
|
||||
|
||||
constructor(
|
||||
private fb: FormBuilder,
|
||||
@@ -56,6 +55,8 @@ export class ActionTwoAddTargetDialogComponent {
|
||||
endpoint: data.target.endpoint,
|
||||
timeout: Number(data.target.timeout?.seconds),
|
||||
type: this.data.target?.targetType?.case ?? 'restWebhook',
|
||||
payloadType:
|
||||
getEnumKeyFromValue(PayloadType, this.data.target?.payloadType ?? PayloadType.UNSPECIFIED) || this.payloadTypes[0],
|
||||
interruptOnError:
|
||||
data.target.targetType.case === 'restWebhook' || data.target.targetType.case === 'restCall'
|
||||
? data.target.targetType.value.interruptOnError
|
||||
@@ -70,6 +71,10 @@ export class ActionTwoAddTargetDialogComponent {
|
||||
nonNullable: true,
|
||||
validators: [requiredValidator],
|
||||
}),
|
||||
payloadType: new FormControl<(typeof this.payloadTypes)[number]>(this.payloadTypes[0], {
|
||||
nonNullable: true,
|
||||
validators: [requiredValidator],
|
||||
}),
|
||||
endpoint: new FormControl<string>('', { nonNullable: true, validators: [requiredValidator] }),
|
||||
timeout: new FormControl<number>(10, { nonNullable: true, validators: [requiredValidator] }),
|
||||
interruptOnError: new FormControl<boolean>(false, { nonNullable: true }),
|
||||
@@ -81,7 +86,7 @@ export class ActionTwoAddTargetDialogComponent {
|
||||
return;
|
||||
}
|
||||
|
||||
const { type, name, endpoint, timeout, interruptOnError } = this.targetForm.getRawValue();
|
||||
const { type, name, endpoint, timeout, interruptOnError, payloadType } = this.targetForm.getRawValue();
|
||||
|
||||
const timeoutDuration: MessageInitShape<typeof DurationSchema> = {
|
||||
seconds: BigInt(timeout),
|
||||
@@ -100,6 +105,7 @@ export class ActionTwoAddTargetDialogComponent {
|
||||
endpoint,
|
||||
timeout: timeoutDuration,
|
||||
targetType,
|
||||
payloadType: PayloadType[payloadType],
|
||||
};
|
||||
|
||||
this.dialogRef.close(
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, effect, EventEmitter, Input, Output
|
||||
import { ReplaySubject } from 'rxjs';
|
||||
import { filter, startWith } from 'rxjs/operators';
|
||||
import { MatTableDataSource } from '@angular/material/table';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2beta/target_pb';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2/target_pb';
|
||||
import { toSignal } from '@angular/core/rxjs-interop';
|
||||
|
||||
@Component({
|
||||
|
||||
+2
-5
@@ -7,11 +7,8 @@ import { catchError, map, startWith, switchMap } from 'rxjs/operators';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { ActionTwoAddTargetDialogComponent } from '../actions-two-add-target/actions-two-add-target-dialog.component';
|
||||
import { MessageInitShape } from '@bufbuild/protobuf';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2beta/target_pb';
|
||||
import {
|
||||
CreateTargetRequestSchema,
|
||||
UpdateTargetRequestSchema,
|
||||
} from '@zitadel/proto/zitadel/action/v2beta/action_service_pb';
|
||||
import { Target } from '@zitadel/proto/zitadel/action/v2/target_pb';
|
||||
import { CreateTargetRequestSchema, UpdateTargetRequestSchema } from '@zitadel/proto/zitadel/action/v2/action_service_pb';
|
||||
import { InfoSectionType } from '../../info-section/info-section.component';
|
||||
|
||||
@Component({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
import { Condition } from '@zitadel/proto/zitadel/action/v2beta/execution_pb';
|
||||
import { Condition } from '@zitadel/proto/zitadel/action/v2/execution_pb';
|
||||
|
||||
@Pipe({
|
||||
name: 'condition',
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
SetExecutionResponse,
|
||||
UpdateTargetRequestSchema,
|
||||
UpdateTargetResponse,
|
||||
} from '@zitadel/proto/zitadel/action/v2beta/action_service_pb';
|
||||
} from '@zitadel/proto/zitadel/action/v2/action_service_pb';
|
||||
import { UserService } from './user.service';
|
||||
import { injectQuery } from '@tanstack/angular-query-experimental';
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ import { createGrpcWebTransport } from '@connectrpc/connect-web';
|
||||
import { createClientFor } from '@zitadel/client';
|
||||
|
||||
import { WebKeyService } from '@zitadel/proto/zitadel/webkey/v2beta/webkey_service_pb';
|
||||
import { ActionService } from '@zitadel/proto/zitadel/action/v2beta/action_service_pb';
|
||||
import { ActionService } from '@zitadel/proto/zitadel/action/v2/action_service_pb';
|
||||
|
||||
const createWebKeyServiceClient = createClientFor(WebKeyService);
|
||||
const createActionServiceClient = createClientFor(ActionService);
|
||||
|
||||
@@ -30,8 +30,8 @@ type NumericEnum = Record<string, string | number> & Record<number, string>;
|
||||
* // Returns: ['SAML_BINDING_UNSPECIFIED', 'SAML_BINDING_POST', ...]
|
||||
* ```
|
||||
*/
|
||||
export function getEnumKeys<T extends NumericEnum>(enumObject: T): string[] {
|
||||
return Object.keys(enumObject).filter((key) => isNaN(Number(key)));
|
||||
export function getEnumKeys<T extends NumericEnum>(enumObject: T): (keyof T)[] {
|
||||
return Object.keys(enumObject).filter((key) => isNaN(Number(key))) as unknown as (keyof T)[];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,7 +45,7 @@ export function getEnumKeys<T extends NumericEnum>(enumObject: T): string[] {
|
||||
* // Returns: 'SAML_BINDING_POST'
|
||||
* ```
|
||||
*/
|
||||
export function getEnumKeyFromValue<T extends NumericEnum>(enumObject: T, value: number): string | undefined {
|
||||
export function getEnumKeyFromValue<T extends NumericEnum>(enumObject: T, value: number): keyof T | undefined {
|
||||
return Object.keys(enumObject).find((key) => enumObject[key] === value && isNaN(Number(key)));
|
||||
}
|
||||
|
||||
|
||||
@@ -622,6 +622,14 @@
|
||||
"restAsync": "REST асинхронно"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, обаждането обработва кода на състоянието, но отговорът е без значение\nCall, обаждането обработва кода на състоянието и отговора\nAsync, обаждането не обработва нито кода на състоянието, нито отговора, но може да бъде извикано паралелно с други цели",
|
||||
"PAYLOAD_TYPE": "Тип на съдържанието",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Не е уточнено",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Шифрован JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Стандартно JSON съдържание със заглавна част за подпис и валидация.\nJWT: Съдържанието се изпраща като подписан JWT. Верификацията се извършва чрез подписа на JWT.\nJWE: JWT е допълнително шифрован, за да се предотврати неоторизиран достъп до информацията в съдържанието.",
|
||||
"ENDPOINT": "Крайна точка",
|
||||
"ENDPOINT_DESCRIPTION": "Въведете крайната точка, където се хоства вашият код. Уверете се, че е достъпна за нас!",
|
||||
"TIMEOUT": "Време за изчакване",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asynchronní"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, volání zpracovává stavový kód, ale odpověď je irelevantní\nCall, volání zpracovává stavový kód a odpověď\nAsync, volání nezpracovává ani stavový kód, ani odpověď, ale může být spuštěno paralelně s jinými cíli",
|
||||
"PAYLOAD_TYPE": "Typ obsahu",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Neurčeno",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Šifrovaný JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Standardní JSON payload s hlavičkou pro podpis a ověření.\nJWT: Payload je odeslán jako podepsané JWT. Ověření probíhá pomocí podpisu JWT.\nJWE: JWT je navíc zašifrován, aby se předešlo neoprávněnému přístupu k informacím v payloadu.",
|
||||
"ENDPOINT": "Koncový bod",
|
||||
"ENDPOINT_DESCRIPTION": "Zadejte koncový bod, kde je hostován váš kód. Ujistěte se, že je pro nás přístupný!",
|
||||
"TIMEOUT": "Časový limit",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asynchron"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, der Aufruf verarbeitet den Statuscode, aber die Antwort ist irrelevant\nCall, der Aufruf verarbeitet den Statuscode und die Antwort\nAsync, der Aufruf verarbeitet weder Statuscode noch Antwort, kann aber parallel zu anderen Zielen aufgerufen werden",
|
||||
"PAYLOAD_TYPE": "Payload-Typ",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Nicht angegeben",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Verschlüsseltes JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Standard-JSON-Payload mit einem Signatur-Header zur Verifikation.\nJWT: Der Payload wird als signiertes JWT gesendet. Die Verifikation erfolgt über die JWT-Signatur.\nJWE: Das JWT wird zusätzlich verschlüsselt, um unautorisierten Zugriff auf die Payloadinformationen zu verhindern.",
|
||||
"ENDPOINT": "Endpunkt",
|
||||
"ENDPOINT_DESCRIPTION": "Geben Sie den Endpunkt ein, an dem Ihr Code gehostet wird. Stellen Sie sicher, dass er für uns zugänglich ist!",
|
||||
"TIMEOUT": "Timeout",
|
||||
|
||||
@@ -624,6 +624,14 @@
|
||||
"restAsync": "REST Async"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, the call handles the status code but response is irrelevant\nCall, the call handles the status code and response\nAsync, the call handles neither status code nor response, but can be called in parallel with other Targets",
|
||||
"PAYLOAD_TYPE": "Payload Type",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Unspecified",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Encrypted JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Standard JSON payload with an signature header for verification.\nJWT: Payload is sent as signed JWT. Verification is self-contained using the JWT signature.\nJWE: The JWT is additionally encrypted to prevent unauthorized access to payload information.",
|
||||
"ENDPOINT": "Endpoint",
|
||||
"ENDPOINT_DESCRIPTION": "Enter the endpoint where your code is hosted. Make sure it is accessible to us!",
|
||||
"TIMEOUT": "Timeout",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asíncrono"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, la llamada maneja el código de estado pero la respuesta es irrelevante\nCall, la llamada maneja el código de estado y la respuesta\nAsync, la llamada no maneja ni el código de estado ni la respuesta, pero puede ser llamada en paralelo con otros objetivos",
|
||||
"PAYLOAD_TYPE": "Tipo de carga útil",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "No especificado",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "JSON Web Token cifrado (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Carga útil JSON estándar con un encabezado de firma para verificación.\nJWT: La carga útil se envía como un JWT firmado. La verificación es autónoma mediante la firma del JWT.\nJWE: El JWT se cifra adicionalmente para evitar el acceso no autorizado a la información de la carga útil.",
|
||||
"ENDPOINT": "Punto de conexión",
|
||||
"ENDPOINT_DESCRIPTION": "Introduce el punto de conexión donde se aloja tu código. ¡Asegúrate de que sea accesible para nosotros!",
|
||||
"TIMEOUT": "Tiempo de espera",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asynchrone"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, l'appel gère le code d'état mais la réponse est sans importance\nCall, l'appel gère le code d'état et la réponse\nAsync, l'appel ne gère ni le code d'état ni la réponse, mais peut être appelé en parallèle avec d'autres cibles",
|
||||
"PAYLOAD_TYPE": "Type de charge utile",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Non spécifié",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "JSON Web Token chiffré (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Charge utile JSON standard avec un en‑tête de signature pour la vérification.\nJWT: La charge utile est envoyée sous forme de JWT signé. La vérification se fait via la signature du JWT.\nJWE: Le JWT est en plus chiffré pour empêcher l'accès non autorisé aux informations de la charge utile.",
|
||||
"ENDPOINT": "Point de terminaison",
|
||||
"ENDPOINT_DESCRIPTION": "Entrez le point de terminaison où votre code est hébergé. Assurez-vous qu'il nous est accessible !",
|
||||
"TIMEOUT": "Délai d'attente",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Aszinkron"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, a hívás kezeli az állapotkódot, de a válasz lényegtelen\nCall, a hívás kezeli az állapotkódot és a választ\nAsync, a hívás sem az állapotkódot, sem a választ nem kezeli, de párhuzamosan hívható más célokkal",
|
||||
"PAYLOAD_TYPE": "Tartalom típusa",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Nincs megadva",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Titkosított JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Szabványos JSON üzenet aláírási fejlécvel az ellenőrzéshez.\nJWT: Az üzenet aláírt JWT-ként kerül elküldésre. Az ellenőrzés a JWT aláírásával történik.\nJWE: A JWT további titkosítást kap, hogy megakadályozza az illetéktelen hozzáférést az üzenet adataihoz.",
|
||||
"ENDPOINT": "Végpont",
|
||||
"ENDPOINT_DESCRIPTION": "Adja meg azt a végpontot, ahol a kódja található. Győződjön meg arról, hogy elérhető számunkra!",
|
||||
"TIMEOUT": "Időtúllépés",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asinkron"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, panggilan menangani kode status tetapi respons tidak relevan\nCall, panggilan menangani kode status dan respons\nAsync, panggilan tidak menangani kode status maupun respons, tetapi dapat dipanggil secara paralel dengan Target lain",
|
||||
"PAYLOAD_TYPE": "Tipe payload",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Tidak ditentukan",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "JSON Web Token terenkripsi (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Payload JSON standar dengan header tanda tangan untuk verifikasi.\nJWT: Payload dikirim sebagai JWT yang ditandatangani. Verifikasi dilakukan melalui tanda tangan JWT.\nJWE: JWT dienkripsi tambahan untuk mencegah akses tidak sah ke informasi payload.",
|
||||
"ENDPOINT": "Titik Akhir",
|
||||
"ENDPOINT_DESCRIPTION": "Masukkan titik akhir tempat kode Anda dihosting. Pastikan dapat diakses oleh kami!",
|
||||
"TIMEOUT": "Batas Waktu",
|
||||
|
||||
@@ -622,6 +622,14 @@
|
||||
"restAsync": "REST Asincrono"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, la chiamata gestisce il codice di stato ma la risposta è irrilevante\nCall, la chiamata gestisce il codice di stato e la risposta\nAsync, la chiamata non gestisce né il codice di stato né la risposta, ma può essere eseguita in parallelo con altri obiettivi",
|
||||
"PAYLOAD_TYPE": "Tipo di payload",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Non specificato",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "JSON Web Token crittografato (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Payload JSON standard con un'intestazione di firma per la verifica.\nJWT: Il payload viene inviato come JWT firmato. La verifica è autonoma utilizzando la firma del JWT.\nJWE: Il JWT è inoltre crittografato per prevenire l'accesso non autorizzato alle informazioni del payload.",
|
||||
"ENDPOINT": "Endpoint",
|
||||
"ENDPOINT_DESCRIPTION": "Inserisci l'endpoint in cui è ospitato il tuo codice. Assicurati che sia accessibile per noi!",
|
||||
"TIMEOUT": "Timeout",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST 非同期"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook、呼び出しはステータスコードを処理しますが、応答は無関係です\nCall、呼び出しはステータスコードと応答を処理します\nAsync、呼び出しはステータスコードも応答も処理しませんが、他のターゲットと並行して呼び出すことができます",
|
||||
"PAYLOAD_TYPE": "ペイロードの種類",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "未指定",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "暗号化された JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: 検証用の署名ヘッダーを持つ標準の JSON ペイロード。\nJWT: ペイロードは署名付き JWT として送信されます。検証は JWT の署名で行われます。\nJWE: JWT はさらに暗号化され、ペイロード情報への不正アクセスを防ぎます。",
|
||||
"ENDPOINT": "エンドポイント",
|
||||
"ENDPOINT_DESCRIPTION": "コードがホストされているエンドポイントを入力します。アクセス可能であることを確認してください。",
|
||||
"TIMEOUT": "タイムアウト",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST 비동기"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, 호출은 상태 코드를 처리하지만 응답은 중요하지 않습니다\nCall, 호출은 상태 코드와 응답을 처리합니다\nAsync, 호출은 상태 코드나 응답을 처리하지 않지만 다른 대상과 병렬로 호출할 수 있습니다",
|
||||
"PAYLOAD_TYPE": "페이로드 유형",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "지정되지 않음",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "암호화된 JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: 검증을 위한 서명 헤더가 포함된 표준 JSON 페이로드.\nJWT: 페이로드는 서명된 JWT로 전송됩니다. 검증은 JWT 서명을 통해 수행됩니다.\nJWE: JWT는 추가로 암호화되어 페이로드 정보에 대한 무단 접근을 방지합니다.",
|
||||
"ENDPOINT": "엔드포인트",
|
||||
"ENDPOINT_DESCRIPTION": "코드가 호스팅되는 엔드포인트를 입력하십시오. 우리에게 액세스할 수 있는지 확인하십시오!",
|
||||
"TIMEOUT": "시간 초과",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Асинхроно"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, повикот го обработува статусниот код но одговорот е ирелевантен\nCall, повикот го обработува статусниот код и одговорот\nAsync, повикот не го обработува ниту статусниот код ниту одговорот, но може да се повика паралелно со други цели",
|
||||
"PAYLOAD_TYPE": "Тип на содржина",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Не е наведено",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Шифриран JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Стандардна JSON содржина со заглавие за потпис и верификација.\nJWT: Содржината се праќа како потпишан JWT. Верификацијата се врши преку потписот на JWT.\nJWE: JWT-от е дополнително шифриран за да се спречи неовластен пристап до информациите во содржината.",
|
||||
"ENDPOINT": "Крајна точка",
|
||||
"ENDPOINT_DESCRIPTION": "Внесете ја крајната точка каде што е хостиран вашиот код. Осигурете се дека е достапна за нас!",
|
||||
"TIMEOUT": "Време на истекување",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asynchroon"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, de oproep verwerkt de statuscode maar de reactie is irrelevant\nCall, de oproep verwerkt de statuscode en de reactie\nAsync, de oproep verwerkt noch de statuscode noch de reactie, maar kan parallel aan andere doelen worden aangeroepen",
|
||||
"PAYLOAD_TYPE": "Payload-type",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Niet opgegeven",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Versleuteld JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Standaard JSON-payload met een handtekening-header voor verificatie.\nJWT: De payload wordt als een ondertekend JWT verzonden. Verificatie gebeurt via de JWT-handtekening.\nJWE: Het JWT wordt daarnaast versleuteld om ongeautoriseerde toegang tot payloadinformatie te voorkomen.",
|
||||
"ENDPOINT": "Eindpunt",
|
||||
"ENDPOINT_DESCRIPTION": "Voer het eindpunt in waar uw code wordt gehost. Zorg ervoor dat het voor ons toegankelijk is!",
|
||||
"TIMEOUT": "Time-out",
|
||||
|
||||
@@ -622,6 +622,14 @@
|
||||
"restAsync": "REST Asynchroniczny"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, wywołanie obsługuje kod stanu, ale odpowiedź jest nieistotna\nCall, wywołanie obsługuje kod stanu i odpowiedź\nAsync, wywołanie nie obsługuje ani kodu stanu, ani odpowiedzi, ale może być wywoływane równolegle z innymi celami",
|
||||
"PAYLOAD_TYPE": "Typ ładunku",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Nieokreślony",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Zaszyfrowany JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Standardowy ładunek JSON z nagłówkiem podpisu do weryfikacji.\nJWT: Ładunek jest wysyłany jako podpisany JWT. Weryfikacja odbywa się za pomocą podpisu JWT.\nJWE: JWT jest dodatkowo szyfrowany, aby zapobiec nieautoryzowanemu dostępowi do informacji w ładunku.",
|
||||
"ENDPOINT": "Punkt końcowy",
|
||||
"ENDPOINT_DESCRIPTION": "Wprowadź punkt końcowy, w którym hostowany jest Twój kod. Upewnij się, że jest dla nas dostępny!",
|
||||
"TIMEOUT": "Limit czasu",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Assíncrono"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, a chamada lida com o código de status, mas a resposta é irrelevante\nCall, a chamada lida com o código de status e a resposta\nAsync, a chamada não lida nem com o código de status nem com a resposta, mas pode ser chamada em paralelo com outros alvos",
|
||||
"PAYLOAD_TYPE": "Tipo de carga útil",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Não especificado",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "JSON Web Token cifrado (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Payload JSON padrão com um cabeçalho de assinatura para verificação.\nJWT: O payload é enviado como um JWT assinado. A verificação é feita pela assinatura do JWT.\nJWE: O JWT é adicionalmente cifrado para evitar acesso não autorizado às informações do payload.",
|
||||
"ENDPOINT": "Ponto de Extremidade",
|
||||
"ENDPOINT_DESCRIPTION": "Insira o ponto de extremidade onde seu código está hospedado. Certifique-se de que ele esteja acessível para nós!",
|
||||
"TIMEOUT": "Tempo Limite",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asincron"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, apelul gestionează codul de stare, dar răspunsul este irelevant\nCall, apelul gestionează codul de stare și răspunsul\nAsync, apelul nu gestionează nici codul de stare, nici răspunsul, dar poate fi apelat în paralel cu alte Ținte",
|
||||
"PAYLOAD_TYPE": "Tipul payload-ului",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Nespecificat",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "JSON Web Token criptat (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Payload JSON standard cu un antet de semnătură pentru verificare.\nJWT: Payload-ul este trimis ca un JWT semnat. Verificarea se realizează prin semnătura JWT.\nJWE: JWT-ul este în plus criptat pentru a preveni accesul neautorizat la informațiile din payload.",
|
||||
"ENDPOINT": "Punct Final",
|
||||
"ENDPOINT_DESCRIPTION": "Introduceți punctul final unde este găzduit codul dvs. Asigurați-vă că este accesibil pentru noi!",
|
||||
"TIMEOUT": "Timeout",
|
||||
|
||||
@@ -622,6 +622,14 @@
|
||||
"restAsync": "REST Асинхронный"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, вызов обрабатывает код состояния, но ответ не имеет значения\nCall, вызов обрабатывает код состояния и ответ\nAsync, вызов не обрабатывает ни код состояния, ни ответ, но может выполняться параллельно с другими целями",
|
||||
"PAYLOAD_TYPE": "Тип полезной нагрузки",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Не указано",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Зашифрованный JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Стандартная JSON‑полезная нагрузка с заголовком подписи для проверки.\nJWT: Полезная нагрузка отправляется как подписанный JWT. Проверка выполняется с помощью подписи JWT.\nJWE: JWT дополнительно шифруется, чтобы предотвратить несанкционированный доступ к информации в полезной нагрузке.",
|
||||
"ENDPOINT": "Конечная точка",
|
||||
"ENDPOINT_DESCRIPTION": "Введите конечную точку, где размещен ваш код. Убедитесь, что он доступен для нас!",
|
||||
"TIMEOUT": "Тайм-аут",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Asynkron"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, anropet hanterar statuskoden men svaret är irrelevant\nCall, anropet hanterar statuskoden och svaret\nAsync, anropet hanterar varken statuskod eller svar men kan anropas parallellt med andra mål",
|
||||
"PAYLOAD_TYPE": "Payload-typ",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Ej angiven",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Krypterad JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Standard JSON-payload med en signatur-header för verifiering.\nJWT: Payload skickas som en signerad JWT. Verifiering sker via JWT-signaturen.\nJWE: JWT är dessutom krypterad för att förhindra obehörig åtkomst till payload-information.",
|
||||
"ENDPOINT": "Slutpunkt",
|
||||
"ENDPOINT_DESCRIPTION": "Ange slutpunkten där din kod finns. Se till att den är tillgänglig för oss!",
|
||||
"TIMEOUT": "Tidsgräns",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST Async"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, çağrı durum kodunu işler ancak yanıt önemsizdir\nCall, çağrı durum kodunu ve yanıtını işler\nAsync, çağrı ne durum kodunu ne de yanıtını işler, ancak diğer Hedeflerle paralel olarak çağrılabilir",
|
||||
"PAYLOAD_TYPE": "Yük türü",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Belirtilmemiş",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Şifrelenmiş JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Doğrulama için imza başlığı olan standart JSON payload.\nJWT: Payload imzalı bir JWT olarak gönderilir. Doğrulama, JWT imzası ile gerçekleştirilir.\nJWE: JWT, payload bilgilerine yetkisiz erişimi önlemek için ayrıca şifrelenir.",
|
||||
"ENDPOINT": "Endpoint",
|
||||
"ENDPOINT_DESCRIPTION": "Kodunuzun barındırıldığı endpoint'i girin. Bize erişilebilir olduğundan emin olun!",
|
||||
"TIMEOUT": "Zaman Aşımı",
|
||||
|
||||
@@ -624,6 +624,14 @@
|
||||
"restAsync": "REST Асинхронний"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook, виклик обробляє код стану, але відповідь не має значення\nВиклик, виклик обробляє код стану та відповідь\nАсинхронний, виклик не обробляє ні код стану, ні відповідь, але може викликатися паралельно з іншими цілями",
|
||||
"PAYLOAD_TYPE": "Тип корисного навантаження",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "Не вказано",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "Зашифрований JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: Стандартний JSON payload з заголовком підпису для перевірки.\nJWT: Payload надсилається як підписаний JWT. Перевірка відбувається за допомогою підпису JWT.\nJWE: JWT додатково шифрується, щоб запобігти несанкціонованому доступу до інформації у payload.",
|
||||
"ENDPOINT": "Кінцева точка",
|
||||
"ENDPOINT_DESCRIPTION": "Введіть кінцеву точку, де розміщений ваш код. Переконайтеся, що вона доступна для нас!",
|
||||
"TIMEOUT": "Тайм-аут",
|
||||
|
||||
@@ -623,6 +623,14 @@
|
||||
"restAsync": "REST 异步"
|
||||
},
|
||||
"TYPES_DESCRIPTION": "Webhook,调用处理状态码但响应无关紧要\nCall,调用处理状态码和响应\nAsync,调用既不处理状态码也不处理响应,但可以与其他目标并行调用",
|
||||
"PAYLOAD_TYPE": "有效负载类型",
|
||||
"PAYLOAD_TYPES": {
|
||||
"UNSPECIFIED": "未指定",
|
||||
"JSON": "JSON",
|
||||
"JWT": "JSON Web Token (JWT)",
|
||||
"JWE": "加密的 JSON Web Token (JWE)"
|
||||
},
|
||||
"PAYLOAD_TYPE_DESCRIPTION": "JSON: 用于验证的签名头的标准 JSON 有效负载。\nJWT: 有效负载作为已签名的 JWT 发送。验证通过 JWT 签名完成。\nJWE: JWT 另外被加密,以防止对有效负载信息的未授权访问。",
|
||||
"ENDPOINT": "端点",
|
||||
"ENDPOINT_DESCRIPTION": "输入您的代码托管的端点。确保我们可以访问它!",
|
||||
"TIMEOUT": "超时",
|
||||
|
||||
Reference in New Issue
Block a user