studio
2024.10
false
- Notes de publication
- Démarrage
- Paramétrage et configuration
- Projets d'automatisation
- À propos de la publication de projets d'automatisation
- Conception d'automatisations
- Gérer les package d’activités
- Configuration des paramètres du projet d'activité
- Signature de paquets
- Gouvernance
- Import des entités
- Modern Design Experience
- Lier un projet à une idée dans Automation Hub
- Utilisation du gestionnaire de données
- Dépendances
- Types de workflows
- Flux de contrôle
- Comparaison de fichiers
- Meilleures pratiques d'automatisation
- Intégration du contrôle de code source
- À propos du contrôle de version
- Gestion de projets à l'aide de TFS
- Gestion de projets à l'aide de SVN
- Diff de workflow
- Débogage
- Journalisation
- L'outil de diagnostic (Diagnostic Tool)
- Analyseur de workflow
- À propos de l'analyseur de workflow
- ST-NMG-001 - Convention d'affectation de noms des variables
- ST-NMG-002 - Convention d'affectation de noms des arguments
- ST-NMG-004 - Duplication du nom complet
- ST-NMG-005 - La variable remplace une autre
- ST-NMG-006 - La variable remplace l'argument
- ST-NMG-008 - Longueur de variable dépassée
- ST-NMG-009 - Ajouter un préfixe aux variables DataTable
- ST-NMG-011 - Ajouter un préfixe aux arguments Datatable
- ST-NMG-012 - Valeurs par défaut de l'argument
- ST-NMG-016 : longueur d'argument dépassée
- ST-NMG-017 : le nom de la classe correspond à l’espace de noms par défaut
- ST-DBP-002 - Nombre élevé d'arguments
- ST-DBP-003 - Bloc d'interception vide
- ST-DBP-007 - Plusieurs couches de l'organigramme
- ST-DPB-010 : plusieurs instances de [workflow] ou [cas de test]
- ST-DBP-020 - Propriétés de sortie non définies
- ST-DBP-021 - Délai d'expiration codé en dur
- ST-DBP-023 : Workflow vide
- ST-DBP-024 - Vérification de l’activité de persistance
- ST-DBP-025 - Condition préalable à la sérialisation des variables
- ST-DBP-026 - Utilisation de l’activité Délai
- ST-DBP-027 - Pratiques exemplaires de persistance
- ST-DBP-028 - Condition préalable à la sérialisation des arguments
- ST-MRD-002 - Valeurs par défaut des noms d'activités
- ST-MRD-004 - Activités inaccessibles
- ST-MRD-005 - Séquences redondantes
- ST-MRD-007 - Clauses If imbriquées
- ST-MRD-008 - Séquence vide
- ST-MRD-009 - Activités profondément imbriquées
- ST-MRD-011 - Utilisation de la ligne d'écriture
- ST-MRD-017 - Incomplet si (Incomplete If)
- ST-USG-005 - Arguments d'activité codée en dur
- ST-USG-009 - Variables inutilisées
- ST-USG-010 - Dépendances inutilisées
- ST-USG-014 - Restrictions sur les paquets (Package Restriction)
- ST-USG-017 - Modificateur de paramètre non valide
- ST-USG-020 - Nombre minimum de messages consignés
- ST-USG-024 - Non utilisé, sauvegardé pour plus tard (Unused Saved for Later)
- ST-USG-025 - Utilisation abusive de la valeur enregistrée (Saved Value Misuse)
- ST-USG-026 - Restrictions d'activité (Activity Restrictions)
- ST-USG-027 - Packages requis
- ST-USG-028 - Restreindre l'invocation des modèles de fichier
- ST-USG-027 - Balises requises
- ST-USG-034 – URL Automation Hub
- Variables
- Arguments
- Noms d'espace importés
- Automatisations codées
- Introduction
- Enregistrement de services personnalisés
- Contextes Avant (Before) et Après (After)
- Génération du code
- Génération de cas de test codé à partir de cas de test manuels
- Intégration d'OpenAI avec des workflows codés
- Demander un prêt auprès de UiBank
- Génération de files d'attente avec workflows codés et API Orchestrator
- Utilisation de projets de bibliothèque importés dans des automatisations codées
- Utilisation de l’authentification à deux facteurs dans des automatisations codées
- Automatisation Attended basée sur déclencheur
- Enregistrement
- Éléments de l'interface utilisateur
- À propos des éléments d'interface utilisateur
- Propriétés des activités de l'interface utilisateur
- Exemple d'utilisation des méthodes de saisie
- Méthodes de sortie ou de capture de données d'écran
- Exemple d'utilisation de méthodes de sortie ou de capture de données d'écran
- Génération de tables à partir de données non structurées
- Capture relative de données
- Sélecteurs
- Réf. d’objets
- Capture de données
- Automatisation des images et des textes
- À propos de l'automatisation des images et des textes
- Activités liées à la souris et au clavier
- Exemple d'utilisation de l'automatisation de la souris et du clavier
- Les activités de type texte
- Exemple d'utilisation d'automatisation de texte
- Activités de type OCR
- Activités de type image
- Exemple d'utilisation de l'automatisation d'image et d'OCR
- Automatisation des technologies Citrix
- Automatisation de RDP
- Automatisation VMware Horizon
- Automatisation de Salesforce
- Automatisation SAP
- macOS UI Automation
- Outil ScreenScrapeJavaSupport
- Protocole Webdriver
- Extensions
- À propos des extensions
- Outil SetupExtensions
- UiPathRemoteRuntime.exe n'est pas en cours d'exécution dans la session distante
- UiPath Remote Runtime bloque la fermeture de la session Citrix
- UiPath Remote Runtime provoque une fuite de mémoire
- Le package UiPath.UIAutomation.Activities ne correspond pas aux versions d’UiPath Remote Runtime
- L'extension UiPath requise n'est pas installée sur la machine distante
- Paramètres de résolution d’écran
- Stratégies de groupe
- Impossible de communiquer avec le navigateur
- L’extension Chrome est automatiquement supprimée
- L'extension a peut-être été corrompue
- Vérification de l'installation et de l'activation de l'extension pour Chrome
- Vérifiez si ChromeNativeMessaging.exe est en cours d’exécution
- Vérifier si la variable ComSpec est correctement définie
- Activez l’accès aux URL de fichiers et au mode navigation privée
- Profils de navigateur multiples
- Group Policy conflict
- Problèmes connus spécifiques aux extensions MV3
- Liste des extensions pour Chrome
- Extension Chrome sur Mac
- Stratégies de groupe
- Impossible de communiquer avec le navigateur
- L’extension Edge est automatiquement supprimée
- L'extension a peut-être été corrompue
- Vérification si l'extension pour Microsoft Edge est installée et activée
- Vérifiez si ChromeNativeMessaging.exe est en cours d’exécution
- Vérifier si la variable ComSpec est correctement définie
- Activation de l'accès aux URL de fichiers et au mode navigation privée
- Profils de navigateur multiples
- Group Policy conflict
- Problèmes connus spécifiques aux extensions MV3
- Liste des extensions pour Edge
- Extension pour Safari
- Extension pour VMware Horizon
- Extension pour Amazon WorkSpaces
- Plug-in du gestionnaire de solution SAP
- Complément Excel
- Test Studio
- Résolution des problèmes
- À propos de la résolution des problèmes
- Erreurs de compilation de l’assembly
- Prise en charge et limitations de Microsoft App-V
- Résolution des problèmes rencontrés avec Internet Explorer x64
- Problèmes rencontrés avec Microsoft Office
- Identification des éléments d'IU dans PDF avec options d'accessibilité
- Réparation de la prise en charge d'Active Accessibility
- La validation des projets volumineux hérités depuis Windows prend plus de temps que prévu
Utilisation de l’authentification à deux facteurs dans des
automatisations codées
Important :
La localisation du contenu nouvellement publié peut prendre 1 à 2 semaines avant d’être disponible.

