ממשק ה־Microsoft Graph API הוא שירות המאפשר לך לקרוא, לשנות ולנהל כמעט כל נגזרת של Azure AD ו־Office 365 תחת REST API אחד. במאמר זה, למד כיצד להמיר את ה־API שלך ל־PowerShell Graph API.
דרישות מוקדמות
אם ברצונך ללכת איתי במאמר זה, הקפד לעמוד בדרישות הבאות תחילה:
- הפעלת Windows PowerShell 5.1 (זו הגרסה בה בדקתי. גרסאות אחרות יכולות לעבוד, אך אין הבטחה)
- ערך Azure
- אימות ל־Azure עם חשבון הניהול הכללי או עם הרשאות להרשמת אפליקציה במינוי והרשאת ניהול כללית כדי לאשר את בקשות ההרשמה של האפליקציה שלך.
יצירת זהות אפליקציה עבור Microsoft Graph API
כדי לגשת אל Microsoft Graph API, יש צורך קודם כל בזהות שתאפשר לך לקבל טוקן OAuth. זה נעשה בעיקר עם זהות אפליקציה שאתה יכול ליצור בפורטל של Azure. אתה יכול ליצור זהות אפליקציה דרך פורטל ה־Azure. כדי לעשות זאת:
- עבור אל פורטל ה־Azure ונווט אל Active Directory של Azure.
- לחץ על רישום אפליקציות תחת ניהול בתפריט השמאלי ולחץ על הכפתור רישום חדש.

- הזן שם לאפליקציה שלך ולחץ על רישום.
- העתק את מזהה האפליקציה (Application Id) לשימוש מאוחר יותר.

יצירת סודות עבור Microsoft Graph API
שלום! הנה התרגום לעברית:
ניתן לאמת ל-Graph API באמצעות שני שיטות עיקריות: AppId/Secret ואימות המבוסס על תעודה. יהיה עליך לאמת כאשר אתה מתחבר ל-Graph API באמצעות PowerShell.
בוא נכסה איך לאמת עם שתי השיטות.
AppId/Secret
מזהה אפליקציה/סוד הוא כמו שם משתמש/סיסמה רגילים. מזהה האפליקציה מורכב מ-GUID במקום שם משתמש, והסיסמה היא פשוט מחרוזת אקראית.
כדי ליצור סוד, לחץ על תעודות & סודות בתפריט השמאלי וללחוץ על סוד לקוח חדש.

הזן תיאור לסוד ובחר מתי אתה רוצה שהוא יפוג. כעת זה רק עניין של לבקש הרשאה כדי שתוכל לגשת לנתונים שאתה רוצה.
תעודה
קיימת אפשרות ליצור תעודה עצמאית ולהעלות את מפתח הציבור שלה ל-Azure. זהו הדרך המועדפת והמאובטחת יותר לאימות.
תחילה, עליך ליצור תעודה עצמאית. למזלך, זה נעשה בקלות באמצעות PowerShell.
עכשיו, העלה את התעודה המאושרת עצמאית שייצאת ל-$CerOutputPath
לאפליקציית ה-Azure שלך על ידי לחיצה על תעודות וסודות בתפריט השמאלי ולחיצה על העלאת תעודה.

הוספת הרשאות לאפליקציה
נתינת הרשאות תקניות לאפליקציה היא חשובה – לא רק לפונקציונליות של האפליקציה שלך אלא גם לבטיחות. ידע על זה ועל (כמעט) כל הדברים האחרים ב- Microsoft Graph API ניתן למצוא ב-תיעוד.
פעם אחת שאני מקבל את זה מוכן, אני הולך לאסוף את כל אירועי האבטחה מהשוכר שלי. כדי להתיר את זה אני צריך SecurityEvents.Read.All כרשות מינימלית. עם זה אני יכול לאסוף ולפעול על אירועי נסיעה בלתי אפשריים, משתמשים המתחברים דרך VPN/TOR וכדומה.
כדי להוסיף את SecurityEvents.Read.All לאפליקציה שלך – לחץ על אישורי API ואז הוסף הרשאה. זה יציג לך לא רק את גרף ה-API אלא גם מספר רב של אפליקציות אחרות ב-Azure. רוב האפליקציות הללו קלות להתחבר אליהן פעם שאתה יודע איך להתחבר ל-Graf API של מיקרוסופט.
לחץ על מיקרוסופט גרף > רשות אפליקציה > אירועי אבטחה וסמן את SecurityEvents.Read.All. לאחר מכן לחץ על כפתור ההרשאה הוסף הרשאה.
ראית שעמוד ה נדרש אישור מנהל הוגדר ל כן על אותה הרשאה? זה אומר שמנהל שוכר צריך לאשר לפני שההרשאה מתווספת לאפליקציה.

אם אתה מנהל גלובלי, לחץ על הענק אישור מנהל עבור או בקש מנהל גלובלי לאשר את זה. לבקש אישור מהמשתמש במקום מנהל שמגדיר רשות קריאה/כתיבה היא חלק גדול מאימות OAuth. אך זה מאפשר לנו לעקוף את זה עבור רוב הרשאות ב-Graph של מיקרוסופט.
כנראה שראית את זה כבר בפייסבוק או ב-Google: "האם אתה מאשר לאפליקציה X לגשת לפרופיל שלך?"

