> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# OAuth 中的企業帳戶

> 讓使用者將你的應用程式授權給一個企業帳戶 —— 或為他即將註冊的企業預先核准權限 —— 並弄清楚授權碼到底解析到哪個帳戶。

一位 Fluz 使用者可以同時擁有一個個人帳戶與一個或多個企業帳戶。過去 OAuth 流程總是解析到個人帳戶，現在不再如此。

如果你的應用程式服務企業，本頁就是「能用的整合」與「默默把每一份授權都挂到錯誤帳戶上的整合」之間的差別。

<Info>
  本頁內容不會改變 authorize URL、callback 契約或 token 交換。改變的是**回傳的授權碼綁定到哪個帳戶**，以及**同意畫面是用哪一份權限清單建置的**。
</Info>

***

## 兩種流程

| 流程       | 何時發生                                  | 授權針對的對象                    |
| :------- | :------------------------------------ | :------------------------- |
| **標準授權** | 使用者選擇一個個人帳戶或一個現有的企業帳戶                 | 該帳戶                        |
| **企業註冊** | 使用者選擇申請一個新的企業帳戶，或你的應用程式僅限企業而他尚未擁有企業帳戶 | 他的個人帳戶，加上一組為即將建立的企業預先核准的權限 |

第二種流程存在的原因是：在使用者同意的那一刻，企業還不存在。使用者在自己的個人帳戶上授予「註冊企業」的權限，並在同一步驟中預先核准你的應用程式在該企業存在後所需的企業權限。這些預核權限會挂在使用者名下，直到企業被建立。

<Note>
  同一個個人帳戶可以多次走企業註冊流程，隨時間推移為多家企業預先核准權限。
</Note>

***

## 在你的應用程式上啟用企業帳戶

兩份權限清單位於應用程式的 **Permissions** 分頁，由你自行編輯。參見[設定 OAuth 應用程式](/create-an-o-auth-app)。流程是否允許落在個人帳戶上，則不在該分頁上 —— 由 Fluz 在你的應用程式上設定。

<Steps>
  <Step title="填寫 Business permissions 清單">
    與消費者 **Permissions** 清單獨立編輯。**企業清單非空，才會讓你的應用程式啟用企業能力** —— 留空的話，使用者永遠不會看到申請企業帳戶的選項。

    註冊企業的權限不在這份清單裡。它由個人帳戶授予，因此屬於消費者清單。
  </Step>

  <Step title="在消費者 Permissions 清單上啟用「註冊企業」權限">
    企業註冊流程必需。沒有它，該流程無法完成。
  </Step>

  <Step title="如有需要，請 Fluz 將應用程式限制為僅企業帳戶">
    Fluz 可以為你的應用程式進行設定，使流程永遠不會落在個人帳戶上。這一項不是自助的 —— 如果你的應用程式只應在企業帳戶上運行，請聯繫你的 Fluz 客戶經理。

    如果你的應用程式同時服務消費者與企業，請跳過此步。在未啟用該限制前，沒有企業帳戶的使用者會同時看到自己的個人帳戶與申請企業帳戶的選項，其中一些人會選個人帳戶。
  </Step>
</Steps>

***

## 帳戶如何被選定

是跳過選擇器還是顯示它，由 Fluz 決定。你的應用程式不控制這一點 —— 但你需要知道你的使用者會遇到什麼。

| 情境                             | 會發生什麼                                |
| :----------------------------- | :----------------------------------- |
| `external_id` 已經解析到一個來自先前授權的帳戶 | 跳過選擇器。重複使用該帳戶；若先前的授權是企業註冊流程，則繼續該流程   |
| 沒有企業帳戶，且應用程式被限制為僅企業帳戶          | 跳過選擇器。直接進入企業註冊                       |
| 沒有企業帳戶，且允許個人帳戶                 | 選擇器顯示個人帳戶；若應用程式已啟用企業能力，還會顯示申請企業帳戶的選項 |
| 已有企業帳戶                         | 選擇器顯示它們。僅當允許個人帳戶時，才會包含個人帳戶           |
| 已有一份企業申請進行中                    | 「申請企業帳戶」選項會被隱藏                       |

