การรับรองความถูกต้อง

ใช้กับแอป Dynamics 365 เหล่านี้:
Human Resources

บทความนี้แสดงข้อมูลภาพรวมเกี่ยวกับวิธีการรับรองความถูกต้องของข้อมูลอินเทอร์เฟสแอปพลิเคชัน (API) ของ Microsoft Dynamics 365 Human Resources

ภาพรวม

API ข้อมูลสำหรับทรัพยากรบุคคลเป็นการดำเนินการ OData สำหรับข้อมูลเพิ่มเติม ให้ดูที่ เปิดโพรโทคอลข้อมูล (OData)

ใบสมัครของคุณต้องรับรองความถูกต้องเป็นผู้เรียกที่ได้รับอนุญาตก่อนที่ API จะมีการร้องขอการบริการจากแอปพลิเคชันของคุณ

พื้นฐาน

เมื่อต้องการเรียก API ข้อมูลแอปพลิเคชันของคุณจะต้องได้รับการเข้าถึงจากแพลตฟอร์ม Microsoft identity โทเคนการเข้าถึงประกอบด้วยข้อมูลเกี่ยวกับใบสมัครของคุณและสิทธิ์การได้รับอนุญาตที่มีการเรียกทรัพยากรในทรัพยากรบุคคล

โทเคนการเข้าถึง

โทเคนการเข้าถึงที่ออกโดยแพลตฟอร์มข้อมูลเฉพาะของ Microsoft คือ base64 –การเข้ารหัสเว็บโทเคนโทเคน (JWTs) ของ JavaScript Object Notation (JSON) มีข้อมูล (การอ้างสิทธิ์) ที่ API ข้อมูล (และเว็บ APIs อื่นๆที่มีการรักษาความปลอดภัยโดยแพลตฟอร์ม Microsoft identity) ใช้เพื่อตรวจสอบความถูกต้องของผู้เรียกและตรวจสอบให้แน่ใจว่าผู้เรียกมีสิทธิ์ที่ถูกต้องในการดำเนินการที่ผู้ใช้เหล่านั้นกำลังร้องขอ ในระหว่างการเรียกคุณสามารถรักษาโทเคนการเข้าถึงเป็นแบบทึบ คุณควรส่งโทเคนการเข้าถึงไปยังช่องทางที่ปลอดภัย เช่น ความปลอดภัยการขนส่งเลเยอร์ (TLS) และความปลอดภัยของโพรโทคอลการโอนถ่ายข้อมูลแบบ Hypertext (HTTPS)

ต่อไปนี้เป็นตัวอย่างของโทเคนการเข้าถึงที่ออกโดยแพลตฟอร์มข้อมูลเฉพาะของ Microsoft

EwAoA8l6BAAU7p9QDpi/D7xJLwsTgCg3TskyTaQAAXu71AU9f4aS4rOK5xoO/SU5HZKSXtCsDe0Pj7uSc5Ug008qTI+a9M1tBeKoTs7tHzhJNSKgk7pm5e8d3oGWXX5shyOG3cKSqgfwuNDnmmPDNDivwmi9kmKqWIC9OQRf8InpYXH7NdUYNwN+jljffvNTewdZz42VPrvqoMH7hSxiG7A1h8leOv4F3Ek/oeJX6U8nnL9nJ5pHLVuPWD0aNnTPTJD8Y4oQTp5zLhDIIfaJCaGcQperULVF7K6yX8MhHxIBwek418rKIp11om0SWBXOYSGOM0rNNN59qNiKwLNK+MPUf7ObcRBN5I5vg8jB7IMoz66jrNmT2uiWCyI8MmYDZgAACPoaZ9REyqke+AE1/x1ZX0w7OamUexKF8YGZiw+cDpT/BP1GsONnwI4a8M7HsBtDgZPRd6/Hfqlq3HE2xLuhYX8bAc1MUr0gP9KuH6HDQNlIV4KaRZWxyRo1wmKHOF5G5wTHrtxg8tnXylMc1PKOtaXIU4JJZ1l4x/7FwhPmg9M86PBPWr5zwUj2CVXC7wWlL/6M89Mlh8yXESMO3AIuAmEMKjqauPrgi9hAdI2oqnLZWCRL9gcHBida1y0DTXQhcwMv1ORrk65VFHtVgYAegrxu3NDoJiDyVaPZxDwTYRGjPII3va8GALAMVy5xou2ikzRvJjW7Gm3XoaqJCTCExN4m5i/Dqc81Gr4uT7OaeypYTUjnwCh7aMhsOTDJehefzjXhlkn//2eik+NivKx/BTJBEdT6MR97Wh/ns/VcK7QTmbjwbU2cwLngT7Ylq+uzhx54R9JMaSLhnw+/nIrcVkG77Hi3neShKeZmnl5DC9PuwIbtNvVge3Q+V0ws2zsL3z7ndz4tTMYFdvR/XbrnbEErTDLWrV6Lc3JHQMs0bYUyTBg5dThwCiuZ1evaT6BlMMLuSCVxdBGzXTBcvGwihFzZbyNoX+52DS5x+RbIEvd6KWOpQ6Ni+1GAawHDdNUiQTQFXRxLSHfc9fh7hE4qcD7PqHGsykYj7A0XqHCjbKKgWSkcAg==

