ใช้โฟลว์การให้สิทธิ์โดยนัยของ OAuth 2.0 ภายในพอร์ทัลของคุณ
หมายเหตุ
พอร์ทัล Power Apps คือ Power Pages โดยมีผลในวันที่ 12 ตุลาคม 2022 ข้อมูลเพิ่มเติม: Microsoft Power Pages มีให้ใช้งานทั่วไป (บล็อก)
ในไม่ช้าเราจะย้ายและรวมคู่มือพอร์ทัล Power Apps เข้ากับ คู่มือ Power Pages
คุณลักษณะนี้ช่วยให้ลูกค้าสามารถโทรจากฝั่งไคลเอ็นต์ไปยัง API ภายนอก และรักษาความปลอดภัยโดยใช้โฟลว์การให้สิทธิ์โดยนัยของ OAuth ได้ โดยมีจุดสิ้นสุดเพื่อรับโทเค็นการเข้าใช้ที่ปลอดภัย โทเค็นเหล่านี้จะมีข้อมูลประจำตัวของผู้ใช้ที่จะใช้สำหรับการตรวจสอบโฟลว์การให้สิทธิ์โดยนัยของ OAuth 2.0 ดังต่อไปนี้ของ API ภายนอก ข้อมูลประจำตัวของผู้ใช้ที่ลงชื่อเข้าใช้จะถูกส่งในลักษณะที่ปลอดภัยไปยังการเรียก AJAX ภายนอก ซึ่งช่วยให้นักพัฒนาส่งผ่านบริบทการรับรองความถูกต้องและจะช่วยให้ผู้ใช้รักษาความปลอดภัย API ของตนด้วย
โฟลว์การให้สิทธิ์โดยนัยของ OAuth 2.0 สนับสนุนจุดสิ้นสุด โทเค็น ที่ไคลเอ็นต์สามารถเรียกเพื่อรับโทเค็น ID
ใบรับรองที่กำหนดเอง
การใช้ใบรับรองเริ่มต้นสำหรับโฟลว์การให้สิทธิ์โดยนัยของ OAuth 2.0 มีการเลิกใช้แล้ว คุณจะต้องใช้ใบรับรองที่กำหนดเองในขณะที่ใช้ตำแหน่งข้อมูล OAuth 2.0 ใช้ ศูนย์จัดการ Power Platform เพื่ออัปโหลดใบรับรองที่กำหนดเอง หลังจากอัปโหลดใบรับรองที่กำหนดเองแล้ว คุณต้องปรับปรุงการตั้งค่าไซต์ดังนี้:
ไปที่ การตั้งค่าพอร์ทัล และเลือก การตั้งค่าไซต์
ในการสร้างการตั้งค่าใหม่ เลือก สร้าง
เพื่อแก้ไขเรกคอร์ดที่มีอยู่ เลือกการตั้งค่าไซต์ที่แสดงรายการในกริด
ระบุค่า:
- ชื่อ: CustomCertificates/ImplicitGrantflow
- เว็บไซต์: เว็บไซต์ที่เกี่ยวข้อง
- ค่า: คัดลอกรหัสประจำตัวของใบรับรองที่กำหนดเองที่มีการอัปโหลดจากหน้าจอ จัดการใบรับรองที่กำหนดเอง และวางที่นี่ ค่าจะระบุว่าใบรับรองใดที่จะถูกใช้สำหรับโฟลว์การให้สิทธิ์โดยนัย
เลือก บันทึกและปิด
รายละเอียดจุดสิ้นสุดโทเค็น
นอกจากนี้คุณยังสามารถรับโทเค็นโดยการส่งคำขอไปยังจุดสิ้นสุด /token
URL สำหรับจุดสิ้นสุดโทเค็นคือ: <portal_url>/_services/auth/token
จุดสิ้นสุดโทเค็นสนับสนุนพารามิเตอร์ต่อไปนี้:
พารามิเตอร์ | จำเป็นหรือไม่ | คำอธิบาย |
---|---|---|
client_id | ไม่ใช่ | สตริงที่ถูกส่งผ่านเมื่อทำการเรียกไปยังจุดสิ้นสุดที่อนุญาต คุณต้องให้แน่ใจว่ารหัสไคลเอนต์ได้รับการ ลงทะเบียนกับพอร์ทัลแล้ว มิฉะนั้น ข้อผิดพลาดจะแสดงขึ้น รหัสไคลเอนต์จะถูกเพิ่มในการอ้างสิทธิ์ในโทเค็นเป็นพารามิเตอร์ aud และ appid และไคลเอนต์สามารถใช้เพื่อตรวจสอบว่าโทเค็นที่ส่งคืนนั้นสำหรับแอปของรายการเหล่านั้นหรือไม่ความยาวสูงสุด 36 อักขระ รองรับเฉพาะอักขระตัวอักษรผสมตัวเลขและยัติภังค์ |
redirect_uri | ไม่ใช่ | URL ของพอร์ทัลที่สามารถส่งและรับการตอบสนองต่อการรับรองความถูกต้อง คุณจะต้องลงทะเบียนสำหรับ client_id เฉพาะที่ใช้ในการโทร และควรมีค่าที่เหมือนกันทุกประการกับที่ลงทะเบียนไว้ |
สถานะ | ไม่ใช่ | ค่าที่รวมอยู่ในการร้องขอที่ส่งคืนในการตอบสนองโทเค็น ซึ่งสามารถเป็นสตริงของเนื้อหาใด ๆ ที่คุณต้องการใช้ โดยปกติ ค่าที่ไม่ซ้ำกันที่สร้างขึ้นแบบสุ่มจะถูกใช้เพื่อป้องกันการโจมตีปลอมของการร้องขอข้ามไซต์ ความยาวสูงสุด 20 อักขระ |
nonce | ไม่ใช่ | ค่าสตริงที่ถูกส่งโดยไคลเอนต์ที่อยู่ในโทเค็น ID ที่เป็นผลลัพธ์เป็นการอ้างสิทธิ์ จากนั้นไคลเอนต์สามารถตรวจสอบค่านี้เพื่อลดปัญหาการโจมตีการเล่นโทเค็นซ้ำ ความยาวสูงสุด 20 อักขระ |
response_type | ไม่ใช่ | พารามิเตอร์นี้รองรับ token เป็นค่าเท่านั้น ซึ่งช่วยให้แอปของคุณสามารถรับโทเค็นการเข้าถึงจากจุดสิ้นสุดที่อนุญาตทันทีโดยไม่ต้องทำการร้องขอครั้งที่สองไปยังจุดสิ้นสุดที่อนุญาต |
หมายเหตุ
แม้ว่าพารามิเตอร์ client_id
, redirect_uri
, state
และ nonce
จะไม่จำเป็น แต่เราขอแนะนำให้ใช้เพื่อให้แน่ใจว่าการรวมของคุณมีความปลอดภัย
การตอบสนองที่เสร็จเรียบร้อยแล้ว
จุดสิ้นสุดโทเค็นส่งคืนสถานะและ expires_in เป็นส่วนหัวของการตอบรับ และโทเค็นในเนื้อความของฟอร์ม
การตอบสนองข้อผิดพลาด
ข้อผิดพลาดในจุดสิ้นสุดโทเค็นจะส่งคืนเป็นเอกสาร JSON ด้วยค่าต่อไปนี้:
- Error ID: รหัสเฉพาะของข้อผิดพลาด
- ข้อความแสดงข้อผิดพลาด: ข้อความแสดงข้อผิดพลาดเฉพาะที่สามารถช่วยคุณระบุสาเหตุของข้อผิดพลาดการรับรองความถูกต้อง
- รหัสความสัมพันธ์: GUID ที่ใช้สำหรับวัตถุประสงค์ในการดีบัก ถ้าคุณเปิดใช้งานการบันทึกการวินิจฉัย รหัสความสัมพันธ์จะแสดงอยู่ในล็อกข้อผิดพลาดของเซิร์ฟเวอร์
- การประทับเวลา: วันที่และเวลาที่ข้อผิดพลาดถูกสร้างขึ้น
ข้อความแสดงข้อผิดพลาดจะแสดงในภาษาเริ่มต้นของผู้ใช้ที่ลงชื่อเข้าใช้ ถ้าผู้ใช้ไม่ได้ลงชื่อเข้าใช้ หน้าการลงชื่อเข้าใช้จะแสดงสำหรับผู้ใช้เพื่อให้ลงชื่อเข้าใช้ ตัวอย่างเช่น การตอบสนองที่เป็นข้อผิดพลาดมีลักษณะดังนี้:
{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }
รายละเอียดจุดสิ้นสุดที่อนุญาต
หมายเหตุ
จุดสิ้นสุดที่อนุญาตไม่สนับสนุนอีกต่อไป ใช้คำขอ ส่ง ของจุดสิ้นสุดโทเค็นเพื่อรับโทเค็น ID]
URL สำหรับจุดสิ้นสุดที่อนุญาตคือ: <portal_url>/_services/auth/authorize
จุดสิ้นสุดที่อนุญาตสนับสนุนพารามิเตอร์ต่อไปนี้:
พารามิเตอร์ | จำเป็นหรือไม่ | คำอธิบาย |
---|---|---|
client_id | ได้ | สตริงที่ถูกส่งผ่านเมื่อทำการเรียกไปยังจุดสิ้นสุดที่อนุญาต คุณต้องให้แน่ใจว่ารหัสไคลเอนต์ได้รับการ ลงทะเบียนกับพอร์ทัลแล้ว มิฉะนั้น ข้อผิดพลาดจะแสดงขึ้น รหัสไคลเอนต์จะถูกเพิ่มในการอ้างสิทธิ์ในโทเค็นเป็นพารามิเตอร์ aud และ appid และไคลเอนต์สามารถใช้เพื่อตรวจสอบว่าโทเค็นที่ส่งคืนนั้นสำหรับแอปของรายการเหล่านั้นหรือไม่ความยาวสูงสุด 36 อักขระ รองรับเฉพาะอักขระตัวอักษรผสมตัวเลขและยัติภังค์ |
redirect_uri | ได้ | URL ของพอร์ทัลที่สามารถส่งและรับการตอบสนองต่อการรับรองความถูกต้อง คุณจะต้องลงทะเบียนสำหรับ client_id เฉพาะที่ใช้ในการโทร และควรมีค่าที่เหมือนกันทุกประการกับที่ลงทะเบียนไว้ |
สถานะ | ไม่ใช่ | ค่าที่รวมอยู่ในการร้องขอที่ส่งคืนในการตอบสนองโทเค็น ซึ่งสามารถเป็นสตริงของเนื้อหาใด ๆ ที่คุณต้องการใช้ โดยปกติ ค่าที่ไม่ซ้ำกันที่สร้างขึ้นแบบสุ่มจะถูกใช้เพื่อป้องกันการโจมตีปลอมของการร้องขอข้ามไซต์ ความยาวสูงสุด 20 อักขระ |
nonce | ไม่ใช่ | ค่าสตริงที่ถูกส่งโดยไคลเอนต์ที่อยู่ในโทเค็น ID ที่เป็นผลลัพธ์เป็นการอ้างสิทธิ์ จากนั้นไคลเอนต์สามารถตรวจสอบค่านี้เพื่อลดปัญหาการโจมตีการเล่นโทเค็นซ้ำ ความยาวสูงสุด 20 อักขระ |
response_type | ไม่ใช่ | พารามิเตอร์นี้รองรับ token เป็นค่าเท่านั้น ซึ่งช่วยให้แอปของคุณสามารถรับโทเค็นการเข้าถึงจากจุดสิ้นสุดที่อนุญาตทันทีโดยไม่ต้องทำการร้องขอครั้งที่สองไปยังจุดสิ้นสุดที่อนุญาต |
การตอบสนองที่เสร็จเรียบร้อยแล้ว
จุดสิ้นสุดที่อนุญาตส่งคืนค่าต่อไปนี้ใน URL การตอบสนองโดยเป็นส่วนย่อย:
- โทเค็น: โทเค็นจะถูกส่งคืนเป็น JSON Web Token (JWT) ที่ลงชื่อโดยคีย์ส่วนตัวของพอร์ทัลแบบดิจิทัล
- สถานะ: ถ้าพารามิเตอร์สถานะรวมอยู่ในคำขอ ค่าเดียวกันควรจะปรากฏในการตอบสนอง แอปควรตรวจสอบว่าค่าสถานะในการร้องขอและการตอบสนองนั้นเหมือนกัน
- expires_in: ระยะเวลาที่โทเค็นการเข้าถึงนั้นใช้ได้ (เป็นวินาที)
ตัวอย่างเช่น การตอบสนองที่เสร็จเรียบร้อยแล้วมีลักษณะดังนี้:
GET https://aadb2cplayground.azurewebsites.net/#token=eyJ0eXAiOiJKV1QiLCJhbGciOI1NisIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q&expires_in=3599&state=arbitrary_data_you_sent_earlier
การตอบสนองข้อผิดพลาด
ข้อผิดพลาดในจุดสิ้นสุดที่อนุญาตจะส่งคืนเป็นเอกสาร JSON ด้วยค่าต่อไปนี้:
- Error ID: รหัสเฉพาะของข้อผิดพลาด
- ข้อความแสดงข้อผิดพลาด: ข้อความแสดงข้อผิดพลาดเฉพาะที่สามารถช่วยคุณระบุสาเหตุของข้อผิดพลาดการรับรองความถูกต้อง
- รหัสความสัมพันธ์: GUID ที่ใช้สำหรับวัตถุประสงค์ในการดีบัก ถ้าคุณเปิดใช้งานการบันทึกการวินิจฉัย รหัสความสัมพันธ์จะแสดงอยู่ในล็อกข้อผิดพลาดของเซิร์ฟเวอร์
- การประทับเวลา: วันที่และเวลาที่ข้อผิดพลาดถูกสร้างขึ้น
ข้อความแสดงข้อผิดพลาดจะแสดงในภาษาเริ่มต้นของผู้ใช้ที่ลงชื่อเข้าใช้ ถ้าผู้ใช้ไม่ได้ลงชื่อเข้าใช้ หน้าการลงชื่อเข้าใช้จะแสดงสำหรับผู้ใช้เพื่อให้ลงชื่อเข้าใช้ ตัวอย่างเช่น การตอบสนองที่เป็นข้อผิดพลาดมีลักษณะดังนี้:
{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }
ตรวจสอบโทเค็น ID
เพียงแค่การรับโทเค็น ID ไม่เพียงพอที่จะรับรองความถูกต้องของผู้ใช้ คุณยังต้องตรวจสอบลายเซ็นของโทเค็น และตรวจสอบว่าการอ้างสิทธิ์ในโทเค็นเป็นไปตามข้อกำหนดของแอปของคุณอีกด้วย จุดสิ้นสุดโทเค็นสาธารณะมีคีย์สาธารณะของพอร์ทัล ซึ่งสามารถใช้ในการตรวจสอบลายเซ็นของโทเค็นที่มีในพอร์ทัล URL สำหรับจุดสิ้นสุดโทเค็นสาธารณะคือ: <portal_url>/_services/auth/publickey
เปิดหรือปิดกโฟลว์การให้สิทธิ์โดยนัย
โดยค่าเริ่มต้น โฟลว์การให้สิทธิ์โดยนัยจะถูกเปิดใช้งาน ถ้าคุณต้องการปิดโฟลว์การให้สิทธิ์โดยนัย ให้ตั้งค่าของการตั้งค่าไซต์ Connector/ImplicitGrantFlowEnabled เป็น เท็จ
ถ้าการตั้งค่าไซต์นี้ไม่พร้อมใช้งานในพอร์ทัลของคุณ คุณจะต้อง สร้างการตั้งค่าไซต์ใหม่ ด้วยค่าที่เหมาะสม
กำหนดค่าการมีผลบังคับใช้โทเค็น
โดยค่าเริ่มต้น โทเค็นจะใช้ได้เป็นเวลา 15 นาที ถ้าคุณต้องการเปลี่ยนแปลงการมีผลบังคับใช้ของโทเค็น ให้ตั้งค่าของการตั้งค่าไซต์ ImplicitGrantFlow/TokenExpirationTime เป็นค่าที่จำเป็น คุณจะต้องระบุค่าเป็นวินาที ค่าสูงสุดคือ 1 ชั่วโมง และค่าต่ำสุดคือ 1 นาที ถ้ามีค่าที่ระบุไม่ถูกต้อง (ตัวอย่างเช่น อักขระพยัญชนะผสมตัวเลข) ระบบจะใช้ค่าเริ่มต้นที่ 15 นาที ถ้าคุณระบุค่าที่มากกว่าค่าสูงสุด หรือต่ำกว่าค่าต่ำสุด ระบบจะใช้ค่าต่ำสุดและค่าสูงสุดตามลำดับตามค่าเริ่มต้น
ตัวอย่างเช่น เมื่อต้องการตั้งค่าการมีผลบังคับใช้โทเคนเป็น 30 นาที ให้ตั้งค่าของการตั้งค่าไซต์ ImplicitGrantFlow/TokenExpirationTime เป็น 1800 เมื่อต้องการตั้งค่าการมีผลบังคับใช้โทเคนเป็น 1 ชั่วโมง ให้ตั้งค่าของการตั้งค่าไซต์ ImplicitGrantFlow/TokenExpirationTime เป็น 3600
ลงทะเบียนรหัสไคลเอนต์สำหรับโฟลว์การให้สิทธิ์โดยนัย
คุณต้องลงทะเบียนรหัสไคลเอนต์ด้วยพอร์ทัลที่อนุญาตให้ใช้โฟลว์นี้ เมื่อต้องการลงทะเบียนรหัสไคลเอนต์ คุณต้องสร้างการตั้งค่าไซต์ต่อไปนี้:
การตั้งค่าไซต์ | Value |
---|---|
ImplicitGrantFlow/RegisteredClientId | ค่ารหัสไคลเอนต์ที่ถูกต้องที่ได้รับอนุญาตสำหรับพอร์ทัลนี้ ค่าต้องคั่นด้วยเครื่องหมายอัฒภาค และสามารถประกอบด้วยอักขระพยัญชนะผสมตัวเลขและเครื่องหมายยัติภังค์ ความยาวสูงสุด 36 อักขระ |
ImplicitGrantFlow/{ClientId}/RedirectUri | URI เปลี่ยนเส้นทางที่ถูกต้องที่ได้รับอนุญาตสำหรับรหัสไคลเอ็นต์เฉพาะ ค่าต้องคั่นด้วยเครื่องหมายอัฒภาค URL ที่ป้อนต้องเป็นของเว็บเพจของพอร์ทัลที่ใช้ได้ |
โค้ดตัวอย่าง
คุณสามารถใช้โค้ดตัวอย่างต่อไปนี้เพื่อเริ่มต้น โดยการใช้การให้สิทธิ์โดยนัย OAuth 2.0 กับ API ของพอร์ทัล Power Apps
ใช้โทเค็น Portal OAuth กับ Web API ภายนอก
ตัวอย่างนี้คือโครงการที่ใช้ ASP.NET และใช้ในการตรวจสอบโทเค็น ID ที่ออกโดยพอร์ทัล Power Apps สามารถพบตัวอย่างที่สมบูรณ์ได้ที่นี่: ใช้โทเค็น Portal OAuth กับ Web API ภายนอก
ตัวอย่างจุดสิ้นสุดโทเค็น
ตัวอย่างนี้แสดงวิธีที่คุณสามารถใช้ฟังก์ชัน getAuthenticationToken เพื่อดึงข้อมูลโทเค็น ID โดยใช้จุดสิ้นสุดโทเค็นในพอร์ทัล Power Apps สามารถพบตัวอย่างได้ที่นี่: ตัวอย่างจุดสิ้นสุดโทเค็น
หมายเหตุ
บอกให้เราทราบเกี่ยวกับภาษาที่คุณต้องการในคู่มือ ทำแบบสำรวจสั้นๆ (โปรดทราบว่าแบบสำรวจนี้เป็นภาษาอังกฤษ)
แบบสำรวจนี้ใช้เวลาทำประมาณเจ็ดนาที ไม่มีการเก็บข้อมูลส่วนบุคคล (คำชี้แจงสิทธิ์ส่วนบุคคล)