DefaultAzureCredential: ห้ามการเข้าถึงกราฟด้วย VisualStudio Code Credential

ฉันกำลังพยายามอ่านคุณสมบัติผู้ใช้จากกราฟ ms ภายในฟังก์ชัน Azure สำหรับการตรวจสอบสิทธิ์ ฉันใช้คลาส DefaultAzureCredential จาก Azure.Identity

การเข้าถึงด้วย Shared Token Cache Credential ในเครื่องและ Managed Identity Credential ใน Azure นั้นไม่มีปัญหา! ฉันต้องการใช้ Visual Studio Code Credential แต่ฉันได้รับ Authorization_RequestDenied! สิทธิ์ไม่เพียงพอที่จะดำเนินการข้อความแสดงข้อผิดพลาดให้เสร็จสิ้นเมื่อฉันเรียกใช้กราฟ API

ดูเหมือนว่าปัญหาจะเป็นโทเค็นการเข้าถึงที่ฉันได้รับพร้อมกับ VS Code Credential บัญชีผู้ใช้เป็นบัญชีเดียวกับที่ฉันใช้กับ Shared Token Cache Credential

มีความคิดอะไรบ้าง? ขอบคุณ

รหัส:

DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions();
options.VisualStudioCodeTenantId = Environment.GetEnvironmentVariable("Debug_VisualStudioCodeTenantId");


var credential = new DefaultAzureCredential(options);
token = credential.GetToken(
                    new Azure.Core.TokenRequestContext(
                        new[] { "https://graph.microsoft.com/.default" }));

accessToken = token.Token;


var graphServiceClient = new GraphServiceClient(
            new DelegateAuthenticationProvider((requestMessage) =>
            {
                requestMessage
                .Headers
                .Authorization = new AuthenticationHeaderValue("bearer", accessToken);

                return Task.CompletedTask;
            }));

var users = await graphServiceClient.Users.Request().GetAsync(); // throw the forbidden exception

ข้อยกเว้น: รหัส: Authorization_RequestDenied\r\nข้อความ: สิทธิ์ไม่เพียงพอที่จะดำเนินการให้เสร็จสิ้น\r\nข้อผิดพลาดภายใน:\r\n\tข้อมูลเพิ่มเติม:\r\n\tวันที่: 2021-04-20T08: 02:23\r\n\trequest-id: ...\r\n\tclient-request-id: ...\r\nClientRequestId: ...\r\n


comment
คุณสามารถตรวจสอบโทเค็นได้ที่เช่น jwt.ms? ตรวจสอบให้แน่ใจว่าโทเค็นมีทุกสิ่งที่ควรจะเป็น เช่น การอ้างสิทธิ์ scp ควรมีขอบเขตที่จำเป็น   -  person juunas    schedule 20.04.2021
comment
ฉันเพิ่งเคยใช้โทเค็นในการตรวจสอบสิทธิ์ ดังนั้นฉันจึงไม่แน่ใจว่าโทเค็นควรมีอะไรบ้าง แท็ก scp มีอีเมล Mail.ReadWrite Mail.Send โปรไฟล์ openid Tasks.ReadWrite ปัญหาอาจเป็นได้ว่าฉันต้องลงทะเบียนรหัส VS ใน Azure หรืออะไรทำนองนั้น   -  person Jonas    schedule 20.04.2021
comment
ดูเหมือนว่าอาจขาดขอบเขตที่จำเป็นไป ปัญหาคือบริการหลักที่ VS Code ใช้ (การลงทะเบียนแอป) ไม่ต้องการสิ่งนั้น นี่เป็นปัญหาทั่วไปในการใช้ข้อมูลรับรองเหล่านี้ในเครื่อง :\ คุณอาจต้องลองประเภทข้อมูลรับรองอื่น หรือใช้การตรวจสอบข้อมูลรับรองไคลเอนต์ (ความลับ / ใบรับรอง)   -  person juunas    schedule 20.04.2021
comment
ช่างน่าเสียดาย แต่ขอขอบคุณสำหรับความช่วยเหลือของคุณ   -  person Jonas    schedule 20.04.2021
comment
ฉันเดาว่าคุณสามารถลอง https://graph.microsoft.com/User.Read.All เป็นขอบเขตแทน .default ได้ นั่นอาจจบลงด้วยข้อผิดพลาด:\   -  person juunas    schedule 20.04.2021
comment
ใช่ ตามที่ @juunas พูดให้ลองเพิ่ม User.Read.All คุณไม่มี การอนุญาตที่จำเป็นในโทเค็นของคุณและฉันคิดว่านั่นคือปัญหา   -  person Shiva Keshav Varma    schedule 20.04.2021
comment
เมื่อฉันทำอย่างนั้น ฉันได้รับข้อความยกเว้นนี้: การรับรองความถูกต้อง VisualStudioCodeCredential ล้มเหลว: AADSTS65002: ความยินยอมระหว่างแอปพลิเคชันบุคคลที่หนึ่ง '...' และทรัพยากรของบุคคลที่หนึ่ง '...' จะต้องได้รับการกำหนดค่าผ่านการอนุญาตล่วงหน้า - แอปพลิเคชันที่ Microsoft เป็นเจ้าของและดำเนินการจะต้องได้รับการอนุมัติ จากเจ้าของ API ก่อนที่จะขอโทเค็นสำหรับ API นั้น   -  person Jonas    schedule 20.04.2021


คำตอบ (1)


หลังจากตรวจสอบโทเค็นที่ส่งคืนโดย VS Code แล้ว ดูเหมือนว่าจะขาดการอนุญาต/ขอบเขตที่จำเป็น เอกสารระบุว่าต้องมีรายการใดรายการหนึ่งต่อไปนี้เพื่อแสดงรายการผู้ใช้:

User.ReadBasic.All, User.Read.All, User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All, Directory.AccessAsUser.All

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

ดังนั้นข้อมูลรับรอง VS Code ในขณะนี้ดูเหมือนจะใช้งานไม่ได้เพื่อจุดประสงค์นี้ คุณจะต้องมีข้อมูลรับรองอื่นหรืออาจใช้ข้อมูลรับรองลับไคลเอ็นต์/ใบรับรองกับการลงทะเบียนแอปของคุณเอง

person juunas    schedule 20.04.2021
comment
ขอบคุณสำหรับความช่วยเหลืออย่างกว้างขวางของคุณ สำหรับการดีบักในเครื่อง Shared Token Cache Credential จะใช้เป็นทางเลือกแทน น่าเสียดายที่ Visual Studio Credential ใช้งานไม่ได้ - person Jonas; 20.04.2021