แบบฝึกหัด - อนุญาตการเข้าถึง Microsoft Graph API ด้วย MSAL

เสร็จสมบูรณ์เมื่อ

ในแบบฝึกหัดนี้ คุณกําหนดค่าแอปพลิเคชันด้วยสิทธิ์และใช้ MSAL เพื่อเข้าถึงข้อมูลโปรไฟล์ผู้ใช้จาก API ของ Microsoft Graph (MS Graph)

เพิ่มสิทธิ์ของ Microsoft Graph ลงในการลงทะเบียนแอป

บริการเว็บที่รักษาความปลอดภัยโดย Microsoft Entra ID จะกําหนดชุดของสิทธิ์ที่ให้การเข้าถึงฟังก์ชันการทํางานของ API และข้อมูลที่แสดงโดยบริการนั้น ก่อนที่แอปพลิเคชันสามารถเข้าถึงข้อมูลหรือดําเนินการในนามของผู้ใช้ จะต้องร้องขอสิทธิ์เหล่านี้เพื่ออนุมัติโดยผู้ใช้ คุณสามารถกําหนดสิทธิ์ API เหล่านี้ให้กับการลงทะเบียนแอปของคุณจากพอร์ทัล Azure ได้ ต่อไปนี้คือขั้นตอนการกําหนดสิทธิ์ Microsoft Graph API ให้กับแอปพลิเคชันของคุณ

  1. บนหน้าจอ การลงทะเบียนแอป ให้เลือกสิทธิ์ API เพื่อเพิ่มการเข้าถึง API ที่แอปพลิเคชันของคุณต้องการ

    สกรีนช็อตที่แสดงเมนูของบานหน้าต่างสิทธิ์ API ของแอปที่ลงทะเบียนด้วย Microsoft Entra ID บนพอร์ทัล Azure

    • เลือก เพิ่มสิทธิ์

    • ตรวจสอบให้แน่ใจว่าได้เลือกแท็บ API ของ Microsoft

    • ในส่วน ใช้บ่อย Microsoft API เลือก Microsoft Graphจากนั้นเลือก สิทธิ์ที่ได้รับมอบสิทธิ์

    • ในส่วน สิทธิ์ที่ได้รับมอบ ให้เลื่อนลงแล้วเลือก User.Read ในรายการ การอนุญาตเฉพาะนี้มีไว้สําหรับการเข้าถึงข้อมูลของผู้ใช้ที่ลงชื่อเข้าใช้จากจุดสิ้นสุด https://graph.microsoft.com/v1.0/me

    • เลือก เพิ่มสิทธิ์

      สกรีนช็อตที่แสดงบานหน้าต่างสิทธิ์ API ของแอปที่ลงทะเบียนด้วย Microsoft Entra ID บนพอร์ทัล Azure

เรียกใช้แอปพลิเคชัน

คุณสามารถลองเรียกใช้ Graph API บนแอปพลิเคชันที่คุณได้เรียกใช้จากแบบฝึกหัดก่อนหน้าได้

  1. เปิดเบราว์เซอร์ของคุณและนําทางไปยัง http://localhost:8080/msal4j-servlet-graph/ ถ้าคุณยังไม่ได้ลงชื่อเข้าใช้ คุณจะถูกเปลี่ยนเส้นทางเพื่อลงชื่อเข้าใช้ด้วย ID Microsoft Entra ในการลงชื่อเข้าใช้สําเร็จ คุณควรจะเห็นหน้าเพจดังที่แสดงในรูปต่อไปนี้

    สกรีนช็อตที่แสดงปุ่มเพื่อเรียกกราฟที่แสดงบนหน้าหลังจากลงชื่อเข้าใช้แอปพลิเคชันตัวอย่างเรียบร้อยแล้ว

  2. เลือก Call Graph เพื่อเรียกใช้ไปยังจุดสิ้นสุด /me ของ Microsoft Graph และดูรายละเอียดผู้ใช้ที่แสดง

ภาพรวมของรหัสสําหรับการเข้าถึง Microsoft Graph

คุณสามารถค้นหารหัสเพื่อเข้าถึง Microsoft Graph API ใน CallGraphServlet.java คลาสบริการภายใต้ไดเรกทอรี msal4j/callgraphwebapp/ ของโครงการตัวอย่างได้ ซึ่งจะกําหนดจุดสิ้นสุด /call_graph ในแอปพลิเคชัน ซึ่งทําให้การเรียกใช้ที่ได้รับอนุญาตไปยังจุดสิ้นสุด https://graph.microsoft.com/v1.0/me ของ Microsoft Graph API เพื่อดึงข้อมูลโปรไฟล์ของผู้ใช้ที่ลงชื่อเข้าใช้ ต่อไปนี้เป็นรายละเอียดเพิ่มเติมของรหัสการเข้าถึงกราฟ

  1. ใน ./src/main/resources/authentication.properties ไฟล์ ค่าของ aad.scopes ถูกตั้งค่าเป็นขอบเขต User.Read

    ขอบเขตจะบอกให้ Microsoft Entra ID ทราบถึงระดับการเข้าถึงที่แอปพลิเคชันกําลังร้องขอ และแมปไปยังสิทธิ์ในการลงทะเบียนแอป ตามขอบเขตที่ร้องขอ Microsoft Entra ID แสดงกล่องโต้ตอบความยินยอมแก่ผู้ใช้เมื่อลงชื่อเข้าใช้ ถ้าผู้ใช้ให้ความยินยอมในขอบเขตอย่างน้อยหนึ่งรายการ ขอบเขตเหล่านั้นจะถูกเข้ารหัสเป็นผลลัพธ์ access_token ส่งกลับในการตอบสนองการรับรองความถูกต้อง

  2. เมื่อผู้ใช้นําทางไปยัง /call_graphแอปพลิเคชันจะสร้างอินสแตนซ์ของ IGraphServiceClient (Microsoft Graph SDK Java) โดยส่งผ่านตามโทเค็นการเข้าถึงของผู้ใช้ที่ลงชื่อเข้าใช้ ไคลเอ็นต์ Graph จากที่นี่วางโทเค็นการเข้าถึงในส่วนหัวการอนุญาตของคําขอ จากนั้นแอปจะขอให้ไคลเอ็นต์ Graph เรียกใช้จุดสิ้นสุด /me ของ Microsoft Graph เพื่อให้รายละเอียดผลตอบแทนสําหรับผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบัน

    โค้ดต่อไปนี้คือทั้งหมดที่จําเป็นสําหรับนักพัฒนาแอปพลิเคชันในการเขียนเพื่อเข้าถึงจุดสิ้นสุด /me โดยมีเงื่อนไขว่าพวกเขามีโทเค็นการเข้าถึงที่ถูกต้องสําหรับ Graph Service ที่มีขอบเขต User.Read อยู่แล้ว

    //CallGraphServlet.java
    User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();