studio
2024.10
false
Wichtig :
Es kann 1–2 Wochen dauern, bis die Lokalisierung neu veröffentlichter Inhalte verfügbar ist.
UiPath logo, featuring letters U and I in white

Studio-Benutzerhandbuch

Letzte Aktualisierung 16. Apr. 2025

Verwenden der zweistufigen Authentifizierung in codierten Automatisierungen

Dieses Tutorial zeigt, wie Sie Beispielcode einschließen können, der Codes für die zweistufige Authentifizierung für Ihre Automatisierungen generiert. Hier finden Sie die Möglichkeiten zum Implementieren des Codes für die zweistufige Authentifizierung:
  • Kopieren Sie den Code und fügen Sie ihn in eine CS-Datei Ihres Zielprojekts ein.
  • Verwenden Sie eine NUPGK-Beispieldatei in Ihrem Projekt.

    Wenn Sie sich für die Verwendung der NUPKG-Beispieldatei entscheiden, können Sie die zweistufige Authentifizierung als Aktivität in Ihren XAML-Dateien hinzufügen.

Tipp: Unabhängig davon, ob Sie den Beispielcodegenerator für die zweistufige Authentifizierung in Ihre CS-Dateien (für codierte Automatisierungen) oder XAML-Dateien (für Low-Code-Automatisierungen) integrieren, denken Sie daran, dass Sie eine codierte Automatisierung in einer Low-Code-Automatisierung aufrufen können und umgekehrt. Weitere Informationen über hybride Automatisierungen finden Sie unter Erstellen hybrider Automatisierungen – Kombinieren von codierten und Low-Code-Workflows.

Kopieren und Einfügen des Codes in CS-Dateien

Um das Beispiel für die zweistufige Authentifizierung in Ihrer codierten Automatisierung zu verwenden, können Sie den folgenden Beispielcode kopieren und in eine CS-Datei aus Ihrem Zielprojekt einfügen.
Hinweis: Der Beispielcode generiert alle 30 Sekunden einen neuen Authentifizierungscode. Wenn beispielsweise ein Authentifizierungscode nach 3 Stunden, 45 Minuten und 27 Sekunden generiert wird, ist dieser Code drei Sekunden lang verfügbar. Ein neuer Code wird dann bei der 30-Sekunden-Marke generiert.
 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();
        }
    }
}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();
        }
    }
}

Verwenden einer NUPGK-Beispieldatei

Wenn Sie eine NUPKG-Beispieldatei zum Einfügen des Codes für die zweistufige Authentifizierung in Ihre Automatisierungen verwenden möchten, gehen Sie wie folgt vor:
  1. Laden Sie die folgende NUPKG-Datei herunter: GenerateTwoFactorAuthenticationCode.nupkg.
  2. Laden Sie die heruntergeladene NUPKG-Datei in Ihren Orchestrator-Host- oder Mandanten-Feed hoch, auf die über Ihre Studio-Instanz zugegriffen werden kann.

    Weitere Informationen zum Hochladen der NUPKG-Datei als benutzerdefinierte Bibliothek in den Orchestrator finden Sie unter Manuelles Hochladen einer Bibliothek in Orchestrator.

  3. Öffnen Sie Ihr Studio-Projekt und öffnen Sie das Menü Pakete verwalten.
  4. Suchen Sie nach der NUPKG-Datei GenerateTwoFactorAuthenticationCode, die Sie zuvor in Ihrem Orchestrator-Host- oder Orchestrator-Mandanten-Feed gespeichert haben, und installieren Sie sie.
    Abbildung 1. Die benutzerdefinierte Bibliothek im Menü „Pakete verwalten“

Nachdem Sie die Datei installiert haben, navigieren Sie zum Bereich Aktivitäten und suchen Sie GenerateTwoFactorAuthenticationCode. Ziehen Sie die Aktivität Get 2FA token in Ihre XAML-Dateien, um einen Authentifizierungscode für Ihre Automatisierungen zu generieren.
Abbildung 2. Das Codebeispiel GenerateTwoFactorAuthentication im Bereich Aktivitäten

War diese Seite hilfreich?

Hilfe erhalten
RPA lernen – Automatisierungskurse
UiPath Community-Forum
Uipath Logo White