สร้างการลงทะเบียนแอป Microsoft Entra ที่ต่ำสุดพิเศษสำหรับ node Microsoft SharePoint ใน n8n โดยใช้อนุญาตที่ชัดเจนและคัดลอกคำสั่ง Azure CLI
หน้านี้ใช้ผู้เช่าใหม่ของ Microsoft 365 สำหรับการลงทะเบียนแอป Microsoft SharePoint สามารถลงชื่อเข้าสู่ระบบโดยใช้ Microsoft Entra Service Principal credentials มันให้คุณอนุญาตให้ปลั๊กที่แสดงให้เห็นที่จะติดสคริปต์ที่จะทำงานและข้อเสนอต่อเว็บไซต์ที่ตั้งค่าส่วนใหญ่หายไป
มันเขียนไว้สำหรับผู้ดูแลระบบที่ยอมรับและสร้างการลงทะเบียนแอป หากทีมความปลอดภัยของคุณตรวจสอบคำขออนุญาตส่วนที่ชัดเจนและตารางอนุญาตเป็นสิ่งที่พวกเขาต้องการที่จะเห็น
ปุ่ม Microsoft SharePoint สนับสนุนการเข้าถึง app-only จากรุ่น 2 ของปุ่ม
ก่อนที่คุณเริ่ม
คุณต้องการ:
- ที่ อะซูอรี CLI ติดตั้ง, เข้าร่วมกับ
az login --tenant <your-tenant-id>. - บัญชีที่สามารถสร้างการลงทะเบียนแอปและให้ความยินยอมของผู้ดูแลระบบ ความยินยอมของผู้ดูแลระบบต้องการบทบาทของผู้ดูแลระบบระดับโลกหรือผู้ดูแลระบบบทบาทพิเศษ
- ที่อยู่ของแต่ละเว็บไซต์ SharePoint ที่การทำงานจะใช้เช่น
https://contoso.sharepoint.com/sites/mysite.
เลือกระดับอนุญาต
ทั้งสามตัวเลือกคือ Microsoft Graph Application การอนุญาตที่ได้รับอนุญาตด้วยชื่อเดียวกันเป็นอนุญาตที่แตกต่างกันและไม่ใช้สำหรับการเข้าถึงแอปเท่านั้น
| อนุญาต | สิ่งที่แอปสามารถเข้าถึงได้ | เลือกมันเมื่อ |
|---|---|---|
Sites.Selected |
เท่านั้นเว็บไซต์ที่คุณให้มันด้วยบทบาทที่คุณให้แต่ละ | ปพลิเคชันเริ่มต้นด้วยการเข้าถึงอะไรดังนั้นทีมรักษาความปลอดภัยสามารถอนุมัติได้โดยไม่ต้องอนุมัติผู้เช่าทั้งหมด |
Sites.Read.All |
ทุกเว็บไซต์ในผู้เช่าอ่านเพียง | workflow อ่านจากเว็บไซต์จำนวนมากหรือคุณต้องการค้นหาเว็บไซต์ของ node |
Sites.ReadWrite.All |
ทุกเว็บไซต์ในผู้เช่าอ่านและเขียน | workflow เขียนไปยังเว็บไซต์จำนวนมากหรือคุณต้องการค้นหาเว็บไซต์ของ node |
ด้วย Sites.Selected อ่านและเขียนไม่ใช่ตัวเลือกที่ชัดเจน การลงทะเบียนแอปต้องการอนุญาตเดียวและคุณตัดสินใจที่จะอ่านหรือเขียนตามเว็บไซต์เมื่อคุณ ให้แอปเข้าถึงเว็บไซต์ .
ค้นหาเว็บไซต์ (น็อต) From List ตัวเลือกสำหรับ Site field) ต้องใช้ใบอนุญาตการอ่านที่ครอบคลุมด้วย Sites.Selected , ตั้งค่า Site ฟิลด์ถึง By URL หรือ By ID แทนไม่จำเป็นต้องค้นหา
การอนุญาตแสดงให้เห็น fragments
เก็บสิ่งนี้เป็น n8n-sharepoint-permissions.json มันขอให้ Sites.Selected จาก Microsoft Graph และไม่มีอะไรอื่น:
[
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "883ea226-0bf2-4a8f-9f9d-92c9162a727d",
"type": "Role"
}
]
}
]
สำหรับใบอนุญาตที่ครอบคลุมแทนแทนการแทนที่ id ราคา :
| ใบอนุญาตการใช้งาน | id ราคา |
type |
|---|---|---|
Sites.Selected |
883ea226-0bf2-4a8f-9f9d-92c9162a727d |
Role |
Sites.Read.All |
332a536c-c7ef-4017-ab91-336970924f0d |
Role |
Sites.ReadWrite.All |
9492366f-7969-46a4-8d15-ed1a20078fff |
Role |
resourceAppId เป็น Microsoft Graph. the SharePoint node calls Microsoft Graph, so a fragment that targets the older SharePoint Online API ( 00000003-0000-0ff1-ce00-000000000000 ) ให้แอพลิเคชันอะไรที่ node สามารถใช้ได้ type เป็นเสมอ Role: Role หมายถึงใบอนุญาตการสมัคร Scope ซึ่งหมายความว่าหนึ่งที่ได้รับอนุญาต
ใช้ไฟล์ในสองวิธี:
- Azure CLI : ผ่านมันเป็น
--required-resource-accesses @n8n-sharepoint-permissions.jsonเช่นเดียวกับสคริปต์ด้านล่าง - ไมโครซอฟต์แวร์เข้าศูนย์ admin (Microsoft Entra admin center) : เปิดการลงทะเบียนแอปของคุณเลือก Manifest , และใส่แร่เป็นค่าของ
requiredResourceAccess.
ให้การลงทะเบียนแอปด้วย Azure CLI
การเรียกใช้คำสั่งเหล่านี้จากโฟลเดอร์ n8n-sharepoint-permissions.json พวกเขาสร้างการลงทะเบียนแอปและ Client Secret แล้วให้ความยินยอมของผู้ดูแลระบบซึ่งยังสร้างหลักการบริการของแอป:
# Create the app registration for this tenant only, with the permission already requested
APP_ID=$(az ad app create \
--display-name "n8n SharePoint" \
--sign-in-audience AzureADMyOrg \
--required-resource-accesses @n8n-sharepoint-permissions.json \
--query appId --output tsv)
# Create a client secret valid for one year, and print it once
az ad app credential reset \
--id "$APP_ID" \
--display-name "n8n credential" \
--years 1 \
--query password --output tsv
# Grant admin consent. This also creates the app's service principal in the tenant
az ad app permission admin-consent --id "$APP_ID"
# Print the two IDs you enter in n8n
echo "Application (client) ID: $APP_ID"
echo "Directory (tenant) ID: $(az account show --query tenantId --output tsv)"
คัดลอกความลับจากการส่งออกของคำสั่งที่สอง Microsoft แสดงมันเพียงครั้งเดียว
สิ่งบางอย่างที่จะมองเห็น:
- ในการลงทะเบียนแอปที่มีอยู่เพิ่ม
--appendถึงaz ad app credential reset. ไม่มีมันคำสั่งจะลบความลับและใบรับรองที่อยู่ในแอปและบริการใด ๆ ที่ใช้พวกเขาจะหยุดทำงาน - ไม่ทำงาน
az ad sp createก่อนที่จะให้ความยินยอมaz ad app permission admin-consentสร้างบริการหลักของตัวเอง หากหนึ่งมีอยู่แล้วความยินยอมผิดพลาดกับRequest_BadRequestและข้อความ “The<application-client-id>ชื่อหลักของบริการที่มีอยู่สำหรับผู้เช่า" - ความยินยอมของ Admin อาจล้มเหลวเมื่อคุณดำเนินการครั้งแรก (Admin consent can fail the first time you run it.) Microsoft Entra ใช้เวลาไม่กี่วินาทีเพื่อทำซ้ำการลงทะเบียนแอปใหม่ รายงานคำสั่ง
Directory_ObjectNotFoundด้วย "ไม่สามารถอ่านข้อมูล บริษัท จากไดเรกทอรี" รอและเรียกใช้อีกครั้ง - หากความยินยอมของผู้ดูแลระบบยังคงไม่ประสบความสำเร็จให้มันอยู่ในพอร์ทัลแทน (If admin consent keeps failing, grant it in the portal instead.)
az ad app permission admin-consentCalls a legacy Azure endpoint that doesn't work for each account. เปิดการลงทะเบียนแอป ใบอนุญาต API (API permissions) หน้าใน Microsoft เข้าสู่ศูนย์ดูแลระบบและเลือก อนุญาตให้ admin<your-tenant>.
อนุญาตให้แอปเข้าถึงเว็บไซต์
ลบส่วนนี้หากคุณเลือกใบอนุญาตที่ครอบคลุมผู้เช่า แอพลิเคชันที่มีเพียง Sites.Selected ไม่สามารถเข้าถึงเว็บไซต์ใด ๆ จนกระทั่งผู้ดูแลระบบจะให้การเข้าถึงเว็บไซต์หนึ่งในครั้งเดียว ขั้นตอนนี้ไม่มีหน้าในศูนย์ดูแลระบบ Microsoft Entra หรือศูนย์ดูแลระบบ SharePoint ซึ่งเป็นเหตุผลที่การตั้งค่าพลาดมัน จนกระทั่งคุณจะเสร็จสิ้นการดำเนินงานแต่ละครั้งจะล้มเหลวด้วยข้อผิดพลาด 403
เคล็ดลับ read สำหรับการทำงานของกระแสการอ่านเท่านั้นหรือ write สำหรับ workflow ที่อัปโหลดไฟล์หรือเปลี่ยนรายการรายการ
คุณต้องการ ID ของเว็บไซต์ โปรดสอบถามโดยที่อยู่:
GET https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/mysite
PnP PowerShell
ผู้ดูแลระบบ SharePoint สามารถใช้ ปั๊ม PowerShell . เชื่อมต่อกับเว็บไซต์แล้วให้แอปเข้าถึงมัน:
Connect-PnPOnline -Url "https://contoso.sharepoint.com/sites/mysite" -Interactive -ClientId <pnp-app-client-id>
Grant-PnPEntraIDAppSitePermission -AppId <application-client-id> -DisplayName "n8n SharePoint" -Permissions Write
-Permissions ใช้ Read, Write, Manage หรือ FullControl หมายเลขรุ่น: node needs Read หรือ Write.
การลงทะเบียนแบบอินเทอร์เน็ตต้องมีการลงทะเบียนแอพของตัวเองสำหรับ PnP PowerShell ซึ่ง Register-PnPEntraIDAppForInteractiveLogin การสร้าง ID ของแอปเช่นนี้ -ClientId.
Microsoft Graph
ส่งคำขอหนึ่งต่อเว็บไซต์เป็นผู้ดูแลระบบ Sites.FullControl.All ใบอนุญาต :
POST https://graph.microsoft.com/v1.0/sites/<site-id>/permissions
Content-Type: application/json
{
"roles": ["write"],
"grantedToIdentities": [
{
"application": {
"id": "<application-client-id>",
"displayName": "n8n SharePoint"
}
}
]
}
เครื่องตรวจจับกราฟ สามารถส่งได้ เปิด การเปลี่ยนแปลงอนุญาต (Modify permissions) และยินยอมที่จะ Sites.FullControl.All ครั้งแรก. หมายถึง ให้สิทธิ์การเข้าถึงต่อไซต์ สำหรับสิ่งที่ 403 ในคำขอนี้หมายถึง
ทำไม Azure CLI ไม่สามารถทำขั้นตอนนี้ (Why the Azure CLI can't do this step)
az rest --method POST เมื่อเทียบกับจุดสิ้นสุดเดียวกัน 403 จะกลับมาแม้แต่สำหรับผู้ดูแลระบบระดับโลก Azure CLI จะลงทะเบียนเป็นแอพลิเคชันของ Microsoft ของตัวเองและแอพลิเคชันนี้ไม่ถือ Sites.FullControl.All การยอมรับอนุญาตในการลงทะเบียนแอปของคุณเองไม่เปลี่ยนแปลงสิ่งที่ token ของ Azure CLI มี ใช้ PnP PowerShell หรือ Graph Explorer แทน
เสร็จสิ้นการตั้งค่าใน n8n
- สร้างก Microsoft Entra Service Principal credentials โดยป้อน Directory (tenant) ID, Application (client) ID และ Client Secret ที่สคริปต์แสดงผล หมายถึง Microsoft Entra Service Principal credentials สำหรับตัวเลือกใบรับรองและสำหรับคลาวด์สวีเดน
- ใน node Microsoft SharePoint, set Authentication ถึง Microsoft Entra Service Principal (App-Only) และเลือกใบรับรอง
- ตั้งค่า Site ฟิลด์ถึง By URL และแทรกที่อยู่ของเว็บไซต์ที่คุณให้การเข้าถึงแอป
- ปลั๊ก Node
จาก n8n 2.40.0 การทดสอบการเชื่อมต่อของใบรับรองเท่านั้นที่ตรวจสอบว่าแอปสามารถลงทะเบียนได้ ใบอนุญาตที่หายไป, การอนุญาตที่หายไป, หรือใบอนุญาตที่หายไปต่อเว็บไซต์ผ่านการทดสอบและล้มเหลวเมื่อจุดทำงาน, ด้วยข้อผิดพลาด 403 ที่เรียกว่าใบอนุญาตการดำเนินงานที่จำเป็น

