使用 Microsoft Entra 整合保護混合式存取

Microsoft Entra ID 支援新式驗證通訊協定,以協助保護應用程式的安全。 不過,許多商務應用程式會在受保護的公司網路中運作,有些則使用舊版驗證方法。 當公司建置 零信任 策略並支援混合式和雲端環境時,有一個解決方案可將應用程式連線到 Microsoft Entra ID,併為舊版應用程式提供驗證。

深入瞭解:零信任 安全性

Microsoft Entra ID 原生支援新式通訊協定:

  • 安全性判斷提示標記語言 (SAML)
  • Web 服務同盟 (WS-Fed)
  • OpenID 連線 (OIDC)

Microsoft Entra 應用程式 Proxy 或 Microsoft Entra 應用程式 Proxy 支援 Kerberos 和標頭型驗證。 不支援其他通訊協定,例如安全殼層 (SSH)、(Microsoft Windows NT LAN Manager) NTLM、輕量型目錄存取通訊協定 (LDAP) 和 Cookie。 但是,獨立軟體供應商 (ISV) 可以建立解決方案,以將這些應用程式與 Microsoft Entra ID 連線。

ISV 可協助客戶探索軟體即服務 (SaaS) 應用程式並將其遷移至 Microsoft Entra 識別符。 他們可以將使用舊版驗證方法的應用程式與 Microsoft Entra ID 連線。 客戶可以合併到 Microsoft Entra 識別碼,以簡化其應用程式管理並實作 零信任 原則。

解決方案概觀

您建置的解決方案可以包含下列部分:

  • 應用程式探索 - 客戶通常不知道使用中的每個應用程式
    • 應用程式探索會尋找應用程式,協助應用程式與 Microsoft Entra 識別碼整合
  • 應用程式移轉 - 建立工作流程以整合應用程式與 Microsoft Entra 識別碼,而不需使用 Microsoft Entra 系統管理中心
    • 整合客戶目前使用的應用程式
  • 舊版驗證支援 - 使用舊版驗證方法和單一登錄 連線 應用程式
  • 條件式存取 - 讓客戶在不使用 Microsoft Entra 系統管理中心的情況下,將 Microsoft Entra 原則套用至解決方案中的應用程式

深入了解: 什麼是條件式存取?

如需技術考慮和建議,請參閱下列各節。

將應用程式發佈至 Azure Marketplace

Azure Marketplace 是IT系統管理員信任的應用程式來源。 應用程式與 Microsoft Entra ID 相容,並支援 SSO、自動化使用者布建,並使用自動化應用程式註冊整合到外部租使用者中。

您可以預先整合應用程式與 Microsoft Entra ID,以支援 SSO 和自動化佈建。 請參閱提交 要求,以在 Microsoft Entra 應用連結庫中發佈您的應用程式。

我們建議您成為已驗證的發行者,因此客戶知道您是受信任的發行者。 請參閱發行者驗證

啟用 IT 系統管理員的單一登錄

有數種方式可以為您的解決方案啟用IT系統管理員的SSO。 請參閱規劃單一登錄部署、SSO 選項

Microsoft Graph 使用 OIDC/OAuth。 客戶會使用 OIDC 登入您的解決方案。 使用 JSON Web 令牌 (JWT) Microsoft Entra ID 問題來與 Microsoft Graph 互動。 請參閱 Microsoft 身分識別平台 上的 OpenID 連線。

如果您的解決方案使用 SAML 進行 IT 系統管理員 SSO,SAML 令牌將無法讓您的解決方案與 Microsoft Graph 互動。 您可以使用 SAML for IT 系統管理員 SSO,但您的解決方案必須支援 OIDC 與 Microsoft Entra ID 整合,以便從 Microsoft Entra ID 取得 JWT 以與 Microsoft Graph 互動。 請參閱 Microsoft 身分識別平台 如何使用 SAML 通訊協定

您可以使用下列其中一個 SAML 方法:

