Verwenden Sie Microsoft Graph mit Standard-Java

Microsoft Graph mit Standard-Java-Paket

Es wäre schön, das Microsoft SDK für Java zu verwenden, aber es erfordert viele verwandte Jar-Dateien. Um zu verstehen, was Sie im Wesentlichen tun, schreiben wir eine Microsoft Graph-Abfrage nur mit dem Standard-Java-Paket.

Was ist zu tun

  1. Registrieren Sie die Anwendung in Azure AD und erstellen Sie eine Client-ID und ein Geheimnis (das Verfahren ist Lernprogramm. Referenz)
  2. Holen Sie sich mit OAuth2 ein Zugriffstoken von Azure AD. Es wird in JSON zurückgegeben.
  3. Wenden Sie sich an den Microsoft Graph API-Endpunkt. JSON wird zurückgegeben. nur.

Wenn Sie es vorerst mit dem Befehl Curl schreiben, wird es so sein

Holen Sie sich ein Zugriffstoken.

Beziehen Sie zunächst ein Zugriffstoken von Azure Active Directory gemäß der OAuth-Prozedur. Die abzurufende URL (Endpunkt) lautet

** https://login.microsoftonline.com/tenant ID / oauth2 / v2.0 / token **

Die Mandanten-ID finden Sie in der Azure AD-Mandantenübersicht. POST die Client-ID und das Geheimnis, die hier erstellt wurden. Da der Gültigkeitsbereich der URL entgeht, ist er% 3A oder% 2F. Für Details darüber, was angegeben werden kann, klicken Sie hier [https://docs.microsoft.com/ja-jp/azure/active-directory/develop/v2-permissions-and-consent]. grant_type ist ein OAuth-Parameter mit einem festen Wert.

curl -d "client_id=Kunden ID" \
 -d "scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" \
 -d "client_secret=Kundengeheimnis" \
 -d "grant_type=client_credentials" \
 -H "Content-Type: application/x-www-form-urlencoded" \
 -X POST https://login.microsoftonline.com/Mieter-ID/oauth2/v2.0/token

Sie können ein Zugriffstoken erhalten. image.png

Wenden Sie sich mit dem Zugriffstoken an die Microsoft Graph API

Kopieren Sie das vorherige Zugriffstoken und fragen Sie jetzt die Microsoft Graph-API ab und bearbeiten Sie sie. Wenn Sie beispielsweise ein Gruppenmitglied erhalten möchten, sieht es folgendermaßen aus. Klicken Sie hier für den Endpunkt.

https://graph.microsoft.com/v1.0/groups/{group-id}/members

Verwenden Sie Graph Explorer, um zu überprüfen, wo sich der Endpunkt und das Format befinden. Ich werde es weglassen, aber für die Gruppen-ID habe ich mich bei Azure AD angemeldet und die ID, die in der Liste "Alle Gruppen" angezeigt wird, im Voraus erhalten.

curl -H GET 'https://graph.microsoft.com/v1.0/groups/Gruppen-ID/members'\
 -H 'Content-Type: application/json;charset=utf-8'\
 -H 'Authorization:Inhaber-Zugriffstoken'

Ich habe den resultierenden Screenshot weggelassen, aber Sie können sehen, dass der Wert im JSON-Format zurückgegeben wird. image.png

Wenn Sie diesen HTTP-Prozess in Java schreiben

Dieses Mal ist es in Java 8 geschrieben. Auch die Fehlerbehandlung entfällt. Wenn sich das Netzwerk unter einem Proxy befindet, legen Sie den Proxy in der Java-Umgebungsvariablen fest.

App.java


import java.io.*;
import java.net.*;

//Obwohl es sich um ein Standardpaket handelt, habe ich die zusätzliche Javax-Bibliothek nur hier verwendet.
//Es dekodiert auch Unicode-Escapezeichen
//Klicken Sie hier für die Jar-Datei
//https://repo1.maven.org/maven2/org/glassfish/javax.json/1.1.4/javax.json-1.1.4.jar
import javax.json.*;

public class App {

	public static void main(String[] args) throws Exception {
		
		String tenant_id = "Mieter-ID";
		String client_id = "Kunden ID";
		String client_secret = "Kundengeheimnis";
		String group_id = "Gruppen-ID";
		
		HttpURLConnection conn = null;
		InputStream input = null;
		HttpURLConnection conn2 = null;
		InputStream input2 = null;
		try {
			//①
			//Holen Sie sich mit Oauth2 Zugriffstoken
			
			//Java-Standard-HTTP-Anforderungsverarbeitung
			URL url = new URL("https://login.microsoftonline.com/" + tenant_id + "/oauth2/v2.0/token");
			conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);//Zeitaufwand für die Verbindung Millisekunde
			conn.setReadTimeout(5000);//Zeit zum Lesen der Daten in Millisekunden
			conn.setRequestMethod("POST");//HTTP-Methode
			conn.setUseCaches(false);//Verwendung des Cache
			conn.setDoOutput(true);//Senden des Anforderungshauptteils zulassen(Falsch für GET,Für POST auf true setzen)
			conn.setDoInput(true);//Erlauben Sie den Empfang einer Antwort
			conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
			String data = //Zu postende Daten
				  "client_id=" + client_id
				+ "&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default"  //java.net.Kann mit URLEncoder entkommen
				+ "&client_secret=" + client_secret
				+ "&grant_type=client_credentials";
			conn.getOutputStream().write(data.getBytes("utf-8"));
			conn.getOutputStream().close(); // send
			
			//Empfangen Sie das Ergebnis und konvertieren Sie es in ein Json-Objekt
			//Wenn Sie die JSON-Bibliothek nicht verwenden, analysieren Sie den zurückgegebenen Text einfach selbst
			//Ich bekomme etwas Ähnliches wie die Saite, die ich mit Curl bekommen habe
			int code = conn.getResponseCode();
			input = (code == 200 ? conn.getInputStream() : conn.getErrorStream());
			JsonReader jsonReader = Json.createReader(new BufferedReader(new InputStreamReader(input, "utf-8")));
			JsonObject json = jsonReader.readObject();
			jsonReader.close();
			conn.disconnect();
			
			//Ich habe den Zugangstoken bekommen!
			String access_token = json.getString("access_token");
			
			
			//②
			//Wenden Sie sich als Nächstes an die Microsoft Graph-API für Gruppenmitglieder
			URL url2 = new URL("https://graph.microsoft.com/v1.0/groups/" + group_id + "/members");
			conn2 = (HttpURLConnection) url2.openConnection();
			conn2.setConnectTimeout(5000);//Zeitaufwand für die Verbindung Millisekunde
			conn2.setReadTimeout(5000);//Zeit zum Lesen der Daten in Millisekunden
			conn2.setRequestMethod("GET");
			conn2.setUseCaches(false);//Verwendung des Cache
			conn2.setDoOutput(false);//Senden des Anforderungshauptteils zulassen(Falsch für GET,Für POST auf true setzen)
			conn2.setDoInput(true);//Erlauben Sie den Empfang einer Antwort
			conn2.setRequestProperty("Authorization", "Bearer " + access_token); //Zugriffstoken erhalten
			conn2.setRequestProperty("Accept", "application/json"); //Das ist wichtig! !! !! Der Punkt, auf den ich süchtig war
			conn2.connect();
		
			int code2 = conn2.getResponseCode();
			input2 = (code2 == 200 ? conn2.getInputStream() : conn2.getErrorStream());
			JsonReader jsonReader2 = Json.createReader(new BufferedReader(new InputStreamReader(input2, "utf-8")));
			JsonStructure json2 = jsonReader2.read();
			jsonReader2.close();
			conn2.disconnect();
		
			JsonArray members = json2.asJsonObject().getJsonArray("value");
			
			//Ich habe ein Mitglied der Gruppe!
			System.out.println(members);
		}
		catch(Error e) {
			e.printStackTrace();
		}
		finally {
			if(input != null) try { input.close(); } catch(Exception e){}
			if(conn != null) try { conn.disconnect(); } catch(Exception e){}
			if(input2 != null) try { input2.close(); } catch(Exception e){}
			if(conn2 != null) try { conn2.disconnect(); } catch(Exception e){}
		}
	}
}

