feat: Add Twilio Verification Service (#8678)

# Which Problems Are Solved
Twilio supports a robust, multi-channel verification service that
notably supports multi-region SMS sender numbers required for our use
case. Currently, Zitadel does much of the work of the Twilio Verify (eg.
localization, code generation, messaging) but doesn't support the pool
of sender numbers that Twilio Verify does.

# How the Problems Are Solved
To support this API, we need to be able to store the Twilio Service ID
and send that in a verification request where appropriate: phone number
verification and SMS 2FA code paths.

This PR does the following: 
- Adds the ability to use Twilio Verify of standard messaging through
Twilio
- Adds support for international numbers and more reliable verification
messages sent from multiple numbers
- Adds a new Twilio configuration option to support Twilio Verify in the
admin console
- Sends verification SMS messages through Twilio Verify
- Implements Twilio Verification Checks for codes generated through the
same

# Additional Changes

# Additional Context
- base was implemented by @zhirschtritt in
https://github.com/zitadel/zitadel/pull/8268 ❤️
- closes https://github.com/zitadel/zitadel/issues/8581

---------

Co-authored-by: Zachary Hirschtritt <zachary.hirschtritt@klaviyo.com>
Co-authored-by: Joey Biscoglia <joey.biscoglia@klaviyo.com>
This commit is contained in:
Livio Spring
2024-09-26 09:14:33 +02:00
committed by GitHub
parent 4eaa3163b6
commit 14e2aba1bc
89 changed files with 3888 additions and 782 deletions

View File

@@ -18,6 +18,14 @@
<input cnslInput name="senderNumber" formControlName="senderNumber" />
</cnsl-form-field>
<cnsl-form-field class="sms-form-field" label="Verification Service Sid">
<cnsl-label>{{ 'SETTING.SMS.TWILIO.VERIFYSERVICESID' | translate }}</cnsl-label>
<input cnslInput name="verifyServiceSid" formControlName="verifyServiceSid" />
</cnsl-form-field>
<cnsl-info-section class="feature-info">{{
'SETTING.SMS.TWILIO.VERIFYSERVICESID_DESCRIPTION' | translate
}}</cnsl-info-section>
<button *ngIf="twilio" type="button" mat-stroked-button (click)="changeToken()" data-e2e="edit-sms-token-button">
{{ 'SETTING.SMS.TWILIO.CHANGETOKEN' | translate }}
</button>

View File

@@ -41,7 +41,9 @@ export class DialogAddSMSProviderComponent {
) {
this.twilioForm = this.fb.group({
sid: ['', [requiredValidator]],
senderNumber: ['', [requiredValidator]],
senderNumber: [''],
// NB: not required if not using verification service
verifyServiceSid: [''],
});
this.smsProviders = data.smsProviders;
@@ -62,12 +64,14 @@ export class DialogAddSMSProviderComponent {
this.req.setId(this.twilioProvider.id);
this.req.setSid(this.sid?.value);
this.req.setSenderNumber(this.senderNumber?.value);
this.req.setVerifyServiceSid(this.verifyServiceSid?.value ?? '');
this.dialogRef.close(this.req);
} else {
this.req = new AddSMSProviderTwilioRequest();
this.req.setSid(this.sid?.value);
this.req.setToken(this.token?.value);
this.req.setSenderNumber(this.senderNumber?.value);
this.req.setVerifyServiceSid(this.verifyServiceSid?.value ?? '');
this.dialogRef.close(this.req);
}
}
@@ -104,6 +108,10 @@ export class DialogAddSMSProviderComponent {
return this.twilioForm.get('senderNumber');
}
public get verifyServiceSid(): AbstractControl | null {
return this.twilioForm.get('verifyServiceSid');
}
public get token(): AbstractControl | null {
return this.twilioForm.get('token');
}

View File

@@ -1419,6 +1419,8 @@
"SID": "Сид",
"TOKEN": "Токен",
"SENDERNUMBER": "Номер на изпращача",
"VERIFYSERVICESID": "Идентификатор на услугата за проверка",
"VERIFYSERVICESID_DESCRIPTION": "Задаването на идентификатор на услугата за проверка позволява използването на услугата за проверка на Twilio вместо услугата за съобщения за проверка на телефонни номера и OTP SMS.",
"ADDED": "Twilio добави успешно.",
"UPDATED": "Twilio се актуализира успешно.",
"REMOVED": "Twilio премахнат",

View File

@@ -1420,6 +1420,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Číslo odesílatele",
"VERIFYSERVICESID": "ID služby ověření",
"VERIFYSERVICESID_DESCRIPTION": "Nastavení ID služby ověření umožňuje použití služby Twilio Verify místo služby Zprávy pro ověření telefonních čísel a SMS OTP.",
"ADDED": "Twilio bylo úspěšně přidáno.",
"UPDATED": "Twilio bylo úspěšně aktualizováno.",
"REMOVED": "Twilio bylo odebráno",

View File

@@ -1420,6 +1420,8 @@
"SID": "SID",
"TOKEN": "Token",
"SENDERNUMBER": "Sender Number",
"VERIFYSERVICESID": "Verification Service Sid",
"VERIFYSERVICESID_DESCRIPTION": "Das Setzen einer Verification Service Sid ermöglicht die Verwendung des Twilio Verify-Dienstes anstelle des Nachrichtendienstes zur Überprüfung von Telefonnummern und OTP-SMS.",
"ADDED": "Twilio erfolgreich hinzugefügt.",
"UPDATED": "Twilio wurde erfolgreich aktualisiert.",
"REMOVED": "Twilio entfernt",

View File

@@ -1420,6 +1420,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Sender Number",
"VERIFYSERVICESID": "Verification Service Sid",
"VERIFYSERVICESID_DESCRIPTION": "Setting a Verification Service Sid, allows using the Twilio Verify Service instead of the Messages Service for verification of phone numbers and OTP SMS",
"ADDED": "Twilio added successfully.",
"UPDATED": "Twilio updated successfully.",
"REMOVED": "Twilio removed",

View File

@@ -1421,6 +1421,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Número de emisor",
"VERIFYSERVICESID": "SID del servicio de verificación",
"VERIFYSERVICESID_DESCRIPTION": "Establecer un SID del servicio de verificación permite usar el servicio Twilio Verify en lugar del servicio de mensajes para la verificación de números de teléfono y SMS OTP.",
"ADDED": "Twilio añadido con éxito.",
"UPDATED": "Twilio actualizado con éxito",
"REMOVED": "Twilio eliminado",

View File

@@ -1420,6 +1420,8 @@
"SID": "Sid",
"TOKEN": "Jeton",
"SENDERNUMBER": "Numéro d'expéditeur",
"VERIFYSERVICESID": "SID du service de vérification",
"VERIFYSERVICESID_DESCRIPTION": "Le réglage d'un SID du service de vérification permet d'utiliser le service Twilio Verify au lieu du service de messagerie pour la vérification des numéros de téléphone et des SMS OTP.",
"ADDED": "Twilio a été ajouté avec succès.",
"UPDATED": "Twilio a été mis à jour avec succès.",
"REMOVED": "Twilio a été supprimé avec succès",

View File

@@ -1294,6 +1294,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Nomor Pengirim",
"VERIFYSERVICESID": "ID Layanan Verifikasi",
"VERIFYSERVICESID_DESCRIPTION": "Menetapkan ID Layanan Verifikasi memungkinkan penggunaan Layanan Verifikasi Twilio alih-alih Layanan Pesan untuk verifikasi nomor telepon dan SMS OTP.",
"ADDED": "Twilio menambahkan dengan sukses.",
"UPDATED": "Twilio berhasil diperbarui.",
"REMOVED": "Twilio dihapus",

View File

@@ -1420,6 +1420,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Sender Number",
"VERIFYSERVICESID": "SID del servizio di verifica",
"VERIFYSERVICESID_DESCRIPTION": "Impostando un SID del servizio di verifica, è possibile utilizzare il servizio Twilio Verify invece del servizio messaggi per la verifica dei numeri di telefono e degli SMS OTP.",
"ADDED": "Twilio aggiunto con successo.",
"UPDATED": "Twilio aggiornato correttamente.",
"REMOVED": "Twilio rimosso con successo.",

View File

@@ -1420,6 +1420,8 @@
"SID": "Sid",
"TOKEN": "トークン",
"SENDERNUMBER": "送信者番号",
"VERIFYSERVICESID": "検証サービス SID",
"VERIFYSERVICESID_DESCRIPTION": "検証サービス SID を設定すると、電話番号と OTP SMS の検証にメッセージサービスの代わりに Twilio Verify サービスを使用できるようになります。",
"ADDED": "Twilioは正常に追加されました。",
"UPDATED": "Twilio が正常に更新されました。",
"REMOVED": "Twilioが削除されました",

View File

@@ -1421,6 +1421,8 @@
"SID": "Sid",
"TOKEN": "Токен",
"SENDERNUMBER": "Број на испраќач",
"VERIFYSERVICESID": "Идентификатор на услугата за проверка",
"VERIFYSERVICESID_DESCRIPTION": "Поставувањето на идентификатор на услугата за проверка овозможува користење на услугата за проверка на Twilio наместо услугата за пораки за проверка на телефонски броеви и OTP SMS.",
"ADDED": "Twilio e успешно додаден.",
"UPDATED": "Twilio се ажурираше успешно.",
"REMOVED": "Twilio отстранет",

View File

@@ -1419,6 +1419,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Verzender Nummer",
"VERIFYSERVICESID": "Verificatieservice-SID",
"VERIFYSERVICESID_DESCRIPTION": "Het instellen van een Verificatieservice-SID maakt het mogelijk om de Twilio Verify-service te gebruiken in plaats van de Berichten-service voor het verifiëren van telefoonnummers en OTP-SMS.",
"ADDED": "Twilio succesvol toegevoegd.",
"UPDATED": "Twilio succesvol bijgewerkt.",
"REMOVED": "Twilio verwijderd",

View File

@@ -1419,6 +1419,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Numer nadawcy",
"VERIFYSERVICESID": "SID usługi weryfikacji",
"VERIFYSERVICESID_DESCRIPTION": "Ustawienie SID usługi weryfikacji umożliwia korzystanie z usługi Twilio Verify zamiast usługi wiadomości do weryfikacji numerów telefonów i SMS OTP.",
"ADDED": "Twilio dodano pomyślnie.",
"UPDATED": "Twilio zostało pomyślnie zaktualizowane.",
"REMOVED": "Twilio usunięte",

View File

@@ -1421,6 +1421,8 @@
"SID": "SID",
"TOKEN": "Token",
"SENDERNUMBER": "Número do remetente",
"VERIFYSERVICESID": "SID do serviço de verificação",
"VERIFYSERVICESID_DESCRIPTION": "Configurar um SID do serviço de verificação permite usar o serviço Twilio Verify em vez do serviço de mensagens para a verificação de números de telefone e SMS OTP.",
"ADDED": "Twilio adicionado com sucesso.",
"UPDATED": "Twilio atualizado com sucesso.",
"REMOVED": "Twilio removido",

View File

@@ -1464,6 +1464,8 @@
"SID": "ID Безопасности",
"TOKEN": "Токен",
"SENDERNUMBER": "Номер отправителя",
"VERIFYSERVICESID": "Идентификатор службы проверки",
"VERIFYSERVICESID_DESCRIPTION": "Установка идентификатора службы проверки позволяет использовать службу проверки Twilio вместо службы сообщений для проверки телефонных номеров и SMS OTP.",
"ADDED": "Twilio успешно добавлен.",
"REMOVED": "Twilio удалён",
"CHANGETOKEN": "Изменить токен",

View File

@@ -1424,6 +1424,8 @@
"SID": "Sid",
"TOKEN": "Token",
"SENDERNUMBER": "Avsändarnummer",
"VERIFYSERVICESID": "Verifieringstjänst-SID",
"VERIFYSERVICESID_DESCRIPTION": "Inställning av en Verifieringstjänst-SID gör det möjligt att använda Twilio Verify-tjänsten istället för Meddelandetjänsten för verifiering av telefonnummer och OTP-SMS.",
"ADDED": "Twilio tillagd framgångsrikt.",
"UPDATED": "Twilio uppdaterad framgångsrikt.",
"REMOVED": "Twilio borttagen",

View File

@@ -1420,6 +1420,8 @@
"SID": "Sid",
"TOKEN": "令牌",
"SENDERNUMBER": "发件人号码",
"VERIFYSERVICESID": "验证服务 SID",
"VERIFYSERVICESID_DESCRIPTION": "设置验证服务 SID允许使用 Twilio 验证服务而不是消息服务来验证电话号码和 OTP SMS。",
"ADDED": "Twilio 添加成功。",
"UPDATED": "Twilio 更新成功。",
"REMOVED": "Twilio 已删除",