使用客戶客戶輸入客戶端識別碼和密碼。 解決方案也需要您儲存此資訊。 從 Microsoft Entra 識別碼取得 JWT,然後使用它與 Microsoft Graph 互動。 請參閱取得 令牌。 建議您重新撰寫客戶檔,以瞭解如何在其 Microsoft Entra 租使用者中建立應用程式註冊。 包含端點、URI 和許可權。

注意

在應用程式用於 IT 系統管理員或使用者 SSO 之前,客戶 IT 系統管理員必須同意其租使用者中的應用程式。 請參閱授 與全租用戶系統管理員對應用程式的同意。

驗證流程

解決方案驗證流程支援下列案例:

  • 客戶 IT 系統管理員使用 SSO 登入以管理您的解決方案
  • 客戶 IT 系統管理員會使用您的解決方案,將應用程式與 Microsoft Graph 整合至 Microsoft Entra ID
  • 使用者登入由解決方案和 Microsoft Entra ID 保護的舊版應用程式

您的客戶IT系統管理員對解決方案進行單一登錄

當客戶 IT 系統管理員登入時,您的解決方案可以使用 SAML 或 OIDC 進行 SSO。 我們建議 IT 系統管理員使用其 Microsoft Entra 認證登入您的解決方案,以使用目前的安全性控制。 透過 SAML 或 OIDC 整合適用於 SSO 的 Microsoft Entra ID。

下圖說明使用者驗證流程:

重新導向至 Microsoft Entra ID 以登入的系統管理員圖表,然後重新導向至解決方案。

  1. IT 系統管理員使用其 Microsoft Entra 認證登入您的解決方案
  2. 解決方案會將 IT 系統管理員重新導向至具有 SAML 或 OIDC 登入要求的 Microsoft Entra 識別符
  3. Microsoft Entra 會驗證 IT 系統管理員,並使用 SAML 令牌或 JWT 將其重新導向至您的解決方案,以在解決方案中獲得授權

IT 系統管理員整合應用程式與 Microsoft Entra ID

IT 系統管理員會使用您的解決方案,將應用程式與 Microsoft Entra ID 整合,其採用 Microsoft Graph 來建立應用程式註冊和 Microsoft Entra 條件式存取原則。

下圖說明使用者驗證流程:

IT 系統管理員、Microsoft Entra ID、您的解決方案和 Microsoft Graph 之間的互動圖表。

  1. IT 系統管理員使用其 Microsoft Entra 認證登入您的解決方案
  2. 解決方案會將 IT 系統管理員重新導向至具有 SAML 或 OIDC 登入要求的 Microsoft Entra 識別符
  3. Microsoft Entra 會驗證 IT 系統管理員,並使用 SAML 令牌或 JWT 將其重新導向至您的解決方案以進行授權
  4. 當 IT 系統管理員整合應用程式與 Microsoft Entra ID 時,解決方案會呼叫 Microsoft Graph 及其 JWT 來註冊應用程式,或套用 Microsoft Entra 條件式存取原則

使用者登入應用程式

當使用者登入應用程式時,他們會使用 OIDC 或 SAML。 如果應用程式需要與 Microsoft Graph 或 Microsoft Entra 保護的 API 互動,建議您將其設定為使用 OICD。 此設定可確保 JWT 會套用至與 Microsoft Graph 互動。 如果不需要應用程式與 Microsoft Graph 或 Microsoft Entra 保護的 API 互動,請使用 SAML。

下圖顯示使用者驗證流程:

使用者、Microsoft Entra ID、解決方案和應用程式之間的互動圖表。

  1. 使用者登入應用程式
  2. 解決方案會將使用者重新導向至具有 SAML 或 OIDC 登入要求的 Microsoft Entra ID
  3. Microsoft Entra 會驗證使用者,並使用 SAML 令牌或 JWT 將其重新導向至您的解決方案以進行授權
  4. 解決方案允許使用應用程式通訊協定的要求

