การสร้างคำเชิญผู้ใช้ B2B แบบกำหนดเองด้วย Graph API
บัญชีผู้ใช้ทั่วไปของ Azure AD แบบธุรกิจกับธุรกิจ (B2B) เป็นวิธีที่ยอดเยี่ยมในการให้สิทธิ์การเข้าถึงแอปและบริการสำหรับผู้ใช้ภายนอกและองค์กรคู่ค้าอย่างปลอดภัย บัญชีผู้ใช้ทั่วไปจะถูกสร้างขึ้นใน Azure AD โดยการส่งคำเชิญให้กับผู้ใช้ภายนอกก่อน จากนั้นจึงแลกและรับรองความถูกต้องผ่าน IDP ของตนเอง (รองรับ) ตัวอย่างเช่น โดยใช้อินสแตนซ์ Azure AD ภายนอกหรือบัญชี Microsoft สำหรับผู้บริโภค
โดยทั่วไปคำเชิญจะถูกส่งโดยใช้เทมเพลตอีเมลมาตรฐาน และอาจมีข้อความที่กำหนดเองจำนวนเล็กน้อยเพื่อช่วยให้ผู้รับเข้าใจว่าต้องทำอย่างไรต่อไป:
สำหรับการส่งคำเชิญจำนวนเล็กน้อย กระบวนการนี้ก็ใช้ได้อย่างสมบูรณ์ อย่างไรก็ตาม มีกรณีการใช้งานที่ซับซ้อนกว่าซึ่งจำเป็นต้องมีความยืดหยุ่นเพิ่มเติม ตัวอย่างบางส่วนที่อาจจำเป็นต้องมีฟังก์ชันการทำงานเพิ่มเติม ได้แก่:
- เมื่อผู้ใช้ผู้เยี่ยมชมจำนวนมากจำเป็นต้องได้รับเชิญไปยังผู้เช่าจำนวนมากเพื่อใช้แอปธุรกิจใหม่
- เมื่อจำเป็นต้องมีคำแนะนำการเริ่มต้นใช้งานโดยละเอียดเพิ่มเติมสำหรับผู้ใช้ภายนอก
- เมื่อแอปพลิเคชันภายในต้องการความสามารถในการจัดเตรียมบัญชีผู้เยี่ยมชมโดยอัตโนมัติ
- เมื่อทำการเชิญผู้ใช้ทั่วไปโดยอัตโนมัติในสภาพแวดล้อมที่มีผู้เช่าหลายรายเพื่อให้สามารถทำงานร่วมกันได้
เพื่อช่วยในเรื่องนี้ ฉันได้สร้างสคริปต์โดยใช้ PowerShell และ Graph API เพื่อสร้างคำเชิญผู้ใช้ที่เป็นแขกโดยอัตโนมัติ สคริปต์ยังมีตัวเลือกในการป้องกันไม่ให้คำเชิญทางอีเมลส่งและส่งคืน URL การแลกสิทธิ์ เพื่อให้สามารถส่งเป็นส่วนหนึ่งของการสื่อสารการเริ่มต้นใช้งานแบบกำหนดเองได้
กำลังมองหาบทความเพิ่มเติมเกี่ยวกับ Azure AD อยู่ใช่ไหม ลองอ่านบล็อกนี้จาก Dominik Hoefling เกี่ยวกับวิธีบรรลุการรับรองความถูกต้องแบบไร้รหัสผ่านใน Azure AD
เตรียมสิ่งแวดล้อม
เนื่องจากสคริปต์ใช้ Graph API เพื่อสร้างคำเชิญ จึงจำเป็นต้องมีแอปที่ลงทะเบียน Azure AD ใหม่ สำหรับข้อมูลเบื้องต้นเกี่ยวกับวิธีสร้างแอป คุณจะต้องปฏิบัติตามคำแนะนำที่อธิบายไว้ในบทความนี้ เมื่อกำหนดสิทธิ์ รายการเดียวที่จำเป็นคือ User.Invite.All การอนุญาตแอปพลิเคชัน:
เมื่อสร้างแอปแล้ว ตรวจสอบให้แน่ใจว่าคุณจดบันทึกรหัสลูกค้า รหัสผู้เช่า และความลับของลูกค้า ค่าเหล่านี้จำเป็นในการอนุญาตให้สคริปต์ตรวจสอบสิทธิ์กับ Azure AD
กำลังเรียกใช้สคริปต์
ในการรันสคริปต์ จำเป็นต้องมีพารามิเตอร์ต่อไปนี้:
- UserDisplayName - ชื่อที่แสดงสำหรับบัญชีผู้เยี่ยมชม
- UserEmail - ที่อยู่อีเมลของผู้ใช้ภายนอก
- ClientSecret - ความลับของลูกค้าจากการลงทะเบียนแอป
- ClientID - รหัสแอปพลิเคชัน (ไคลเอ็นต์) จากการลงทะเบียนแอป
- TenantID - รหัสไดเรกทอรี (ผู้เช่า) ของผู้เช่า Azure AD
- SendInvite - การตั้งค่านี้เป็น $true จะส่งอีเมลอัตโนมัติ $false จะส่งกลับ URL การแลกรางวัลไปที่หน้าจอ
พารามิเตอร์ต่อไปนี้เป็นทางเลือก:
- (ไม่บังคับ) RedirectURL - URL ที่จะเปลี่ยนเส้นทางผู้ใช้ไปหลังจากแลกคำเชิญแล้ว สิ่งนี้จะมีค่าเริ่มต้นเป็น “https://myapps.microsoft.com”
- (ไม่บังคับ) UserMessage - ข้อความที่จะเพิ่มลงในอีเมลอัตโนมัติ
เมื่อพารามิเตอร์พร้อมแล้ว ให้ดาวน์โหลดสคริปต์จาก GitHub และรันตามที่แสดงในตัวอย่างด้านล่าง:
##Declare Parameters##
$UserDisplayName = “(Guest) Sean McAvinue”
$UserEmail = “Adminseanmc@adminseanmc.com”
$clientSecret = <Client Secret Value>
$clientID = <Application (Client) ID Value>
$tenantID = <Directory (Tenant) ID Value>
$SendInvite = $True
$RedirectURL = “https://seanmcavinue.net”
$UserMessage = “You have been invited to collaborate with Contoso. Redeem this invitation to get started and you’ll be redirected to our corporate website!”
##Run Script’’
.\graph-CreateGuestUserInvitation.ps1 -UserDisplayName $UserDisplayName -UserEmail $UserEmail -ClientSecret $clientSecret -TenantID $tenantID -ClientID $clientID -SendInvite $SendInvite -UserMessage $UserMessage
สิ่งนี้จะสร้างคำเชิญและส่งโดยใช้เทมเพลตมาตรฐาน สคริปต์จะแสดงรายละเอียดของคำเชิญไปยังหน้าจอเพื่อตรวจสอบดังแสดงในรูปที่ 3:
สคริปต์ยังสามารถรันโดยตั้งค่าสถานะ Sendinvite เป็น $false วิธีนี้จะป้องกันไม่ให้ส่งอีเมลอัตโนมัติและจะส่งคืน URL การแลกรับคำเชิญไปที่หน้าจอ:
จากนั้นสามารถส่ง URL การแลกสิทธิ์แยกกันพร้อมกับคำแนะนำหรือเอกสารนโยบายที่จำเป็น สคริปต์สามารถขยายได้เพื่อให้เหมาะกับข้อกำหนดบางประการที่กล่าวไว้ก่อนหน้านี้ ตัวอย่างเช่น สามารถใช้ CSV เพื่อจัดเตรียมบัญชีแขกจำนวนมากได้อย่างง่ายดาย:
##Import a CSV with the following headers “Displayname”,”Email”,”Message”
$CSV = Import-Csv ExternalUsers.csv
##Loop through CSV and send invites##
Foreach($user in $csv){
.\graph-CreateGuestUserInvitation.ps1 -UserDisplayName $User.DisplayName -UserEmail $User.Email -ClientSecret $clientSecret -TenantID $tenantID -ClientID $clientID -SendInvite $true -UserMessage $User.Message
}
เมื่อสร้างผู้ใช้แบบเกสต์ข้ามการเช่าหลายรายการ จำเป็นต้องมีการลงทะเบียนแอปพลิเคชันในผู้เช่าแต่ละราย จากนั้นจึงสามารถเรียกใช้สคริปต์แบบวนซ้ำเพื่อจัดเตรียมในแต่ละการเช่า:
##Declare Parameters##
$UserDisplayName = “(Guest) Sean McAvinue”
$UserEmail = Adminseanmc@adminseanmc.com
##Create Tenant Details Object Array##
$TenantDetails = @([PSCustomObject]@{
clientSecret = <Tenant 1 Client Secret>
clientid = <Tenant 1 Client ID>
tenantid = <Tenant 1 Tenant ID>
},
[pscustomobject]@{
clientSecret = <Tenant 2 Client Secret>
clientid = <Tenant 2 Client ID>
tenantid = <Tenant 2 Tenant ID>
})
$SendInvite = $True
$RedirectURL = “https://seanmcavinue.net”
$UserMessage = “You have been invited to collaborate with Contoso. Redeem this invitation to get started and you’ll be redirected to our corporate website!”
##Loop through tenants##
Foreach($tenant in $TenantDetails){
##Run Script’’
.\graph-CreateGuestUserInvitation.ps1 -UserDisplayName $UserDisplayName -UserEmail $UserEmail -ClientSecret $$tenant.clientSecret -TenantID $tenant.tenantID -ClientID $tenant.clientID -SendInvite $SendInvite -UserMessage $UserMessage
}
สรุป
สคริปต์นี้สามารถใช้เพื่อทำให้กระบวนการเชิญผู้ใช้ที่เป็นแขกเป็นแบบอัตโนมัติ และรวมเข้ากับแอปพลิเคชันที่กำหนดเองได้อย่างราบรื่นยิ่งขึ้น นอกจากนี้ยังสามารถใช้เพื่อจัดเตรียมบัญชีแขกจำนวนมากได้อย่างรวดเร็วและง่ายดาย
สามารถดาวน์โหลดสคริปต์ได้จาก GitHub
หมายเหตุ: เช่นเคย อย่าลืมตรวจสอบและทดสอบโค้ดใดๆ ก่อนใช้งานในสภาพแวดล้อมการใช้งานจริง