เมื่อต้องการเรียก API ข้อมูล คุณต้องแนบโทเคนการเข้าถึงเป็นโทเคนผู้ถือสิทธิ์ไปยังหัวข้อการตรวจสอบในการร้องขอ HTTP ของคุณ นี่คือตัวอย่าง

HTTP/1.1
Authorization: Bearer EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==
Host: https://{cluster}.hr.talent.dynamics.com
GET https://{cluster}.hr.talent.dynamics.com/namespaces/{namespace_guid}/data/JobTypes

ลงทะเบียนแอปพลิเคชันใหม่โดยใช้พอร์ทัล Azure

  1. ล็อกอินไปยัง พอร์ทัล Microsoft Azure ที่มีบัญชีที่ทำงานหรือโรงเรียนหรือบัญชี Microsoft ส่วนบุคคล

  2. ถ้าบัญชีของคุณให้สิทธิการเข้าถึงแก่ผู้เช่ามากกว่าหนึ่งราย ให้เลือกบัญชีของคุณในมุมด้านขวาบน และตั้งค่ารอบของพอร์ทัลไปยังผู้เช่า Microsoft Entra ที่คุณต้องการ

  3. ในบานหน้าต่างด้านซ้าย ให้เลือกบริการ Microsoft Entra ID แล้วเลือก การลงทะเบียนแอป > ลงทะเบียนใหม่

  4. เมื่อหน้าลงทะเบียนแอปพลิเคชัน ปรากฏขึ้น ให้ป้อนข้อมูลการลงทะเบียนของแอปพลิเคชันของคุณ:

    • ชื่อ: ให้ป้อนชื่อที่มีความหมายของแอปพลิเคชันที่จะแสดงต่อผู้ใช้แอปพลิเคชัน

    • ชนิดบัญชีที่ได้รับการสนับสนุน: เลือกชนิดบัญชีที่แอปของคุณควรสนับสนุน

      ชนิดบัญชีที่ได้รับการสนับสนุน คำอธิบาย
      บัญชีในไดเรกทอรีขององค์กรนี้เท่านั้น เลือกตัวเลือกนี้ถ้าคุณกำลังสร้างแอปพลิเคชันสายธุรกิจ ตัวเลือกนี้จะไม่พร้อมใช้งานจนกว่าคุณจะลงทะเบียนแอปในไดเรกทอรี

      ตัวเลือกนี้จะถูกแมปกับ ผู้เช่า Microsoft Entra คนเดียวเท่านั้น

      ตัวเลือกนี้เป็นตัวเลือกเริ่มต้นยกเว้นว่าคุณกำลังลงทะเบียนแอปพลิเคภายนอกไดเรกทอรี ในกรณีนี้ ตัวเลือกเริ่มต้นคือผู้เช่า Microsoft Entra หลายรายและบัญชีส่วนบุคคล Microsoft

      บัญชีในไดเรกทอรีขององค์กรใดๆ เลือกตัวเลือกนี้เพื่อกำหนดเป้าหมายลูกค้าธุรกิจและการศึกษาทั้งหมด

      ตัวเลือกนี้จะถูกแมปกับ ผู้เช่า Microsoft Entra มากกว่าหนึ่งคนเท่านั้น

      ถ้าคุณลงทะเบียนแอป ผู้เช่า Microsoft Entra รายเดียวเท่านั้น คุณสามารถใช้เบลด การรับรองความถูกต้อง เพื่ออัปเดตเป็น ผู้เช่า Microsoft Entra มากกว่าหนึ่งรายเท่านั้น และกลับไปยัง ผู้เช่า Microsoft Entra รายเดียวเท่านั้น

      บัญชีในไดเรกทอรีขององค์กรและบัญชี Microsoft ส่วนบุคคล เลือกตัวเลือกนี้เพื่อกำหนดเป้าหมายของกลุ่มลูกค้าที่กว้างที่สุด

      ตัวเลือกนี้ถูกแมปโดย ผู้เช่า Microsoft Entra หลายรายเท่านั้นและบัญชีส่วนบุคคล Microsoft

      ถ้าคุณลงทะเบียนแอป ผู้เช่า Microsoft Entra หลายรายและบัญชี Microsoft ส่วนบุคคล คุณจะไม่สามารถเปลี่ยนการตั้งค่านี้ในอินเทอร์เฟสผู้ใช้ (UI) ได้ ในทางกลับกัน คุณต้องใช้ตัวแก้ไขรายการแอปพลิเคชันเพื่อเปลี่ยนชนิดบัญชีที่ได้รับการสนับสนุน

    • URI การเปลี่ยนเส้นทาง (ตัวเลือก) – เลือกชนิดของแอปที่คุณกำลังสร้าง เว็บ หรือ ไคลเอ็นต์สาธารณะ (บนมือถือและเดสก์ทอป) ป้อน URI ที่เปลี่ยนเส้นทาง (หรือตอบกลับ URL) สำหรับแอปพลิเคชัน

      • สำหรับแอปเว็บ ระบุ URL พื้นฐานของแอป ตัวอย่างเช่น http://localhost:31544 อาจเป็น URL สำหรับเว็บแอปพลิเคชันที่ดำเนินการบนเครื่องเฉพาะที่ของคุณ จากนั้น ผู้ใช้ใช้ URL นี้เพื่อล็อกอินไปยังแอปพลิเคชันไคลเอนต์ของเว็บ
      • สำหรับแอปพลิเคชันไคลเอนต์สาธารณะให้ URL ที่ Microsoft Entra ใช้เพื่อส่งคืนการตอบสนองโทเคน ป้อนค่าที่เกี่ยวข้องกับแอปของคุณโดยเฉพาะเช่นmyapp://auth

      เมื่อต้องการดูตัวอย่างเฉพาะสำหรับ web apps หรือแอปพลิเคชันดังเดิม ให้ดูที่ quickstarts ใน แพลตฟอร์ม Microsoft identity (Microsoft Entra ID เดิมสำหรับนักพัฒนา)

  5. ภายใต้ สิทธิ์ของ API ให้เลือก เพิ่มสิทธิการได้รับอนุญาต จากนั้น บนแท็บ API ที่องค์กรของฉันใช้ ค้นหา Dynamics 365 Human Resources และเพิ่มสิทธิ์ user_impersonation ลงในแอปของคุณ รหัสแอปพลิเคชันสำหรับทรัพยากรบุคคลคือ f9be0c49-aa22-4ec6-911a-c5da515226ff ใช้รหัสนี้เพื่อให้แน่ใจว่าคุณได้เลือกแอปพลิเคชันที่ถูกต้อง

  6. เลือก การลงทะเบียน

    กำลังลงทะเบียนแอปใหม่ในพอร์ทัล Azure

