NodeJS-Docking mit Microsoft Graph API zum Ausführen von Benutzer-Outlook-Kalenderereignissen (2)

Erhalten Sie Zugriffstoken über Microsoft Identity Platform, einschließlich Benutzerauthentifizierung und ohne Benutzerauthentifizierung.

Vorwort

Zu Beginn wurde der Benutzer aufgefordert, das Kennwort des Microsoft-Kontos einzugeben, um die Anmeldeauthentifizierung durch Aufrufen von https://login.microsoftonline.com von Microsoft abzuschließen. Nach der Authentifizierung wurde der Benutzer zur Webseite zurückgeleitet, um den Vorgang fortzusetzen. Später sagte der Kunde, dass sich nicht jeder an sein Microsoft-Konto erinnert. Das Kennwort muss in automatische Anmeldung und dann in vollständig benutzerfreie Authentifizierung geändert werden. Dadurch wird die Informationserfassung aller Mitglieder der Gruppe, außer des Kunden, erreicht ist der Ansicht, dass die Berechtigung zu groß ist und zu viel Zugriff auf Informationen besteht, sodass sie in geändert wird. Um die Benutzerauthentifizierung zu bestehen, ist der authentifizierte Benutzer lediglich ein Gruppenadministrator und bearbeitet dann die Outlook-Ereignisse anderer Mitglieder in die Gruppe.

Zusammenfassend wurden diesmal die folgenden drei Authentifizierungsmethoden implementiert:

  1. Über die Microsoft-Identitätsplattform erhält der Benutzer nach Abschluss der Kontoanmeldung ein Zugriffstoken und leitet zurück.
  2. Verwenden Sie den Wert "Client Secret" , um die Identitätsauthentifizierung ohne Benutzer abzuschließen.
  3. Verwenden Sie das repräsentative Benutzerkonto ohne die manuelle Anmeldung des Benutzers und schließen Sie die Identitätsauthentifizierung automatisch ab.

1. Über die Microsoft-Identitätsplattform erhält der Benutzer nach Abschluss der Kontoanmeldung ein Zugriffstoken und leitet zurück.

Hier ist das offizielle angleDemo, um ein Beispiel für eine Situation vorzustellen, in der der Benutzer das Kontokennwort manuell eingeben muss, um die Authentifizierung abzuschließen. Laden Sie den Code von github herunter, und nach einer einfachen Konfiguration (npm-Installation) lautet das laufende Ergebnis wie folgt

 

 

Das obige Bild dient zur Erreichung der Identitätsauthentifizierung durch manuelle Eingabe des Microsoft-Kontokennworts durch den Benutzer. Nach Abschluss der Authentifizierung wird das folgende Bild angezeigt

Die Authentifizierung ist erfolgreich, wie in der obigen Abbildung gezeigt

Der Verarbeitungscode für die Schlüsselauthentifizierung lautet hier wie folgt

Eine besteht darin, die loginPopup-Methode aufzurufen, indem der Import {MsalService} aus '@ azure / msal-angle' eingeführt und OAuthSettings übergeben wird, um die Authentifizierung zu erreichen

  async signIn(): Promise<void> {
    let result = await this.msalService.loginPopup(OAuthSettings)
      .catch((reason) => {
        this.alertsService.addError('Login failed', JSON.stringify(reason, null, 2));
      });

    if (result) {
      this.authenticated = true;
      this.user = await this.getUser();
    }
  }


  // access Token 获取 
  async getAccessToken(): Promise<string> {
    let result = await this.msalService.acquireTokenSilent(OAuthSettings)
      .catch((reason) => {
        this.alertsService.addError('Get token failed', JSON.stringify(reason, null, 2));
      });

    if (result) {
      return result.accessToken;
    }

    // Couldn't get a token
    this.authenticated = false;
    return null;
  }

 Hier erhalten Sie den accessToken-Registrierungsimport * als MicrosoftGraph vom Dienst '@ microsoft / microsoft-graph-types'; und rufen dann die Microsoft Graph-API auf, um Informationen zu erhalten.

    this.graphClient = Client.init({
      authProvider: async (done) => {
        // Get the token from the auth service
        let token = await this.authService.getAccessToken()
          .catch((reason) => {
            done(reason, null);
          });

        if (token)
        {
          done(null, token);
        } else {
          done("Could not get an access token", null);
        }
      }
    });

Bevor Sie die offizielle NodeJs-Demo verwenden können, müssen Sie die Konfigurationsinformationen von example.env und die npm-Installation ändern. Der Schlüsselcode lautet wie folgt:

 

