วิธีเพิ่มการอ้างสิทธิ์แบบกำหนดเองและดึงข้อมูลเหมือนกับเป็นส่วนหนึ่งของ access_token เมื่อขอบเขตไม่ใช่ Graph API ใน Azure AD
ฉันได้สร้างเว็บแอปพลิเคชัน Azure AD แล้ว ตอนนี้ฉันได้รับ access_token โดยใช้ API ต่อไปนี้
โพสต์ https://login.microsoftonline.com/{Directory (tenant) ID }/oauth2/v2.0/token
password:pass
client_id:id
resource:https://graph.microsoft.com
grant_type:password
client_secret:secret
sername:userName
scope: https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXX/.default
คำตอบดูเหมือนว่า
"token_type": "Bearer",
"scope": "https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXXX/myTestRole https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXXXX/user_impersonation https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXXX/.default",
"expires_in": 3599,
"ext_expires_in": 3599, "access_token": "acessToken"
ตอนนี้ฉันกำลังส่ง access_token ไปยังแอปพลิเคชันของบุคคลที่สามซึ่งได้รับการกำหนดค่าด้วยไคลเอนต์ Azure AD เดียวกัน ขณะนี้บุคคลที่สามคาดว่าจะมีการอ้างสิทธิ์ที่กำหนดเองโดยใช้ชื่อ"policy":"readwrite"
นี้เพื่อส่งต่อเป็นส่วนหนึ่งของ access_token ฉันจะบรรลุสิ่งเดียวกันได้อย่างไร?
คำตอบ
โปรดดูขั้นตอนต่อไปนี้ (คุณสามารถดำเนินการ Microsoft Graph ในMicrosoft Graph Explorerเพื่อประหยัดเวลา):
สร้าง extensionProperty (คุณสามารถใช้แอปพลิเคชัน Azure AD ที่สร้างขึ้นใหม่ได้ที่นี่):
Post https://graph.microsoft.com/v1.0/applications/{object id of the Azure AD application}/extensionProperties
{"name":"policy","dataType":"string","targetObjects":["User"]}
extension_{client id of the Azure AD application}_policy
มันจะสร้างสถานที่ให้บริการส่วนต่อขยายที่มีชื่อว่า
ประการที่สองคุณสามารถอัปเดตคุณสมบัติส่วนขยายสำหรับบัญชีของคุณ:
Patch https://graph.microsoft.com/v1.0/me
{"extension_6d8190fbf1fe4bc38a5a145520221989_policy":"readwrite"}
จากนั้นสร้าง ClaimMappingPolicy :
Post https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies
{"definition":["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\": [{\"Source\":\"user\",\"ExtensionID\":\"extension_6d8190fbf1fe4bc38a5a145520221989_policy\",\"JwtClaimType\":\"policy\"}]}}"],"displayName":"ExtraClaimsAllen1Example","isOrganizationDefault":true}
กำหนด ClaimMappingPolicyให้กับ servicePrincipal โปรดทราบว่า servicePrincipal ในที่นี้คือแอปพลิเคชันระดับองค์กรซึ่งแสดงถึงแอปพลิเคชันบุคคลที่สามของคุณ 0a7c94a0-0c4e-4f95-ba06-XXXX
ในกรณีของคุณมันเป็น
Post https://graph.microsoft.com/v1.0/servicePrincipals/{obeject id of the servicePrincipal which represents your third party application}/claimsMappingPolicies/$ref
{"@odata.id":"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/{policy id from the previous step}"}
คุณสามารถค้นหา servicePrincipal ได้จากAzure Portal -> Azure Active Directory -> การลงทะเบียนแอป -> ค้นหาแอป Azure AD บุคคลที่สามของคุณ -> ภาพรวม -> คลิกที่ชื่อของบริการหลักที่เกี่ยวข้อง


ตอนนี้กลับไปที่ไฟล์รายการของแอป Azure AD บุคคลที่สาม ตั้งค่าacceptMappedClaims
เป็นจริงและaccessTokenAcceptedVersion
เป็น 2

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