Microsoft Entra กำหนดรหัสแอปพลิเคชันเฉพาะ (รหัสไคลเอนต์) ให้กับแอปของคุณและ นำคุณไปยังหน้า ภาพรวม สำหรับแอปของคุณ เพื่อเพิ่มความสามารถไปยังแอปของคุณ คุณสามารถเลือกการตั้งค่าคอนฟิกอื่นๆ เช่น ตัวเลือกสำหรับการสร้างแบรนด์ และสำหรับใบรับรองและความลับ

การดึงข้อมูลโทเคนการเข้าถึง

ข้อกำหนดในการดึงข้อมูลโทเคนการเข้าถึงสำหรับการเรียก API ข้อมูลทรัพยากรบุคคลจะขึ้นอยู่กับเทคโนโลยีที่คุณกำลังใช้ในการพัฒนาแอปพลิเคชันไคลเอนต์ของคุณ ตัวอย่างเช่น คุณอาจ กำลังทดสอบกับยูทิลิตี้ การพัฒนาแอปพลิเคชันคอนโซล C# หรือการบริการเว็บ หรือการสร้างไคลเอนต์ javascript/TypeScript

ตัวอย่างแอปพลิเคชันไคลเอนต์ C#:

using System;
using System.Net.Http;
using System.Threading.Tasks;

