Fabric 應用程式中的匿名資料存取

匿名資料存取讓 Fabric 應用程式將選定的資料操作揭露給未登入的使用者。 你可以在 Fabric 租戶層級以及每個資料模型中控制這些存取。 匿名存取是一種授權選項,而非取代認證。 同一個應用程式可以對部分實體提供公開存取,同時要求使用者登入其他實體或操作。

Important

任何能取得應用程式網址的人,都可以使用分配給該 anonymous 角色的操作。 不要透過這個角色暴露個人、機密、財務或內部業務資料。

應用案例

當應用程式必須提供有限功能且不需登入時,可以考慮匿名資料存取。

Scenario 範例存取 建議範圍
公開參考資料 查看產品目錄、排程表或公開資料集 read
回饋收集 提交意見或調查回應 create

當應用程式必須識別使用者、強制所有權或基於身份主張提供存取時,匿名存取並不合適。 在這些情境下使用已認證的角色。

匿名存取的運作方式

匿名資料存取使用獨立控制:

  1. 租戶環境:Fabric 租戶管理員會授予組織或特定安全群組匿名資料存取權限。
  2. 資料模型角色: 實體利用該 anonymous 角色定義未認證使用者可執行的操作。

租戶設定是整個組織的邊界。 應用程式設定允許匿名請求抵達應用程式的資料服務。 實體角色決定這些請求可以存取哪些資料和操作。 只啟用其中一兩個控制項並不會讓使用者匿名存取。

啟用租戶設定

Fabric 租戶管理員必須啟用匿名資料存取,應用程式開發者才能使用。 這個設定預設是關閉的。

  1. 登入 Fabric 管理入口網站

  2. 選取租戶設定

  3. Fabric 應用程式(預覽)中,找到匿名資料存取

    Fabric 管理入口網站中匿名資料存取設定的截圖。

  4. 切換設定為 [啟用]

  5. 將設定套用到整個組織或特定安全群組。

  6. 選擇 「申請」

變更可能需要幾分鐘才能生效。 當你將設定限制在安全群組時,請確認應用程式開發者或擁有者是否包含在允許的群組中。

在資料模型中定義匿名存取

在實體上使用 @role 裝飾器,並指定 anonymous 角色名稱。 第二個參數定義允許的資料操作:create、、readupdate、或delete

Parameters

參數 類型 說明
roleName string 角色名稱,例如 authenticated 或自訂應用程式角色
actions string \| string[] 單動作或陣列:createreadupdatedelete*對所有
options object 可選物件,具有 checkinclude,且具有 exclude 屬性

以下範例允許未經認證的使用者閱讀公開公告:

import { entity, role, uuid, text } from '@microsoft/rayfin-core';

@entity()
@role('anonymous', 'read')
export class Announcement {
  @uuid() id!: string;
  @text() title!: string;
  @text() content!: string;
}

這個 anonymous 職位不使用身份聲明,因為沒有登入身份可用。 定義最狹窄的操作集合,以支持你的情境。

允許使用者提交資料

對於回饋表單,請在不授予 create、 、 readupdate 的情況下授予delete存取權限:

import { entity, role, uuid, text } from '@microsoft/rayfin-core';

@entity()
@role('anonymous', 'create')
export class Feedback {
  @uuid() id!: string;
  @text() comment!: string;
}

此模式允許使用者提交回饋,但不允許查看或修改提交的文章。

允許多重操作

當一個情境需要多個操作時,傳遞陣列:

import { boolean, entity, role, text, uuid } from '@microsoft/rayfin-core';

@entity()
@role('anonymous', ['create', 'read', 'update'])
export class SharedTodo {
  @uuid() id!: string;
  @text() title!: string;
  @boolean({ default: false }) completed!: boolean;
}

任何有此應用程式存取權的人都可以建立、查看並更新所有共享待辦事項。 他們不能刪除待辦事項,因為 delete 沒包含在內。 這類廣泛的權限只應用於公開或暫時資料,且用戶預期共享存取權。

結合匿名與認證角色

當公開使用者與登入使用者需要不同權限時,將兩個角色套用到實體上。 舉例來說,任何人都可以閱讀一篇部落格文章,但只有已登入的擁有者才能更改:

import { entity, role, uuid, text } from '@microsoft/rayfin-core';

@entity()
@role('anonymous', 'read')
@role('authenticated', ['create', 'update', 'delete'], {
  policy: (claims, item) => claims.sub.eq(item.createdBy),
})
export class BlogPost {
  @uuid() id!: string;
  @text() title!: string;
  @text() content!: string;
  @text() createdBy!: string;
}

匿名角色允許公開閱讀,無需評估身份主張。 經過認證的角色會利用登入使用者的聲明來限制對其擁有內容的變更。

安全性指引

  • 授予最低要求的存取權限。 偏好 readcreate 孤獨。 補助 updatedelete 只有在公共工作流程需要時才給予。
  • 限制暴露的視野。 使用 includeexclude 選項阻止匿名使用者存取不需要的欄位。 欲了解更多資訊,請參閱 定義資料權限
  • 不要只依賴應用程式介面來保護自己。 權限必須在資料模型上定義,因為呼叫者可以在不使用前端的情況下發送請求。
  • 為不信任的輸入做好準備。 驗證提交的資料,並設計針對垃圾郵件、自動化及意外流量的公開寫入操作。
  • 測試被拒絕手術。 確認角色中省略的操作對未啟動會話的使用者被拒絕。

停用匿名存取

要移除應用程式中的公開存取權限:

  1. 從每個資料模型中移除該 anonymous 角色。
  2. 透過執行 npx rayfin up. 來重新部署應用程式。

租戶管理員也可以停用租戶設定,阻止租戶內所有應用程式的匿名資料存取,並限制存取特定安全群組。