Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel fügen Sie der Anwendung, die Sie unter Erstellen von Java-Apps mit Microsoft Graph erstellt haben, die Benutzerauthentifizierung hinzu. Anschließend verwenden Sie die Microsoft Graph-Benutzer-API, um den authentifizierten Benutzer abzurufen.
Hinzufügen der Benutzerauthentifizierung
Die Azure Identity-Clientbibliothek für Java bietet viele TokenCredential Klassen, die OAuth2-Tokenflows implementieren. Das Microsoft Graph SDK für Java verwendet diese Klassen, um Aufrufe von Microsoft Graph zu authentifizieren.
Konfigurieren des Graph-Clients für die Benutzerauthentifizierung
Verwenden Sie zunächst die DeviceCodeCredential -Klasse, um mithilfe des Gerätecodeflows ein Zugriffstoken anzufordern.
Erstellen Sie im Verzeichnis ./app/src/Standard/java/graphtutorial eine neue Datei mit dem Namen Graph.java, und fügen Sie der Datei den folgenden Code hinzu.
package graphtutorial; import java.util.List; import java.util.Properties; import java.util.function.Consumer; import com.azure.core.credential.AccessToken; import com.azure.core.credential.TokenRequestContext; import com.azure.identity.DeviceCodeCredential; import com.azure.identity.DeviceCodeCredentialBuilder; import com.azure.identity.DeviceCodeInfo; import com.microsoft.graph.models.BodyType; import com.microsoft.graph.models.EmailAddress; import com.microsoft.graph.models.ItemBody; import com.microsoft.graph.models.Message; import com.microsoft.graph.models.MessageCollectionResponse; import com.microsoft.graph.models.Recipient; import com.microsoft.graph.models.User; import com.microsoft.graph.serviceclient.GraphServiceClient; import com.microsoft.graph.users.item.sendmail.SendMailPostRequestBody;Fügen Sie eine leere Graph-Klassendefinition hinzu.
public class Graph { }Fügen Sie der
Graph-Klasse den folgenden Code hinzu.private static Properties _properties; private static DeviceCodeCredential _deviceCodeCredential; private static GraphServiceClient _userClient; public static void initializeGraphForUserAuth(Properties properties, Consumer<DeviceCodeInfo> challenge) throws Exception { // Ensure properties isn't null if (properties == null) { throw new Exception("Properties cannot be null"); } _properties = properties; final String clientId = properties.getProperty("app.clientId"); final String tenantId = properties.getProperty("app.tenantId"); final String[] graphUserScopes = properties.getProperty("app.graphUserScopes").split(","); _deviceCodeCredential = new DeviceCodeCredentialBuilder() .clientId(clientId) .tenantId(tenantId) .challengeConsumer(challenge) .build(); _userClient = new GraphServiceClient(_deviceCodeCredential, graphUserScopes); }Ersetzen Sie die leere
initializeGraphFunktion in App.java durch Folgendes.private static void initializeGraph(Properties properties) { try { Graph.initializeGraphForUserAuth(properties, challenge -> System.out.println(challenge.getMessage())); } catch (Exception e) { System.out.println("Error initializing Graph for user auth"); System.out.println(e.getMessage()); } }
Dieser Code deklariert zwei private Eigenschaften, ein DeviceCodeCredential -Objekt und ein GraphServiceClient -Objekt. Die InitializeGraphForUserAuth Funktion erstellt eine neue instance von DeviceCodeCredentialund verwendet dann diesen instance, um eine neue instance von GraphServiceClientzu erstellen. Jedes Mal, wenn ein API-Aufruf an Microsoft Graph über _userClienterfolgt, werden die bereitgestellten Anmeldeinformationen verwendet, um ein Zugriffstoken abzurufen.
Testen von DeviceCodeCredential
Fügen Sie als Nächstes Code hinzu, um ein Zugriffstoken DeviceCodeCredentialvon abzurufen.
Fügen Sie die folgende Funktion zur
Graph-Klasse hinzu:public static String getUserToken() throws Exception { // Ensure credential isn't null if (_deviceCodeCredential == null) { throw new Exception("Graph has not been initialized for user auth"); } final String[] graphUserScopes = _properties.getProperty("app.graphUserScopes").split(","); final TokenRequestContext context = new TokenRequestContext(); context.addScopes(graphUserScopes); final AccessToken token = _deviceCodeCredential.getTokenSync(context); return token.getToken(); }Ersetzen Sie die leere
displayAccessTokenFunktion in App.java durch Folgendes.private static void displayAccessToken() { try { final String accessToken = Graph.getUserToken(); System.out.println("Access token: " + accessToken); } catch (Exception e) { System.out.println("Error getting access token"); System.out.println(e.getMessage()); } }Erstellen Sie die App, und führen Sie sie aus. Geben Sie ein
1, wenn Sie zur Eingabe einer Option aufgefordert werden. Die Anwendung zeigt eine URL und den Gerätecode an.Java Graph Tutorial Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 1 To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code RB2RUD56D to authenticate.Öffnen Sie einen Browser, und navigieren Sie zu der angezeigten URL. Geben Sie den angegebenen Code ein, und melden Sie sich an.
Wichtig
Achten Sie auf vorhandene Microsoft 365-Konten, die bei Ihrem Browser angemeldet sind, wenn Sie zu
https://microsoft.com/deviceloginnavigieren. Verwenden Sie Browserfeatures wie Profile, Gastmodus oder privaten Modus, um sicherzustellen, dass Sie sich als das Konto authentifizieren, das Sie zu Testzwecken verwenden möchten.Kehren Sie nach Abschluss des Vorgangs zur Anwendung zurück, um das Zugriffstoken anzuzeigen.
Tipp
Nur zu Validierungs- und Debugzwecken können Sie Benutzerzugriffstoken (nur für Geschäfts-, Schul- oder Unikonten) decodieren, indem Sie den Onlinetokenparser von Microsoft unter verwendenhttps://jwt.ms. Die Analyse Ihres Tokens kann nützlich sein, wenn beim Aufrufen von Microsoft Graph Tokenfehler auftreten. Beispielsweise wird überprüft, ob der
scpAnspruch im Token die erwarteten Microsoft Graph-Berechtigungsbereiche enthält.
Benutzer abrufen
Nachdem die Authentifizierung konfiguriert wurde, können Sie Ihren ersten Microsoft Graph-API-Aufruf durchführen. Fügen Sie Code hinzu, um den Namen und die E-Mail-Adresse des authentifizierten Benutzers abzurufen.
Öffnen Sie Graph.java , und fügen Sie der -Klasse die
Graphfolgende Funktion hinzu.public static User getUser() throws Exception { // Ensure client isn't null if (_userClient == null) { throw new Exception("Graph has not been initialized for user auth"); } return _userClient.me().get(requestConfig -> { requestConfig.queryParameters.select = new String[] {"displayName", "mail", "userPrincipalName"}; }); }Ersetzen Sie die leere
greetUserFunktion in App.java durch Folgendes.private static void greetUser() { try { final User user = Graph.getUser(); // For Work/school accounts, email is in mail property // Personal accounts, email is in userPrincipalName final String email = user.getMail() == null ? user.getUserPrincipalName() : user.getMail(); System.out.println("Hello, " + user.getDisplayName() + "!"); System.out.println("Email: " + email); } catch (Exception e) { System.out.println("Error getting user"); System.out.println(e.getMessage()); } }
Wenn Sie die App jetzt ausführen, begrüßt Sie die App nach der Anmeldung mit dem Namen.
Hello, Megan Bowen!
Email: MeganB@contoso.com
Code erläutert
Betrachten Sie den Code in der greetUser Funktion. Es sind nur wenige Zeilen, aber es sind einige wichtige Details zu beachten.
Zugreifen auf "me"
Die Funktion verwendet den Anforderungs-Generator _userClient.me , der eine Anforderung an die Get-Benutzer-API erstellt. Auf diese API kann auf zwei Arten zugegriffen werden:
GET /me
GET /users/{user-id}
In diesem Fall ruft der Code den GET /me API-Endpunkt auf. Dieser Endpunkt ist eine Verknüpfungsmethode, um den authentifizierten Benutzer abzurufen, ohne seine Benutzer-ID zu kennen.
Hinweis
Da der GET /me API-Endpunkt den authentifizierten Benutzer abruft, ist er nur für Apps verfügbar, die die Benutzerauthentifizierung verwenden. Reine App-Authentifizierungs-Apps können nicht auf diesen Endpunkt zugreifen.
Anfordern bestimmter Eigenschaften
Die Funktion verwendet die select -Eigenschaft für die Anforderungskonfiguration, um den benötigten Satz von Eigenschaften anzugeben. Diese Eigenschaft fügt dem API-Aufruf den Abfrageparameter $select hinzu.
Stark typisierter Rückgabetyp
Die Funktion gibt ein com.microsoft.graph.models.User Objekt zurück, das aus der JSON-Antwort der API deserialisiert wurde. Da der Code verwendet select, verfügen nur die angeforderten Eigenschaften über Werte im zurückgegebenen User Objekt. Alle anderen Eigenschaften verfügen über Standardwerte.