Microsoft Graph API

我們建議使用下列 API。 使用 Microsoft Entra ID 來設定委派的許可權或應用程式許可權。 針對此解決方案,請使用委派的許可權。

  • 應用程式範本 API - 在 Azure Marketplace 中,使用此 API 來尋找相符的應用程式範本
    • 需要的許可權:Application.Read.All
  • 應用程式註冊 API - 建立 OIDC 或 SAML 應用程式註冊,讓使用者登入使用解決方案保護的應用程式
    • 需要的許可權:Application.Read.All、Application.ReadWrite.All
  • 服務主體 API - 註冊應用程式之後,請更新服務主體物件以設定 SSO 屬性
    • 需要的許可權:Application.ReadWrite.All、Directory.AccessAsUser.All、AppRoleAssignment.ReadWrite.All (適用於指派)
  • 條件式存取 API - 將 Microsoft Entra 條件式存取原則套用至使用者應用程式
    • 需要的許可權:Policy.Read.All、Policy.ReadWrite.ConditionalAccess 和 Application.Read.All

深入瞭解 使用 Microsoft Graph API

Microsoft Graph API 案例

使用下列資訊來實作應用程式註冊、連接舊版應用程式,以及啟用條件式存取原則。 瞭解如何自動化系統管理員同意、取得令牌簽署憑證,以及指派使用者和群組。

使用 Microsoft Graph API 向 Microsoft Entra 識別子註冊應用程式

在 Azure Marketplace 中新增應用程式

客戶使用的一些應用程式位於 Azure Marketplace 中。 您可以建立將應用程式新增至外部租用戶的解決方案。 使用下列範例搭配 Microsoft Graph API 來搜尋 Azure Marketplace 中的範本。

注意

在應用程式範本 API 中,顯示名稱會區分大小寫。

Authorization: Required with a valid Bearer token
Method: Get

https://graph.microsoft.com/v1.0/applicationTemplates?$filter=displayname eq "Salesforce.com"

如果您從 API 呼叫找到相符專案,請擷取標識碼。 進行下列 API 呼叫,並在 JSON 主體中提供應用程式的顯示名稱:

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/cd3ed3de-93ee-400b-8b19-b61ef44a0f29/instantiate
{
    "displayname": "Salesforce.com"
}

進行 API 呼叫之後,您會產生服務主體物件。 擷取要用於下一個 API 呼叫的應用程式識別碼和服務主體識別碼。

使用 SAML 通訊協定和登入 URL 修補服務主體物件:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "preferredSingleSignOnMode":"saml",
    "loginURL": "https://www.salesforce.com"
}

使用重新導向 URI 和識別碼 URI 修補應用程式物件:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/54c4806b-b260-4a12-873c-967116983792
{
    "web": {
    "redirectUris":["https://www.salesforce.com"]},
    "identifierUris":["https://www.salesforce.com"]
}

新增不在 Azure Marketplace 中的應用程式

如果 Azure Marketplace 中沒有相符專案,或整合自定義應用程式,請在 Microsoft Entra ID 中向範本標識元註冊自定義應用程式:8adf8e6e-67b2-4cf2-a259-e3dc5476c621。 然後,進行下列 API 呼叫,並在 JSON 主體中提供應用程式顯示名稱:

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
{
    "displayname": "Custom SAML App"
}

進行 API 呼叫之後,您會產生服務主體物件。 擷取要用於下一個 API 呼叫的應用程式識別碼和服務主體識別碼。

使用 SAML 通訊協定和登入 URL 修補服務主體物件:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "preferredSingleSignOnMode":"saml",
    "loginURL": "https://www.samlapp.com"
}

使用重新導向 URI 和識別碼 URI 修補應用程式物件:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/54c4806b-b260-4a12-873c-967116983792
{
    "web": {
    "redirectUris":["https://www.samlapp.com"]},
    "identifierUris":["https://www.samlapp.com"]
}