עכשיו אתה מוכן – בוא נתחבר ונקבל כמה נתונים!
רכוש טוקן גישה (מזהה יישום וסוד)
לצורך זה נצטרך לשלוח בקשה כדי לקבל טוקן גישה מכתובת אתר אוטוריזציה של Microsoft Graph OAuth. ובתוך גוף הבקשה עלינו לספק:
client_id
– מזהה היישום שלך – מקודד ב-URLclient_secret
– הסוד של היישום שלך – מקודד ב-URLscope
– URL מוקודד המציין את מה שתרצה לגשת אליוgrant_type
– איזו שיטת אימות אתה משתמש
כתובת ה-URL עבור נקודת הסיום היא https://login.microsoftonline.com/<tenantname>/oauth2/v2.0/token. תוכל לבקש טוקן גישה עם PowerShell וממשק ה-Graph באמצעות קטע הקוד הבא.
רכוש טוקן גישה (באמצעות תעודה)
האימות לממשק ה-Graph של Microsoft עם תעודה קצת שונה מזרימת ה-AppId/Secret הרגילה. כדי לקבל טוקן גישה באמצעות תעודה עליך:
- צור כותרת טוקן רשת Java (JWT).
- צור גוף טוקן (Payload) JWT.
- חתום על כותרת וגוף ה-JWT עם התעודה המאושרת שנוצרה מראש. זה ייצור טוקן גישה שנוצר בעצמך שימושי לבקשת טוקן גישה של Microsoft Graph.
- צור גוף בקשה המכיל:
client_id=<application id>
client_assertion=<the JWT>
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
scope=<URLEncoded scope>
grant_type=client_credentials
- בצע בקשת POST עם הגוף שנוצר לנקודת הסיום של OAuth עם
Authorization=<JWT>
בכותרת שלו.
איך לעשות זאת לא הייתה ברורה במסמכי Microsoft אבל הנה סקריפט PowerShell לביצוע זאת: מסמך המסמך
הבנת פלט קבלת הרשאה לבקש
כאשר קיבלת טוקן גישה באמצעות מזהה יישום/סוד או באמצעות תעודה, תראה אובייקט עם ארבע מאפיינים.
token_type
– איזה סוג של טוקן זהexpires_in
– זמן בשניות שהטוקן גישה תקףext_expires_in
– כמוexpires_in
אך לעמידות במקרה של תקלה בשירות הטוקןaccess_token
– עבור מה באנו
לאחר מכן, תיצור כותרת באמצעות token_type
ו-access_token
ותתחיל לבצע בקשות עם PowerShell ל-Microsoft Graph API.
ביצוע בקשות ל-Microsoft Powershell Graph API
כעת התחל לבצע כמה בקשות ל-API.
עוברים עם הדוגמה שלנו, תזדקק ל-URL לרשימת אזהרות אבטחה. זכור להשתמש במסמכי ה-API של Microsoft Graph לצפיה במה שנדרש.
במקרה זה, תזדקק לכותרת עם Authorization=Bearer <access_token>
ובקשת GET לנקודת הקצה של אזהרות ה-Graph API. כך תעשה זאת עם PowerShell.
כעת, אם יש לך אזהרות אבטחה במשתנה $SecurityAlerts
, זה צריך לראות משהו דומה לזה:
בדיקת התראת אבטחה יחידה כJSON תראה כך:
הבנת וניהול פלט API בדפוסים
API של Microsoft Graph מוגבל לפי פונקציה בכמה פריטים הוא יחזיר. המגבלה הזו היא לפי פונקציה אך נניח שהיא 1000 פריטים. זה אומר שתוכלו לקבל מרבית 1000 פריטים בבקשתכם.
כאשר מתקבלת עד המגבלה זו ישתמש בדפוס על מנת למסור את שאר הפריטים. הוא עושה זאת על ידי הוספת המאפיין @odata.nextLink
לתשובת הבקשה שלך. @odata.nextLink
מכיל URL שבו תוכלו לקרוא כדי לקבל את הדף הבא של בקשתך.
ניתן לעבור על כל הפריטים על ידי בדיקה של המאפיין הזה ושימוש בלולאה:
מסקנה
לאחר שתלמדו כיצד לאמת ל-Graph API של Microsoft, זה די פשוט לאסוף ממנו נתונים. זו שירות עוצמתי שמשמש פחות ממה שצריך.
במזל רב ישנם הרבה מודולים שם שכבר משתמשים ב-API של Microsoft Graph אך כדי לענות על צרכים משלכם עשויים להיות עליכם ליצור מודול משלכם עבור זה. באמצעות הכישורים שלמדתם במאמר זה, תצליחו היטב בדרככם.
למידע נוסף על שליטה בגישה לאורחים ב-Office 365, כתבתי מאמר מפורט בבלוג שלי. אני ממליץ לך ל בדוק אותו.