Ich habe es richtig verstanden, als ich es kompiliert und ausgeführt habe. image.png

Zusammenfassung

Sie können es einfach erhalten, ohne das SDK zu verwenden. Sie benötigen nicht mehrere zusätzliche Jar-Dateien, und die Prozedur mit dem Server ist nicht verborgen, sodass Sie die Essenz erfassen können. Wenn Sie dagegen SDK verwenden, können Sie sich auf das Codieren konzentrieren, ohne den Ablauf des Tokens oder die Endpunkt-URL zu kennen, und der Graph Explorer gibt ein Code-Snippet aus, sodass die Produktivität meiner Meinung nach steigen wird.

Recommended Posts

Verwenden Sie Microsoft Graph mit Standard-Java
Verwenden Sie Lambda-Ebenen mit Java
Verwenden Sie SpatiaLite mit Java / JDBC
Verwenden Sie Java mit MSYS und Cygwin
Verwenden Sie Azure Bing SpellCheck mit Java
Verwenden Sie JDBC mit Java und Scala.
Verwenden Sie Java 11 mit Google Cloud-Funktionen
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
[JaCoCo (Java Code Coverage)] Verwendung mit NetBeans
Java Standard Logger
[Java] Verwenden Sie Collectors.collectingAndThen
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte Java8 für jeden mit Index verwenden
Verwendung der Java-API mit Lambda-Ausdrücken
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Einfaches Diagramm mit Rails ausgeben Verwenden Sie gem-chartkick / groupdate
Installieren Sie Java mit Homebrew
Verwenden Sie die schnelle Mapping-Bibliothek MapStruct mit Lombok und Java 11
Verwenden Sie ProGuard mit Gradle
Wechseln Sie die Plätze mit Java
Java-Standardfunktionstyp-Schnittstelle
[Java] Verschlüsselung mit AES-Verschlüsselung mit Standardbibliothek
Verwenden Sie Puphpeteer mit Docker
Verwenden Sie die aggregierte Abfrage (Anzahl) mit dem Azure CosmosDB Java SDK
Bequemer Download mit JAVA
Verwenden Sie XVim2 mit Xcode 12.0.1
Verwenden von CentOS mit LXD
Spielen Sie mit Java-Funktionsknoten, die Java mit Node-RED verwenden können
Erstellen Sie Diagramme mit JFreeChart
Treffen Sie die Grafikabfrage mit Java + PGX mit explosiver Geschwindigkeit
Schalten Sie Java mit direnv
Verwenden Sie OpenCV mit Java
Verwenden Sie Webmock mit Rspec
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Verwenden Sie java1.7 (zulu7) in einem bestimmten Verzeichnis mit jenv
Verwenden Sie WebJars mit Gradle
Erstellen Sie Java mit Wercker
Verwenden Sie PreparedStatement in Java
Verwenden Sie jlink mit gradle
Endian-Konvertierung mit JAVA
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
Verwenden Sie Java, das in Android Studio enthalten ist, um React Native zu erstellen
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
(Java) Einfache BDD mit Spektrum?
Erstellen Sie mit Gradle ein Java-Multiprojekt
Erste Schritte mit Java Collection
Verwenden Sie GDAL mit Python mit Docker
Java-Memo-Teilzeichenfolge (Standardklasse)
Java-Konfiguration mit Spring MVC
[Java] Verwendung von Map
Grundlegende Authentifizierung mit Java 11 HttpClient
Experimentieren wir mit der Java-Inline-Erweiterung
Führen Sie Batch mit Docker-Compose mit Java-Batch aus
Schreiben Sie Java Try-Catch mit Optional neu
Installieren Sie Java 7 mit Homebrew (Fass)