การใช้ Microsoft Graph API เพื่อเข้าถึง Azure ผ่าน PowerShell
Microsoft Graph API ช่วยให้คุณเข้าถึงออบเจกต์ใดๆ ในผู้เช่า Azure AD (Microsoft 365) โดยใช้จุด REST API เดียว (
https://graph.microsoft.com). คุณมักจะคิดว่ามันอาจน่าสนใจสำหรับนักพัฒนาเว็บเท่านั้น แต่ในทางกลับกัน ข้อมูล วัตถุ หรือคุณสมบัติทรัพยากรบางอย่างใน Microsoft 365 สามารถเข้าถึงได้ผ่าน Microsoft Graph เท่านั้น ในการรวบรวมข้อมูลการวิเคราะห์ สถิติ หรือข้อมูลอื่นๆ ผู้ดูแลระบบ Azure ต้องใช้ Microsoft Graph
ในบทความนี้ เราจะแสดงวิธีลงทะเบียนแอปของคุณใน Azure AD รับโทเค็นการรับรองความถูกต้อง เชื่อมต่อกับทรัพยากร Microsoft 365 ต่างๆ (Azure AD, Office 365, Intune, SharePoint, Teams, OneNote ฯลฯ) โดยใช้ RESTful และ พาวเวอร์เชลล์
Invoke-RestMethodซม. คุณสามารถใช้ Microsoft Graph ได้ทั้งเพื่อรับข้อมูลและจัดการวัตถุใน Azure
การลงทะเบียน Microsoft Graph Application บน Azure AD
ในการเข้าถึงทรัพยากรในผู้เช่า Azure ของคุณโดยใช้ Microsoft Graph คุณต้องสร้างแอป Azure AD ใหม่และอนุญาตให้เข้าถึงวัตถุ Azure ต่างๆ
-
ลงชื่อเข้าใช้พอร์ทัล Azure https://portal.azure.com/
ไปที่ Azure Active Directory -> การลงทะเบียนแอป
สร้างแอปใหม่ (การลงทะเบียนใหม่);
ป้อนชื่อแอปของคุณ: azGraphPowerShellApp เลือกผู้ที่สามารถใช้แอป:
Accounts in this organizational directory only (tenantname only - Single tenant)แล้วคลิก ลงทะเบียน;
จากนั้นเลือกทรัพยากร Azure ที่แอปพลิเคชันของคุณได้รับอนุญาตให้เข้าถึง ไปที่ส่วน การอนุญาต API
ตามค่าเริ่มต้น แอปจะได้รับอนุญาตให้อ่านข้อมูลเกี่ยวกับผู้ใช้ AzureAD ปัจจุบันเท่านั้น (
User.Read). เราจะให้สิทธิ์ในการอ่านคุณสมบัติทั้งหมดของผู้ใช้และกลุ่ม Microsoft 365
-
คลิก เพิ่มสิทธิ์ เลือก Microsoft Graph
มีสิทธิ์พื้นฐานสองประเภทใน Microsoft Graph (สิทธิ์ที่ได้รับมอบสิทธิ์ - เมื่อดำเนินการบางอย่างในนามของผู้ใช้ที่เรียกใช้แอป และ สิทธิ์ของแอปพลิเคชัน - เมื่อแอปถูกเรียกโดย สคริปต์ภายนอก) เลือก การอนุญาตแอปพลิเคชัน;
ในรายการที่ปรากฏขึ้น คุณสามารถเลือกสิทธิ์ที่คุณจะกำหนดให้แอปพลิเคชันของคุณเข้าถึงทรัพยากรและวัตถุ Azure ได้ ในตัวอย่างของฉัน ฉันได้เพิ่ม Group ->
Group.Read.All, GroupMember ->
GroupMember.Read.All, ผู้ใช้ ->
User.Read.All(ถ้าคุณต้องการให้แอปของคุณอ่านข้อมูลใดๆ ในผู้เช่าของคุณ ให้เลือก
Directory.Read.All);
คลิกให้ความยินยอมของผู้ดูแลระบบ เพื่อให้สิทธิ์การเข้าถึงในนามของผู้ดูแลระบบ
หากต้องการตรวจสอบสิทธิ์ในแอป คุณสามารถใช้ใบรับรองหรือความลับได้ ความลับคือรหัสผ่านที่สร้างขึ้นโดยอัตโนมัติ ชื่อผู้ใช้คือรหัสแอป มาสร้างความลับสำหรับแอปของคุณกันเถอะ
เปิด ใบรับรอง & ความลับ -> ความลับของลูกค้าใหม่;
ป้อนชื่อคีย์และตั้งเวลาที่ใช้ได้ (ฉันระบุ 12 เดือน)
คัดลอกค่าจากช่อง ค่า (เป็นรหัสผ่านสำหรับแอป) บันทึกรหัสผ่านใน Azure Key Vault หรือในตัวจัดการรหัสผ่านของคุณ เนื่องจากหลังจากที่คุณออกจากแอป ค่ารหัสผ่านจะถูกซ่อนไว้ (คุณจะต้องสร้างรหัสลับอีกครั้ง)
จากนั้นคัดลอกรหัสแอปของคุณ (รหัสไคลเอนต์แอปพลิเคชัน) และรหัสผู้เช่า Azure (รหัสผู้เช่าไดเรกทอรี)
วางค่าของคุณลงในตัวแปร PowerShell:
$ApplicationID = "1111111-1111-1111-1111-11111111111"
$TenatDomainName = "2222222-2222-2222-2222-222222222222"
$AccessSecret = "3333333333333333333333333333333333333333333"การเชื่อมต่อกับ Azure Microsoft Graph API โดยใช้ PowerShell
หากต้องการใช้ Microsoft Graph API จาก PowerShell คุณไม่จำเป็นต้องติดตั้งโมดูล PowerShell แยกต่างหาก (เช่น Azure AD) คุณสามารถโต้ตอบกับมันได้โดยใช้ในตัว
Invoke-RestMethodซม.
หากต้องการเชื่อมต่อกับ Graph API คุณต้องได้รับโทเค็นการเข้าถึง สคริปต์ PowerShell ต่อไปนี้ช่วยให้คุณตรวจสอบสิทธิ์ในแอปของคุณและรับโทเค็นการเข้าถึง Microsoft Graph API
ในตัวอย่างนี้ เรากำลังใช้รหัสลับ (รหัสผ่าน) เป็นข้อความธรรมดาในสคริปต์ ในชีวิตจริงไม่แนะนำให้ทำ คุณควรขอความลับแบบโต้ตอบหรือดึงข้อมูลจากห้องเก็บความลับ (โมดูล SecretManagement PowerShell สามารถช่วยคุณได้) นอกจากนี้ โปรดดูแลความลับของคุณหากคุณเก็บสคริปต์ PowerShell ไว้ใน Git
$ApplicationID = "1111111-1111-1111-1111-11111111111"
$TenatDomainName = "2222222-2222-2222-2222-222222222222"
$AccessSecret = "3333333333333333333333333333333333333333333"
$Body = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $ApplicationID
Client_Secret = $AccessSecret
}
$ConnectGraph = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token -Method POST -Body $Body
$token = $ConnectGraph.access_tokenเมื่อใช้โทเค็น คุณสามารถเรียกใช้แบบสอบถามต่างๆ กับผู้เช่า Azure ของคุณโดยใช้ GraphAPI
ตัวอย่างเช่น สคริปต์ด้านล่างแสดงรายการกลุ่มใน Azure AD ของคุณ:
$GrapGroupUrl = 'https://graph.microsoft.com/v1.0/Groups/'
(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapGroupUrl -Method Get).value.displayNameคุณสามารถแสดงวันที่สร้างกลุ่ม Azure AD:
$GrapGroupUrl = 'https://graph.microsoft.com/v1.0/Groups/'
$Groups=(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapGroupUrl -Method Get).value
$Groups | select displayName,createdDateTimeในการแสดงชื่อผู้ใช้ UPN และที่อยู่อีเมล:
$GrapUserUrl = 'https://graph.microsoft.com/v1.0/users'
$users=(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapUserUrl -Method Get).value
$users | select displayName,userprincipalname,mailหากคุณไม่ได้รับอนุญาตให้เข้าถึงวัตถุ Azure AD ในแอปของคุณ ข้อผิดพลาดต่อไปนี้จะปรากฏขึ้นเมื่อพยายามเรียกใช้ Invoke-RestMethod:
The remote server returned an error: (403) Forbidden.ในตัวอย่างข้างต้น เราอ่านข้อมูลจาก Azure AD โดยใช้วิธี GET เท่านั้น แต่คุณยังสามารถใช้เมธอด POST, PUT, PATCH หรือ DELETE เพื่อทำการเปลี่ยนแปลงได้ ตัวอย่างเช่น คุณสามารถสร้างผู้ใช้ใน Azure AD รีเซ็ตรหัสผ่าน เปลี่ยนคำอธิบาย ฯลฯ
หากต้องการดูคุณสมบัติหรือวิธีการของ Microsoft Graph API ในเบราว์เซอร์ของคุณ คุณสามารถใช้ Graph Explorer (https://developer.microsoft.com/en-us/graph/graph-explorer)
Microsoft ยังมี Microsoft Graph PowerShell SDK พิเศษสำหรับการโต้ตอบกับ Microsoft Graph (
Install-Module Microsoft.Graph). แต่เราแสดงให้เห็นว่าคุณสามารถเข้าถึง Microsoft Graph ได้โดยตรงจาก PowerShell











