Udostępnij za pośrednictwem


Poradnik: Uwierzytelnianie użytkowników w aplikacji CLI Node.js

Dotyczy:Biały okrąg z szarym symbolem X. Najemcy pracowniczy Zielony okrąg z białym symbolem haczyka. Najemcy zewnętrzni (dowiedz się więcej)

Ten samouczek jest ostatnią częścią serii samouczków, która demonstruje tworzenie aplikacji interfejsu wiersza polecenia (CLI) Node.js i przygotowanie jej do uwierzytelniania przy użyciu centrum administracyjnego firmy Microsoft Entra. W części 1 tej serii utworzono aplikację interfejsu wiersza polecenia Node.js i przygotowano ją do uwierzytelniania. Ten samouczek pokazuje, jak uwierzytelnić użytkowników w aplikacji CLI Node.js, którą stworzyłeś.

  • Importowanie wymaganych modułów i konfiguracji biblioteki MSAL
  • Utwórz wystąpienie publicznej aplikacji klienckiej
  • Uruchamianie okna przeglądarki na potrzeby interakcji użytkownika
  • Tworzenie obiektu żądania tokenu
  • Definiowanie funkcji do uzyskiwania tokenów
  • Inicjowanie przepływu uwierzytelniania
  • Skonfiguruj aplikację CLI Node.js
  • Uruchom i przetestuj aplikację CLI Node.js

Zaimportuj MSAL i konfigurację

Aplikacja CLI, którą tworzymy, korzysta z biblioteki Microsoft Authentication Library for Node do uwierzytelniania użytkowników. Aby zaimportować pakiet MSAL Node oraz konfiguracje msalConfig i loginRequest zdefiniowane w poprzednim samouczku, dodaj następujący kod do index.js:

const { PublicClientApplication, InteractionRequiredAuthError } = require('@azure/msal-node');
const open = require('open');
const { msalConfig, loginRequest } = require('./authConfig');

W tym fragmencie kodu zaimportujesz klasy PublicClientApplication i InteractionRequiredAuthError z pakietu @azure/msal-node. Zaimportujesz również pakiet open, który umożliwia aplikacji otwieranie okna przeglądarki na potrzeby interakcji użytkownika.

Tworzenie wystąpienia obiektu PublicClientApplication

Aby użyć MSAL Node, należy najpierw utworzyć instancję obiektu PublicClientApplication przy użyciu obiektu msalConfig. Zainicjowany obiekt PublicClientApplication służy do uwierzytelniania użytkownika i uzyskiwania tokenu dostępu.

W index.jsdodaj następujący kod, aby zainicjować publiczną aplikację kliencą:

const pca = new PublicClientApplication(msalConfig);

Uruchamianie okna przeglądarki na potrzeby interakcji użytkownika

Aby użytkownicy mogli się zalogować i wyrazić zgodę na wymagane przez aplikację zakresy, zdefiniuj funkcję openBrowser, która otwiera okno przeglądarki na potrzeby interakcji użytkownika, jak pokazano:

const openBrowser = async (url) => {
    open(url);
};

Tworzenie obiektu żądania tokenu

Następnie utwórz obiekt tokenRequest, łącząc właściwości z loginRequest (zaimportowanego z authConfig.js) z funkcją openBrowser, dodając następujący kod do index.js:

const tokenRequest = {
    ...loginRequest,
    openBrowser,
    successTemplate: '<h1>Successfully signed in!</h1> <p>You can close this window now.</p>',
    errorTemplate:
        '<h1>Oops! Something went wrong</h1> <p>Navigate back to the Electron application and check the console for more information.</p>',
};

successTemplate i errorTemplate to szablony HTML używane do wyświetlania komunikatów po uwierzytelnieniu.

Definiowanie funkcji do uzyskiwania tokenów

Aby utworzyć funkcję acquireToken, której aplikacja używa do uzyskania tokenu dostępu dla użytkownika, dodaj następujący kod do index.js.

const acquireToken = async () => {
    const accounts = await pca.getTokenCache().getAllAccounts();
    if (accounts.length === 1) {
        // Try to acquire token silently for the single account.
        // If silent acquisition fails, use interactive authentication.
        const silentRequest = {
            account: accounts[0],
        };
        return pca.acquireTokenSilent(silentRequest).catch((e) => {
            if (e instanceof InteractionRequiredAuthError) {
                return pca.acquireTokenInteractive(tokenRequest);
            }
        });
    } else if (accounts.length > 1) {
        // Multiple accounts found. Prompt the user to select an account.
        accounts.forEach((account) => {
            console.log(account.username);
        });
        return Promise.reject('Multiple accounts found. Please select an account to use.');
    } else {
        // No account found. Use interactive authentication.
        return pca.acquireTokenInteractive(tokenRequest);
    }
};

W tym fragmencie kodu funkcja acquireToken próbuje uzyskać token dostępu dla pojedynczego konta w trybie dyskretnym; Jeśli wystąpi błąd, używa uwierzytelniania interakcyjnego. Jeśli zostanie znalezionych wiele kont, zostanie wyświetlony monit o wybranie konta, a jeśli żadne konto nie zostanie znalezione, inicjuje uwierzytelnianie interakcyjne w celu monitowania użytkownika o zalogowanie się i zgodę.

Inicjowanie przepływu uwierzytelniania

Na koniec wywołaj acquireToken() funkcję , aby zainicjować przepływ uwierzytelniania, dodając następujący kod do index.js:

acquireToken()
    .then((response) => {
        console.log(response);
    })
    .catch((e) => {
        console.error(e);
        process.exit(1);
    });

Jeśli wywołanie acquireToken() zakończy się pomyślnie, odpowiedź zawierająca token dostępu jest rejestrowana w konsoli programu . Jeśli podczas uwierzytelniania wystąpi błąd, zostanie zarejestrowany błąd, a proces zakończy działanie z kodem błędu.

Uruchom i przetestuj przykładową aplikację CLI Node.js

Aby uruchomić i przetestować aplikację wiersza poleceń Node.js, upewnij się, że zamieniłeś wartości zastępcze w pliku authConfig.js na dane rejestracyjne aplikacji Microsoft Entra. Teraz możesz przetestować utworzoną aplikację, wykonując następujące kroki:

  1. W terminalu uruchom następujące polecenie:

    cd 1-Authentication\6-sign-in-node-cli-app\App
    npm start
    
  2. Przeglądarka zostanie otwarta automatycznie i powinna zostać wyświetlona strona podobna do następującej:

    Zrzut ekranu przedstawiający stronę logowania w aplikacji CLI Node.js.

  3. Na stronie logowania wpisz adres e-mail . Jeśli nie masz konta, wybierz pozycję Nie masz konta? Utwórz jeden, który uruchamia przepływ rejestracji.

  4. Jeśli wybierzesz opcję rejestracji, po wypełnieniu adresu e-mail, jednorazowego kodu dostępu, nowego hasła i dodatkowych szczegółów konta, ukończ cały przepływ rejestracji. Po ukończeniu przepływu rejestracji i logowania zostanie wyświetlona strona podobna do poniższego zrzutu ekranu:

    Zrzut ekranu przedstawiający zalogowanego użytkownika w aplikacji CLI Node.js.

  5. Wróć do terminalu i zapoznaj się z informacjami o uwierzytelnianiu, w tym oświadczeniami tokenu identyfikatora zwróconymi przez firmę Microsoft Entra.

Zobacz też