使用 Microsoft Entra 單一登錄

在 Microsoft Entra 識別符中註冊 SaaS 應用程式之後,應用程式必須開始使用 Microsoft Entra ID 作為識別提供者 (IdP):

使用舊版驗證將應用程式 連線 至 Microsoft Entra ID

您的解決方案可讓客戶使用 SSO 和 Microsoft Entra 功能,甚至是不支援的應用程式。 若要允許使用舊版通訊協議進行存取,您的應用程式會呼叫 Microsoft Entra ID 來驗證使用者並套用 Microsoft Entra 條件式存取原則。 從您的主控台啟用此整合。 在您的解決方案與 Microsoft Entra ID 之間建立 SAML 或 OIDC 應用程式註冊。

建立 SAML 應用程式註冊

使用下列自定義應用程式範本標識碼:8adf8e6e-67b2-4cf2-a259-e3dc5476c621。 然後,進行下列 API 呼叫,並在 JSON 主體中提供顯示名稱:

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
{
    "displayname": "Custom SAML App"
}

進行 API 呼叫之後,您會產生服務主體物件。 擷取要用於下一個 API 呼叫的應用程式識別碼和服務主體識別碼。

使用 SAML 通訊協定和登入 URL 修補服務主體物件:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "preferredSingleSignOnMode":"saml",
    "loginURL": "https://www.samlapp.com"
}

使用重新導向 URI 和識別碼 URI 修補應用程式物件:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/54c4806b-b260-4a12-873c-967116983792
{
    "web": {
    "redirectUris":["https://www.samlapp.com"]},
    "identifierUris":["https://www.samlapp.com"]
}

建立 OIDC 應用程式註冊

針對自定義應用程式使用下列範本標識碼:8adf8e6e-67b2-4cf2-a259-e3dc5476c621。 進行下列 API 呼叫,並在 JSON 主體中提供顯示名稱:

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
{
    "displayname": "Custom OIDC App"
}

從 API 呼叫中,擷取應用程式識別碼和服務主體標識碼,以在下一個 API 呼叫中使用。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/{Application Object ID}
{
    "web": {
    "redirectUris":["https://www.samlapp.com"]},
    "identifierUris":["[https://www.samlapp.com"],
    "requiredResourceAccess": [
    {
        "resourceAppId": "00000003-0000-0000-c000-000000000000",
        "resourceAccess": [
        {
            "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182",
            "type": "Scope"
        },
        {
            "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
            "type": "Scope"
        },
        {
            "id": "37f7f235-527c-4136-accd-4a02d197296e",
            "type": "Scope"
        }]
    }]
}

注意

節點中的 resourceAccess API 許可權會將 openid、User.Read 和offline_access許可權授與應用程式,以啟用登入。 請參閱 Microsoft Graph 許可權概觀

套用條件式存取原則

客戶和合作夥伴可以使用 Microsoft Graph API 來建立或套用每個應用程式 條件式存取原則。 對於合作夥伴,客戶可以在不使用 Microsoft Entra 系統管理中心的情況下,從您的解決方案套用這些原則。 有兩個選項可套用 Microsoft Entra 條件式存取原則:

使用條件式存取原則

如需條件式存取原則的清單,請執行下列查詢。 取得要修改的原則對象標識碼。

Authorization: Required with a valid Bearer token
Method:GET

https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies

若要修補原則,請在 JSON 主體中包含要位於 範圍內 includeApplications的應用程式物件識別碼:

Authorization: Required with a valid Bearer token
Method: PATCH

https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/{policyid}
{
    "displayName":"Existing Conditional Access Policy",
    "state":"enabled",
    "conditions": 
    {
        "applications": 
        {
            "includeApplications":[
                "00000003-0000-0ff1-ce00-000000000000", 
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ] 
        }
    },
    "grantControls": 
    {
        "operator":"OR",
        "builtInControls":[
            "mfa"
        ]
    }
}

建立新的條件式存取原則