Verwenden Sie zweitens den Wert Client Secret , um die Identitätsauthentifizierung ohne Benutzer abzuschließen.

Der Schlüssel zu keiner Benutzerauthentifizierung ist die Verwendung von CLIENT_SECRET, dem im vorherigen Artikel erwähnten geheimen Wert.

Darüber hinaus muss die von Microsoft Azure registrierte API-Berechtigung mit den Berechtigungen für Anwendungsberechtigungen hinzugefügt werden  .

Der erste Schritt besteht darin, das accessToken zu erhalten, bei dem das Axios-Modul zum Initiieren einer http-Anforderung verwendet wird, dem Schlüsselcode von nodeJS

import axios from 'axios';
const querystring: any = require('querystring');

const TENANT_ID = 'xxxx'
const CLIENT_ID = 'xxxx';
const CLIENT_SECRET = 'xxxx';

(async () => {

    const qs = querystring.stringify({
        client_id: CLIENT_ID,
        client_secret: CLIENT_SECRET,
        scope: 'https://graph.microsoft.com/.default',
        grant_type: 'client_credentials'
    });

    const url = `https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token`;

    const result = await axios.request({
        url,
        method: "POST",
        data: qs
    });

    const access_token = result.data.access_token;
    console.log(access_token);
})();

 Rufen Sie die Microsoft Graph-API über das Zugriffstoken auf, ohne @ microsoft / microsoft-graph-client zu verwenden

import axios from 'axios';
const ACCESS_TOKEN = 'xxxx';

(async () => {
    const itemList = [];
    const url = 'https://graph.microsoft.com/v1.0/groups';
    let page = url;

    do {
        const result = await axios.request({
            headers: {
                'Authorization': `Bearer ${ACCESS_TOKEN}`
            },
            url: page,
            method: "GET"
        });

        itemList.push(...result.data.value);
        page = result.data["@odata.nextLink"];

    } while (page);

    console.log(itemList);

})();

Wenn Sie @ microsoft / microsoft-graph-client verwenden, rufen Sie die Microsoft Graph-API über das Zugriffstoken auf

var graph = require('@microsoft/microsoft-graph-client');

// graph.Client注册
function getAuthenticatedClient(accessToken) {
  // Initialize Graph client
  const client = graph.Client.init({
    // Use the provided access token to authenticate
    // requests
    authProvider: (done) => {
      done(null, accessToken);
    }
  });

  return client;
}

module.exports = {
  getUserDetails: async function(accessToken,userPrincipalName) {
    const client = getAuthenticatedClient(accessToken);

    //const user = await client.api('/me')
    const user = await client.api(`/users/${userPrincipalName}`)
      .select('displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,preferredLanguage,surname,userPrincipalName,id,mailboxSettings')
      .get();
    return user;
  },
};

3. Verwenden Sie das repräsentative Benutzerkonto , um die Identitätsauthentifizierung automatisch abzuschließen.

Im Vergleich zur vorherigen Authentifizierung ohne Benutzer, solange der geänderte Code wie folgt lautet

import axios from 'axios';
const querystring: any = require('querystring');

const TENANT_ID = 'xxxx'
const CLIENT_ID = 'xxxx';
//const CLIENT_SECRET = 'xxxx';
const USER_ID = 'xxxx';
const USER_PASSWORD = 'xxxx';

(async () => {

    const qs = querystring.stringify({
        client_id: CLIENT_ID,
        username:USER_ID ,
        password:USER_PASSWORD,
        grant_type: 'password'
    });

    const url = `https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token`;

    const result = await axios.request({
        url,
        method: "POST",
        data: qs
    });

    const access_token = result.data.access_token;
    console.log(access_token);
})();

Es gibt drei Authentifizierungsmethoden: Sie können die zurückgegebenen Informationen durch JWT-Analyse für das erhaltene Zugriffstoken anzeigen. Beispielsweise wird das durch keine Benutzerauthentifizierung erhaltene Zugriffstoken wie folgt analysiert. Das vom Benutzer erhaltene Zugriffstoken unterscheidet sich geringfügig von in der zweiten Abbildung unten gezeigt.

Zugriffstoken ohne Benutzerauthentifizierung

 Zugriffstoken mit Benutzerauthentifizierung

 

Ich denke du magst

Origin blog.csdn.net/bai_ye_/article/details/115027298
Empfohlen
Rangfolge