// requires appropriate NuGet package references in the project
using Microsoft.IdentityModel.Clients.ActiveDirectory;

namespace TalentODataPoC
{
    class Program
    {
        // prereq: This client app must be registered in Microsoft Entra ID. The app must be
        // registered as requiring permission to the Dynamics 365 for Talent API (with the Dynamics
        // HCM Workload delegated permission).
        static string clientId = "4fc703ef-672c-4e2c-813f-2f9d29d726db"; // This value should be obtained from Microsoft Entra and must match your registered app
        static string talentNamespaceUri = "";

        public static async Task CallTalentODataService()
        {
            // authority URI
            UriBuilder uri = new UriBuilder("https://login.microsoftonline.com/common");
            AuthenticationContext authenticationContext = new AuthenticationContext(uri.ToString());

            // request token for the resource we want to access (Human Resources). This will authenticate
            // the user and return an access token containing claims for the authenticated user.
            var authResult = await authenticationContext.AcquireTokenAsync(
                "http://hr.talent.dynamics.com", /*Talent app id or resource URI*/
                clientId, /*registered client app id*/
                new Uri("https://localhost"), /*redirect URI, as registered in your Microsoft Entra app*/
                new PlatformParameters(PromptBehavior.SelectAccount));

            // create the authorization header, which needs to be passed in the Header of the HTTP Requests to Talent
            string authHeader = authResult.CreateAuthorizationHeader();

            // HINT: paste the JWT into https://jwt.ms to decode and view it
            Console.Write("authHeader: ");
            Console.WriteLine(authHeader);
            Console.WriteLine();

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Add("Authorization", authHeader);

            string s;

            Console.Write("Talent Namespace URI: ");
            Console.WriteLine(talentNamespaceUri);
            Console.WriteLine();

            // call the OData service to get JobType data from Talent
            var resultOdata = await client.GetAsync(talentNamespaceUri + "data/JobTypes");
            s = await resultOdata.Content.ReadAsStringAsync();
            Console.WriteLine(s);
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            Console.WriteLine();

            // if the user passes in a single parameter, assume it is the namespaceUri for Talent
            if (args.Length == 1)
            {
                talentNamespaceUri = args[0];
            } else if (args.Length == 0)
            {
                Console.WriteLine("Enter Talent URL including namespace.");
                Console.WriteLine("Example: https://aos-rts-sf-21454f9d830-prod-westus2.hr.talent.dynamics.com/namespaces/2328af1a-2d45-4c6a-99e3-12a4c3867dcf/");
                Console.Write("> ");
                talentNamespaceUri = Console.ReadLine();
                if (!talentNamespaceUri.EndsWith("/"))
                {
                    talentNamespaceUri = talentNamespaceUri + "/";
                }
            } else
            {
                Console.WriteLine("Unexpected Arguments");
                System.Environment.Exit(1);
            }

            Task t = Program.CallTalentODataService();
            t.Wait();
        }
    }
}

หลังจากที่คุณได้ดึงโทเคนการเข้าถึงแล้ว คุณจะผ่านโทเคนในส่วนหัวของการตรวจสอบเป็นโทเคนผู้ถือสิทธิ์โดยมีคำขอแต่ละรายการที่คุณจะส่งไปยัง API ข้อมูลดังที่อธิบายไว้ข้างต้น