วิธีเพิ่มการอ้างสิทธิ์แบบกำหนดเองและดึงข้อมูลเหมือนกับเป็นส่วนหนึ่งของ access_token เมื่อขอบเขตไม่ใช่ Graph API ใน Azure AD

Aug 19 2020

ฉันได้สร้างเว็บแอปพลิเคชัน 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 ฉันจะบรรลุสิ่งเดียวกันได้อย่างไร?

คำตอบ

1 AllenWu Aug 20 2020 at 04:26

โปรดดูขั้นตอนต่อไปนี้ (คุณสามารถดำเนินการ 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 เราจะได้รับการอ้างสิทธิ์ที่กำหนดเอง