使用 Microsoft Entra B2B 將外部使用者上線至企業營運應用程式
應用程式開發人員可以使用 Microsoft Entra B2B,在企業營運 (LOB) 應用程式內將外部使用者上線以及與他們共同作業。 與許多 Office 365 應用程式中的 [共用] 按鈕類似,應用程式開發人員可以在任何與 Microsoft Entra ID 整合的 LOB 應用程式中建立單鍵邀請體驗。
這些權益包括:
- 使用者上線和存取 LOB 應用程式。 使用者可透過幾個步驟存取
- 外部使用者攜帶自己的身分識別,以及執行單一登入 (SSO)
- Microsoft Entra ID 的外部身分識別佈建
- Microsoft Entra 條件式存取和跨租用戶存取原則,強制執行授權原則,例如多重要素驗證
整合流程
若要整合 LOB 應用程式與 Microsoft Entra B2B,請遵循這個模式:
- 終端使用者在 LOB 應用程式中觸發邀請,並提供外部使用者的電子郵件地址。 應用程式會檢查使用者是否已存在,如果不存在,請繼續進行建立並傳送邀請|
- 應用程式會代表使用者將 POST 傳送至 Microsoft Graph API。 它會提供確認外部使用者位於目錄所定義的重新導向 URL 和外部使用者的電子郵件。
- Microsoft Graph API 會在 Microsoft Entra ID 佈建來賓使用者。
- Microsoft Graph API 會傳回 API 呼叫的成功或失敗狀態。 如果成功,回覆會包含 Microsoft Entra 使用者物件識別碼,以及向受邀使用者電子郵件傳送邀請連結。 您可抑制 Microsoft 電子郵件,並傳送您自己的自訂電子郵件。
- (選用) 若要將其他屬性寫入受邀使用者,或將受邀使用者新增至群組。 應用程式會對 Microsoft Graph API 進行額外的 API 呼叫。
- (選用) Microsoft Graph API 會對 Microsoft Entra ID 進行更新。
- (選用) Microsoft Graph API 會將成功或失敗狀態傳回應用程式。
- 應用程式會使用使用者的物件 ID 屬性,將使用者當成固定 ID,佈建至其資料庫/後端使用者目錄。
- 應用程式會向終端使用者呈現成功或失敗狀態。
如果需要指派才能存取 LOB 應用程式,則受邀的來賓使用者也會指派給具有應用程式角色的應用程式。 啟用此動作作為另一次 API 呼叫,將受邀來賓新增至群組,或使用 Microsoft Entra 動態成員資格群組將成員資格自動化。 動態成員資格群組不需要應用程式進行另一次 API 呼叫;然而,只要透過使用者邀請將使用者新增至群組,即會快速更新。
確認外部使用者位於目錄
外部使用者可能已受邀並上線。 LOB 應用程式會檢查使用者是否位於目錄。 對 Microsoft Graph API 進行 API 呼叫,並將相符項目呈現給邀請使用者,以供其選取。
例如:
Application Permission: User.read.all
GET https://graph.microsoft.com/v1.0/users?$filter=othermails/any(id:id eq 'userEmail@contoso.com')
如果您在回覆中接收到使用者詳細資料,則使用者位於目錄。 將使用者回傳呈現給邀請使用者。 允許使用者選取可存取的外部使用者。 若要授與使用者對應用程式的存取權,請進行 API 呼叫,或觸發其他進程。
建立並傳送邀請
如果外部使用者不位於目錄,請使用 Microsoft Entra B2B 來邀請使用者,並將其上線至您的 Microsoft Entra 租用戶。 決定要在 Microsoft Graph API 的邀請要求中包含哪些項目。
使用下列項目:
- 提示終端使用者提供外部使用者電子郵件地址
- 在使用者驗證並兌換 B2B 邀請之後,判斷重新導向受邀使用者的邀請 URL
- URL 可以是一般登錄頁面,也可以根據終端使用者觸發邀請的位置,由 LOB 應用程式動態決定
適用於邀請要求的其他旗標和屬性:
- 受邀使用者顯示名稱
- 預設 Microsoft 邀請電子郵件,或是抑制預設電子郵件,以建立自己的電子郵件
在應用程式收集必要的資訊後,應用程式就必須以 POST 的方式將要求傳送給 Microsoft Graph API 邀請管理員。 請確定應用程式註冊在 Microsoft Entra ID 具有權限。
例如:
Delegated Permission: User.Invite.All
POST https://graph.microsoft.com/v1.0/invitations
Content-type: application/json
{
"invitedUserDisplayName": "John Doe",
"invitedUserEmailAddress": "john.doe@contoso.com",
"sendInvitationMessage": true,
"inviteRedirectUrl": "https://customapp.contoso.com"
}
注意
若要查看邀請 JSON 本文的選項,請參閱《Microsoft Graph v1.0 的邀請資源類型》。
應用程式開發人員可以使用 Microsoft Entra 自助式註冊或權利管理存取套件,將外部使用者上線。 在 LOB 應用程式中建立 [邀請] 按鈕,以觸發包含自助式註冊 URL 或存取套件 URL 的自訂電子郵件。 受邀使用者會自行上線並存取應用程式。
(選用) 將其他屬性寫入至 Microsoft Entra ID
重要
授與應用程式權限以更新目錄中的使用者,是高特殊權限的動作。 如果您授與應用程式這些高特殊權限的權限,請保護和監視 LOB 應用程式。
您的組織或 LOB 應用程式可能需要資訊以供日後使用,例如在權杖中發出宣告或細微的授權原則。 在 Microsoft Entra ID 中邀請或建立外部使用者時,應用程式可以進行另一次 API 呼叫來進行更新。 您的應用程式必須有額外的 API 權限,而且必須對 Microsoft Graph API 進行額外的呼叫。
若要更新使用者,請使用邀請 API 呼叫中已建立來賓使用者的物件識別碼、來自存在檢查或邀請的 API 回覆中的 ID 值。 您可以寫入任何標準屬性或自訂擴充屬性。
例如:
Application Permission: User.ReadWrite.All
PATCH https://graph.microsoft.com/v1.0/users/<user's object ID>
Content-type: application/json
{
"businessPhones": [
"+1 234 567 8900"
],
"givenName": "John"
"surname": "Doe",
"extension_cf4ff515cbf947218d468c96f9dc9021_appRole": "external"
}
如需詳細資訊,請參閱《Microsoft Graph v1.0 的更新使用者》。
(選用) 將受邀使用者指派給群組
注意
如果不需要使用者指派即可存取應用程式,您可以略過此步驟。
如果在適用於應用程式存取或角色指派的 Microsoft Entra ID 中需要使用者指派,則會將使用者指派給應用程式。 否則,無論驗證為何,使用者都無法授與存取權。 若要新增受邀外部使用者新增至特定群組,應進行另一次 API 呼叫。 群組會為應用程式進行指派,並對應至應用程式角色。
權限範例:將群組更新程式角色或自訂角色指派給企業應用程式。 將角色指派範圍設定為此應用程式更新的群組。 或在 Microsoft Graph API 指派 group.readwrite.all
權限。
POST https://graph.microsoft.com/v1.0/groups/<insert group id>/members/$ref
Content-type: application/json
{
"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/<insert user id>"
}
如需詳細資訊,請參閱《Microsoft Graph v1.0 的新增成員》。
或者,您可以使用 Microsoft Entra 動態成員資格群組,根據特定屬性自動指派使用者,例如 userType、電子郵件或自訂屬性。 不過,如果使用者存取易受時間影響,不建議使用這個方法,因為動態成員資格群組可能需要長達 24 小時的時間才能填入。
如果您使用動態成員資格群組,不要透過另一次 API 呼叫將使用者新增至群組。 反之,建立群組,根據 userType、電子郵件或自訂屬性等屬性,將使用者新增為群組的成員。 如需詳細資訊,請參閱建立或編輯動態群組並取得狀態。
將受邀使用者佈建至應用程式
在 Microsoft Entra ID 佈建受邀外部使用者後,Microsoft Graph API 會傳回回應,其中包含使用者資訊,例如物件 ID 和電子郵件。 LOB 應用程式將使用者佈建至其目錄/資料庫。 視應用程式和應用程式所使用的內部目錄類型而定,此佈建會有所不同。
利用在 Microsoft Entra ID 和應用程式中佈建外部使用者,LOB 應用程式會通知起始使用者,流程已成功完成。 受邀使用者藉由其身分識別取得 SSO,無需邀請的組織上線並發出額外的認證。 Microsoft Entra ID 會透過條件式存取、Microsoft Entra 多重要素驗證,以及 Microsoft Entra ID Protection,強制執行授權原則,。
其他考量
請確定已在 LOB 應用程式完成錯誤處理。 應用程式會驗證每次 API 呼叫。 如果失敗,額外的嘗試或錯誤訊息會很有用。
針對要更新受邀外部使用者的 LOB 應用程式,請授與自訂角色,僅限應用程式更新使用者,並將範圍指派給動態管理單元。 例如,建立動態管理單位,包含 usertype = guest 的所有使用者。 當外部使用者上線至 Microsoft Entra ID 時,即會新增至系統管理單位。 LOB 應用程式必須嘗試更新使用者,如果出現延遲,可能需要多次嘗試。 儘管延遲,但此方法能在 LOB 應用程式不將權限授與更新目錄中任何使用者的情況下,更新外部使用者。