AAD / SSO / 分級 RAG 怎麼接
前面幾集,我們把 Dify 的 agent、RAG、MCP 都玩過了。這一集面對真正上線的那道牆:當你要把這套 agent 平台『給全公司幾千、幾萬人用』,馬上撞到的就是授權——誰能問什麼、誰不能看什麼,而且公司通常要求接 Azure AD、也就是 Entra ID。這集把整個企業授權架構,用通用做法一次講清楚。
先講一個實測得到的事實:Dify 本身做不了企業級的授權。它對外的端點,認證就只有一把靜態的 token;而且它跑的還是 MCP 最初那版協定,連原生的 OAuth 都沒有。所以結論很直接:Azure AD、SSO 這一關,不可能靠 Dify 自己,一定要在它前面加一層來擋。Dify 的定位,是躲在信任邊界後面、單純提供能力的那一塊。
先看整張圖。最外面是那道 AAD 的門;中間是編排層,通常用 n8n;最後面才是 Dify 跟你的各系統。呼叫方帶著 Entra 發的 token 進來,前面那層驗身分、決定能不能放行,驗過之後,才用一個內部 token 去打後面的 Dify。重點記住這個分層:對外的門在最外面,授權決策在中間那層,而能力,分散在後面的 Dify 跟系統。Dify 從頭到尾不碰身分、也不做授權。
要談授權,先把兩個常被混在一起的東西分開。第一個是認證,英文 authN,證明『你是誰』——這是 Azure AD 管的。第二個是授權,authZ,決定『你能碰哪些資料、哪些功能』——這是另一回事。很多人把這兩件事攪在一起,結果權限模型就歪掉了。記住:AAD 幫你確認身分;至於這個身分能看什麼,是另一層要決定的。
接著一個關鍵觀念,想通這個,後面全順。代表身分的那張 token,只有 Entra 能發。中間的 n8n 只能『驗』你給它的 token,它變不出身分來。所以呼叫方一定要『先自己拿到一張 token』,再拿去問 n8n。拿 token 這一步躲不掉——但它不是要你另建系統,就是跟 Entra 換一張證而已。怎麼換,分成兩種情況,這是下一個重點。
同一個 n8n,可以同時接『人』跟『機器』兩種呼叫方,不是二選一。人的情況:員工開一個登入入口,被導去 Entra 登入,登入完 Entra 把他導回 n8n 的一個網址——那個網址就是 redirect URI——n8n 再用拿回的碼,換到『這個員工』的 token。機器的情況:一個服務用自己的憑證,或更好的、平台自動發的受管身分,直接拿到 token。兩條入口都進同一個 n8n,只是拿到之後的授權方式不一樣。
這裡有個最容易搞錯的地方,一定要講清楚。人登入拿到的,是『某個員工』的身分,所以你可以依他的職級——一般、經理、處長——做分級。但機器對機器、也就是 M2M,拿到的是『app 身分』,它背後沒有人。所以 M2M 不是在做『分級』,而是『這個系統被授權讀哪一份資料』,通常是一份固定範圍。千萬別把一個 M2M 服務當成『一個人』去套職級——它沒有人的身分,只有身分加上一段資料範圍。
那『誰能看哪個資料』這種細授權,放哪?這是整套最容易做錯的地方。答案是:集中。政策放一個地方——用 Entra 的角色跟群組,或再加一個中央的政策引擎;n8n 當『執行點』,收到 token 就讀它的角色、去問政策『這個人能碰這份嗎』,能才放行。最重要的一句:不要在 Dify 裡再養一套權限表。那等於把 AD 已經幫你做好的權限,又重做一遍——身分集中的意義,就是不要每個 app 各養一套。
把授權這件事畫成一張圖就清楚了。身分跟政策,集中在 Entra:它證明你是誰,也放『誰有哪些資源的權』這些角色。政策決策,集中在一個地方回答『這個人能碰這份嗎』——只養這一套。政策執行,在 n8n 那一層:驗身分、問政策、放行或擋。而能力,分散在後面的 Dify 跟各系統——它們待在信任邊界後,只提供能力,完全不做授權。身分集中、授權集中、能力分散——這三句話就是整套的骨架。
講一個 RAG 特有、而且很容易出包的坑。RAG 是靠語意相似度去撈文件的,它預設完全不管權限。所以如果你把『薪資、財務』這種敏感內容,跟一般公開手冊放在『同一個知識庫』,一般員工問一個相關問題,檢索可能就撈到敏感那塊、塞進答案漏出去。正確做法:按敏感等級『分知識庫』——一般一個庫、機敏一個庫,每個庫掛一個受控的端點,前面那層依職級放行對應的。隔離的單位,是知識庫本身。
最後一個架構要點,能幫你省掉一堆麻煩。n8n 到 Dify 是『內部』,用 Dify 的 REST API 打就好,根本不用把 Dify 做成 MCP。n8n 手上放各職級那幾把 Dify 的 API key,驗完身分、依職級,挑對應的那把 key 去打。MCP 只放在『最外層』——而且只有當你要給外部的 AI client,像 Claude、Cursor,標準化探索工具時才值得。一句話:MCP 在外、API 在內。內部串接,乖乖用 API 就好。
留給你一句話,把整套企業授權收攏:身分集中在 Entra、授權決策集中在一個地方、能力分散在 Dify 跟各系統。門交給前面那層,人跟機器兩種入口同一個 n8n 都接;權限只養一套、別在每個 app 重造;敏感資料分庫、MCP 只在最外層。守住這幾條,你的 agent 平台才真的『能給全公司用、又不出事』。