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:
- Über die Microsoft-Identitätsplattform erhält der Benutzer nach Abschluss der Kontoanmeldung ein Zugriffstoken und leitet zurück.
- Verwenden Sie den Wert "Client Secret" , um die Identitätsauthentifizierung ohne Benutzer abzuschließen.
- 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