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
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.
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.
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.
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