在自託管 Business n8n 實例上啟用 SSO SAML 與 Azure EntraID 的問題

嘿各位,我們在 Azure 上自託管我們的 n8n 實例(商業方案),在設定 SSO SAML 時遇到了一些問題

描述問題/錯誤/問題

我們嘗試按照此指南設定 SSO SAML,使用 Azure EntraID:Set up SAML | Administer | n8n Docs 和此指南:Set up Azure AD SAML | Administer | n8n Docs
我們已按照指南中的說明設定了宣告。

錯誤訊息是什麼(如果有的話)?

在我的 n8n 儀表板上設定 SSO SAML 後點擊「測試連線」按鈕時,我被重新導向到顯示錯誤的頁面,並顯示此訊息:

「SAML 驗證失敗。無效的 SAML 回應(缺少屬性:Error

關於您的 n8n 設定的資訊

  • n8n 版本: 2.28.3
  • 資料庫(預設值:SQLite):PostgresQL
  • n8n EXECUTIONS_PROCESS 設定(預設值:own、main):main
  • 透過以下方式執行 n8n(Docker、npm、n8n cloud、桌面應用程式):Docker
  • 作業系統:Linux

嘿!這是一個典型的 Azure SAML 聲明對應問題,n8n 期望 firstnamelastname 屬性,但它們沒有在 SAML 回應中出現。

在你的 Azure Entra ID 應用中,前往 Single sign-on → Attributes & Claims,並確保明確新增這兩個:

  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/firstname → 對應至 user.givenname
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/lastname → 對應至 user.surname

Azure 預設聲明設定經常跳過這些或使用不同的屬性名稱,這正是導致不匹配的原因。

儲存後,再次測試連線,應該就能連接了。如果你仍然看到錯誤,請告訴我們!

@Vincent67 歡迎!
那個錯誤表示斷言正在到達 n8n,但那兩個聲明以 n8n 預期的確切 URI 以外的名稱到達。在 Entra 中,發出的聲明類型是命名空間 + 名稱,設定在兩個不同的框中,所以完整類型只有在聲明配置如下時才會變成 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/firstname

Name: firstname
Namespace: http://schemas.xmlsoap.org/ws/2005/05/identity/claims

如果「命名空間」框留空,Entra 會將聲明作為純文本 firstname 發出,沒有前綴,n8n 會報告它遺失。在「單一登入」>「屬性和聲明」下開啟每個聲明,將名稱和命名空間設定為完全如上所述(另一個的名稱為 lastname),然後儲存。
另外,Entra 會捨棄任何來源屬性為空的聲明,所以請確保測試使用者在其 Entra 設定檔中填入「名字」和「姓氏」,否則這兩個聲明將根本不會被傳送。
若要確認實際到達的內容,請在「測試連線」期間使用 SAML Chrome Panel 瀏覽器擴充功能讀取斷言。