在 JSON 主體中,將應用程式物件標識元新增至 的範圍 includeApplications

Authorization: Required with a valid Bearer token
Method: POST

https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/
{
    "displayName":"New Conditional Access Policy",
    "state":"enabled",
    "conditions": 
    {
        "applications": {
            "includeApplications":[
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ]
        }
    },
    "grantControls": {
        "operator":"OR",
        "builtInControls":[
            "mfa"
        ]
    }
}
#Policy Template for Requiring Compliant Device

{
    "displayName":"Enforce Compliant Device",
    "state":"enabled",
    "conditions": {
        "applications": {
            "includeApplications":[
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ]
        }
    },
    "grantControls": {
        "operator":"OR",
        "builtInControls":[
            "compliantDevice",
            "domainJoinedDevice"
        ]
    }
}

#Policy Template for Block

{
    "displayName":"Block",
    "state":"enabled",
    "conditions": {
        "applications": {
            "includeApplications":[
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ] 
        }
    },
    "grantControls": {
        "operator":"OR",
        "builtInControls":[
            "block"
        ]
    }
}

如果客戶將應用程式從您的解決方案新增至 Microsoft Entra ID,您可以自動化系統管理員同意 Microsoft Graph。 您需要您在 API 呼叫中建立的應用程式服務主體對象識別碼,以及來自外部租使用者的 Microsoft Graph 服務主體物件識別碼。

進行下列 API 呼叫,以取得 Microsoft Graph 服務主體物件識別碼:

Authorization: Required with a valid Bearer token
Method:GET

https://graph.microsoft.com/v1.0/serviceprincipals/?$filter=appid eq '00000003-0000-0000-c000-000000000000'&$select=id,appDisplayName

若要自動化管理員同意,請進行下列 API 呼叫:

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/oauth2PermissionGrants
{
    "clientId":"{Service Principal Object ID of Application}",
    "consentType":"AllPrincipals",
    "principalId":null,
    "resourceId":"{Service Principal Object ID Of Microsoft Graph}",
    "scope":"openid user.read offline_access}"
}

取得令牌簽署憑證

若要取得令牌簽署憑證的公用部分,請使用 GET 來自應用程式的 Microsoft Entra 元數據端點:

Method:GET

https://login.microsoftonline.com/{Tenant_ID}/federationmetadata/2007-06/federationmetadata.xml?appid={Application_ID}

指派使用者與群組

將應用程式發佈至 Microsoft Entra ID 之後,您可以將應用程式指派給使用者和群組,以確保應用程式出現在 我的應用程式 入口網站上。 此指派位於您建立應用程式時所產生的服務主體物件上。 請參閱 我的應用程式 入口網站概觀

取得 AppRole 應用程式可能與其相關聯的實例。 SaaS 應用程式通常會有與其相關聯的各種 AppRole 實例。 一般而言,針對自定義應用程式,有一個默認 AppRole 實例。 取得您想要指派的 AppRole 實例識別碼:

Authorization: Required with a valid Bearer token
Method:GET

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27

從 Microsoft Entra ID 取得您想要指派給應用程式的使用者或群組物件識別碼。 從先前的 API 呼叫取得應用程式角色識別碼,並使用服務主體上的修補程式主體提交它:

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "principalId":"{Principal Object ID of User -or- Group}",
    "resourceId":"{Service Principal Object ID}",
    "appRoleId":"{App Role ID}"
}

合作關係

為了協助保護舊版應用程式,使用網路和傳遞控制器時,Microsoft 與下列應用程式傳遞控制器 (ADC) 提供者建立了合作關係。

下列 VPN 解決方案提供者會與 Microsoft Entra ID 連線,以啟用新式驗證和授權方法,例如 SSO 和多重要素驗證 (MFA)。

下列軟體定義的周邊 (SDP) 解決方案提供者會與 Microsoft Entra ID 連線,以取得 SSO 和 MFA 等驗證和授權方法。