Guide de l’utilisateur de Studio
Dernière mise à jour 24 mars 2025
Utilisation de l’authentification à deux facteurs dans des automatisations codées
Ce tutoriel vous montre comment inclure un exemple de code qui génère des codes d’authentification à deux facteurs pour vos automatisations. Voici comment mettre en œuvre le code d’authentification à deux facteurs :
- Copiez-collez le code dans un fichier CS de votre projet cible.
- Utilisez un exemple de fichier NUGK dans votre projet.
Lorsque vous choisissez d’utiliser l’exemple de fichier NUPKG, vous avez la possibilité d’ajouter l’authentification à deux facteurs en tant qu’activité dans vos fichiers XAML.
Astuce : que vous choisissiez d’intégrer l’exemple de générateur de code d’authentification à deux facteurs dans vos fichiers CS (pour les automatisations codées) ou dans vos fichiers XAML (pour les automatisations low-code), n’oubliez pas que vous pouvez invoquer une automatisation codée den low-code et inversement. Pour plus d’informations sur les automatisations hybrides, consultez Création d’automatisations hybrides - Combinaison de workflows codés et low-code.
Pour utiliser l’exemple d’authentification à deux facteurs dans votre automatisation codée, vous pouvez copier et coller l’exemple de code suivant dans un fichier CS à partir de votre projet cible.
Remarque : l’exemple de code génère un nouveau code d’authentification toutes les 30 secondes. Par exemple, si un code d’authentification est généré à 3 heures, 45 minutes et 27 secondes, ce code est disponible pendant trois secondes. Un nouveau code est alors généré au niveau de la marque 30 secondes.
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
using System;
using System.Collections.Generic;
using UiPath.CodedWorkflows;
using System.Security.Cryptography;
namespace GenerateTwoFactorAuthenticationCode
{
public class Workflow : CodedWorkflow
{
[Workflow]
public string Execute(string secretKey)
{
return AuthenticationCode(secretKey);
}
private string AuthenticationCode(string secret)
{
// Step 1: Decode the base32 secret key
byte[] key = Base32Decode(secret);
// Step 2: Calculate the time step (current time divided by 30 seconds)
long unixTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
long timeStep = unixTime / 30;
// Step 3: Convert time step to byte array (8 bytes, big-endian)
byte[] timeBytes = BitConverter.GetBytes(timeStep);
if (BitConverter.IsLittleEndian)
Array.Reverse(timeBytes);
// Step 4: Generate HMAC-SHA1 hash using the time step as message and secret key
using (HMACSHA1 hmac = new HMACSHA1(key))
{
byte[] hash = hmac.ComputeHash(timeBytes);
// Step 5: Extract dynamic binary code (4 bytes) from the hash
int offset = hash[hash.Length - 1] & 0x0F;
int binaryCode = (hash[offset] & 0x7F) << 24
| (hash[offset + 1] & 0xFF) << 16
| (hash[offset + 2] & 0xFF) << 8
| (hash[offset + 3] & 0xFF);
// Step 6: Modulo to get a 6-digit code
int otp = binaryCode % 1_000_000;
// Return the OTP as a zero-padded 6-digit string
return otp.ToString("D6");
}
}
// Base32 decoding function to get the byte array from the base32-encoded key
private static byte[] Base32Decode(string base32)
{
// Decode Base32-encoded string to byte array
const string base32Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
int bitBuffer = 0;
int bitBufferLen = 0;
var result = new List<byte>();
foreach (char c in base32.ToUpper())
{
if (c == '=') break;
int index = base32Chars.IndexOf(c);
if (index < 0) throw new ArgumentException("Invalid Base32 character");
bitBuffer = (bitBuffer << 5) | index;
bitBufferLen += 5;
if (bitBufferLen >= 8)
{
result.Add((byte)(bitBuffer >> (bitBufferLen - 8)));
bitBufferLen -= 8;
}
}
return result.ToArray();
}
}
}
Si vous souhaitez utiliser un exemple de fichier NUPKG pour inclure le code à deux facteurs dans vos automatisations, suivez ces étapes :
- Téléchargez le fichier NUPKG suivant : GenerateTwoFactorAuthenticationCode.nupkg.
- Chargez le fichier NUPKG téléchargé dans votre flux d’hôte ou de locataire Orchestrator, qui est accessible via votre instance de Studio.
Pour plus d’informations sur le téléchargement du fichier NUPKG en tant que bibliothèque personnalisée vers Orchestrator, consultez Téléchargement manuel d’une bibliothèque dans Orchestrator.
- Ouvrez votre projet Studio et ouvrez le menu Gérer les packages.
- Recherchez le fichier NUPKG
GenerateTwoFactorAuthenticationCode
que vous avez précédemment enregistré dans votre flux d’hôte ou de locataire Orchestrator et installez-le.Figure 1. La bibliothèque personnalisée dans le menu Gérer les packages
Après avoir installé le fichier, accédez au panneau Activités et localisez GenerateTwoFactorAuthenticationCode. Faites glisser l’activité Obtenir un jeton d’authentification à deux facteurs dans vos fichiers XAML afin de générer un code d’authentification pour vos automatisations.
Figure 2. Exemple de code GenerateTwoFactorAuthentication dans le panneau Activités