Ce serait bien d'utiliser le SDK Microsoft pour Java, mais cela nécessite beaucoup de fichiers Jar associés. Pour comprendre ce que vous faites en substance, écrivons une requête Microsoft Graph avec uniquement le package Java standard.
Que faire
Tout d'abord, obtenez un jeton d'accès auprès d'Azure Active Directory conformément à la procédure OAuth. L'URL (point de terminaison) à obtenir est
** https://login.microsoftonline.com/tenant ID / oauth2 / v2.0 / token **
L'ID de locataire se trouve dans la vue d'ensemble du locataire Azure AD. POSTER l'ID client et le secret créés vers ici. Étant donné que l'étendue échappe l'URL, il s'agit de% 3A ou% 2F. Pour plus de détails sur ce qui peut être spécifié, cliquez ici [https://docs.microsoft.com/ja-jp/azure/active-directory/develop/v2-permissions-and-consent). grant_type est un paramètre OAuth avec une valeur fixe.
curl -d "client_id=identité du client" \
-d "scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" \
-d "client_secret=Secret du client" \
-d "grant_type=client_credentials" \
-H "Content-Type: application/x-www-form-urlencoded" \
-X POST https://login.microsoftonline.com/ID du locataire/oauth2/v2.0/token
Vous pouvez obtenir un jeton d'accès.
Copiez le jeton d'accès précédent, puis interrogez et manipulez l'API Microsoft Graph. Par exemple, si vous souhaitez obtenir un membre du groupe, cela ressemblera à ceci. Cliquez ici pour le point final.
https://graph.microsoft.com/v1.0/groups/{group-id}/members
Utilisez Graph Explorer pour vérifier l'emplacement du point de terminaison et le format. Bien que omis, l'ID de groupe est obtenu en se connectant à Azure AD et en obtenant l'ID affiché dans la liste «Tous les groupes» à l'avance.
curl -H GET 'https://graph.microsoft.com/v1.0/groups/ID de groupe/members'\
-H 'Content-Type: application/json;charset=utf-8'\
-H 'Authorization:Jeton d'accès au porteur'
J'ai omis la capture d'écran résultante, mais vous pouvez voir que les valeurs sont renvoyées au format JSON.
Cette fois, il est écrit en Java 8. De plus, la gestion des erreurs est omise. Si le réseau est sous un proxy, définissez le proxy dans la variable d'environnement Java.
App.java
import java.io.*;
import java.net.*;
//Bien que l'on dise qu'il s'agit d'un package standard, j'ai utilisé la bibliothèque supplémentaire javax uniquement ici.
//Il décode également les caractères échappés Unicode
//Cliquez ici pour le fichier Jar
//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 = "ID du locataire";
String client_id = "identité du client";
String client_secret = "Secret du client";
String group_id = "ID de groupe";
HttpURLConnection conn = null;
InputStream input = null;
HttpURLConnection conn2 = null;
InputStream input2 = null;
try {
//①
//Obtenez un jeton d'accès avec Oauth2
//Traitement des requêtes HTTP standard Java
URL url = new URL("https://login.microsoftonline.com/" + tenant_id + "/oauth2/v2.0/token");
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);//Temps requis pour la connexion en milliseconde
conn.setReadTimeout(5000);//Temps requis pour lire les données en milliseconde
conn.setRequestMethod("POST");//Méthode HTTP
conn.setUseCaches(false);//Utilisation du cache
conn.setDoOutput(true);//Autoriser l'envoi du corps de la demande(Faux pour GET,Défini sur true pour POST)
conn.setDoInput(true);//Autoriser la réception du corps de la réponse
conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
String data = //Données à publier
"client_id=" + client_id
+ "&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" //java.net.Peut être échappé avec URLEncoder
+ "&client_secret=" + client_secret
+ "&grant_type=client_credentials";
conn.getOutputStream().write(data.getBytes("utf-8"));
conn.getOutputStream().close(); // send
//Recevez le résultat et convertissez-le en objet Json
//Si vous n'utilisez pas la bibliothèque JSON, analysez simplement le texte renvoyé par vous-même
//J'obtiens quelque chose de similaire à la corde que j'obtenais avec Curl
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();
//J'ai le jeton d'accès!
String access_token = json.getString("access_token");
//②
//Ensuite, contactez l'API Microsoft Graph pour les membres du groupe
URL url2 = new URL("https://graph.microsoft.com/v1.0/groups/" + group_id + "/members");
conn2 = (HttpURLConnection) url2.openConnection();
conn2.setConnectTimeout(5000);//Temps requis pour la connexion en milliseconde
conn2.setReadTimeout(5000);//Temps requis pour lire les données en milliseconde
conn2.setRequestMethod("GET");
conn2.setUseCaches(false);//Utilisation du cache
conn2.setDoOutput(false);//Autoriser l'envoi du corps de la demande(Faux pour GET,Défini sur true pour POST)
conn2.setDoInput(true);//Autoriser la réception du corps de la réponse
conn2.setRequestProperty("Authorization", "Bearer " + access_token); //Jeton d'accès obtenu
conn2.setRequestProperty("Accept", "application/json"); //C'est important! !! !! Le point auquel j'étais accro
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");
//J'ai un membre du groupe!
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){}
}
}
}
Je l'ai bien compris lorsque je l'ai compilé et exécuté.
Vous pouvez l'obtenir simplement sans utiliser le SDK, vous n'avez pas besoin de plusieurs fichiers Jar supplémentaires et la procédure avec le serveur n'est pas masquée, vous pouvez donc en saisir l'essence. D'un autre côté, si vous utilisez le SDK, vous pouvez vous concentrer sur le codage sans être conscient de l'expiration du jeton ou de l'URL du point de terminaison, et Graph Explorer produira un extrait de code, donc je pense que la productivité augmentera.
Recommended Posts