<Warning>
  正因為存在帳戶選擇這一步，你不應假設收到的授權碼綁定的是使用者的個人帳戶。請從交換回應中讀取帳戶並持久化 —— 不要根據你自己關於「誰發起了流程」的紀錄去推斷。
</Warning>

***

## 適用哪一份權限清單

同意畫面始終根據你的應用程式設定建置，而不是根據 authorize URL。使用哪一份清單取決於流程：

| 流程      | 同意畫面顯示                                    |
| :------ | :---------------------------------------- |
| 個人帳戶    | 你的消費者 **Permissions**                     |
| 現有的企業帳戶 | 你的 **Business permissions**               |
| 企業註冊    | 兩者都顯示，分為兩組 —— 現在授予的消費者權限，以及為未來企業預先核准的企業權限 |

每種情況下該清單都是唯讀的。使用者要麼全部接受，要麼無法完成授權。

權限會在我們這一側根據適用於該流程的清單進行驗證。不在清單內的內容會被拒絕，而不是靜默丟棄。

***

## 在企業情境下使用 `external_id`

`external_id` 在每個應用程式內唯一，首次使用時就會綁定到唯一一個 Fluz 帳戶。引入企業後，這帶來一個值得提前規劃的後果：

* 如果使用者以 `external_id=acct_123` 授權了一個個人帳戶，該 ID 就綁定到了個人帳戶。你無法之後再把它用在他的企業帳戶上。
* 為每個你想追蹤的帳戶分配各自的外部 ID。如果你在自己的系統裡單獨建模企業，請使用你的企業識別碼 —— 而不是所有者使用者的。

通用規則參見[管理外部參考 ID](/managing-external-reference-ids)。

***

## 元件中的企業帳戶

當你的整合使用[嵌入式元件](/developers/widgets)時，企業帳戶可以作為**存款、payout 與 pay-in** 的當前情境。有兩點與消費者情境不同：

* **消費者身分驗證（KYC）不適用。** 企業情境透過企業驗證（KYB）完成核驗，不會出現消費者 KYC 提示。
* **PIN 在使用者層級設定。** 尚未設定 PIN 的使用者可以從任一情境設定，且對兩者都生效。

***

## 疑難排解

| 現象                    | 幾乎總是因為                                                                       |
| :-------------------- | :--------------------------------------------------------------------------- |
| 沒有申請企業帳戶的選項           | **Business permissions** 為空，應用程式未啟用企業能力 —— 或者使用者已有一份企業申請進行中                  |
| 企業註冊流程無法完成            | 消費者 **Permissions** 清單上未啟用「註冊企業」權限                                           |
| 授權因為無法辨識的權限而被拒        | 傳送了不在該流程適用清單內的內容。個人帳戶授權對照 **Permissions** 驗證，企業授權對照 **Business permissions** |
| 重複使用 `external_id` 失敗 | 它已經綁定到本應用程式下的另一個帳戶                                                           |
| 你預期企業帳戶，授權卻落在了個人帳戶    | 使用者選了個人帳戶。如果你的應用程式永遠不應接受個人帳戶，請請你的 Fluz 客戶經理將應用程式限制為僅企業帳戶                     |

***

## 下一步

<CardGroup cols={2}>
  <Card title="面向客戶端的授權流程" icon="user-check" href="/client-facing-o-auth-grant-flow">
    authorize URL、`state` 與 callback。
  </Card>

  <Card title="設定 OAuth 應用程式" icon="sliders" href="/create-an-o-auth-app">
    兩份權限清單在哪裡。
  </Card>

  <Card title="外部參考 ID" icon="id-card" href="/managing-external-reference-ids">
    選擇不會讓你後悔的識別碼。
  </Card>

  <Card title="交換授權碼" icon="arrow-left-right" href="/exchange-an-o-auth-authorization-code">
    將授權碼換成 token。
  </Card>
</CardGroup>
