INTEGRITY Dokumentace

Obecná aplikace SAML

Tato stránka obsahuje obecné pokyny pro nastavení aplikace SaaS v Cloudflare Access pomocí ověřovacího protokolu SAML.

Předpoklady

1. Získejte adresy URL aplikace SaaS

Z účtu vaší aplikace SaaS získejte tyto adresy URL:

2. Přidejte svou aplikaci do Access

  1. V Cloudflare dashboard, přejděte na Zero Trust > Řízení přístupu > Aplikace.

  2. Vyberte Vytvořit novou aplikaci.

  3. Vyberte Aplikace SaaS.

  4. Vyberte svůj Aplikace z rozbalovací nabídky. Pokud vaše aplikace není uvedena v seznamu, zadejte vlastní název do Aplikace pole a vyberte textové pole, které se zobrazí níže.

  5. Vyberte SAML.

  6. Vyberte Přidat aplikaci.

  7. Zadejte Entity ID a Assertion Consumer Service URL získané z účtu vaší aplikace SaaS.

  8. Vyberte Name ID Format očekávaná vaší aplikací SaaS (obvykle E-mail).

  9. (Volitelné) Nakonfigurujte veškerá další výroky o atributech SAML vyžadované vaší aplikací SaaS.

  10. Zkopírujte SSO endpoint, Access Entity ID nebo Issuer, a Veřejný klíč.

  1. V části Zásady Access, přidejte existující zásadu nebo vytvořit novou zásadu řídit, kdo se může připojit k vaší aplikaci. Všechny aplikace Access ve výchozím nastavení odmítají přístup (deny by default): uživatel musí nejprve odpovídat zásadě Allow, aby mu byl přístup udělen.

  2. Nakonfigurujte, jak se budou uživatelé ověřovat:

    1. Vyberte poskytovatelé identity chcete povolit pro svou aplikaci.

    2. (Doporučeno) Pokud plánujete povolit přístup pouze přes jednoho poskytovatele IdP, zapněte Použít okamžité ověřování. Koncovým uživatelům se nezobrazí Přihlašovací stránka Cloudflare Access. Cloudflare místo toho přesměruje uživatele přímo na vaše přihlášení přes SSO.

    3. (Volitelné) Zapněte Ověření pomocí Cloudflare One Client a umožněte uživatelům ověřit se v aplikaci pomocí jejich Identita relace Cloudflare One Client.
  3. (Volitelné) Přejděte na Další nastavení přizpůsobit uživatelský zážitek aplikace:

    • Přizpůsobení App Launcher: Nastavte, jak se tato aplikace zobrazuje uživatelům v App Launcher.
    • Vlastní blokovací stránky: Vyberte, co uživatelé uvidí, když jim bude odepřen přístup k aplikaci.

      • Výchozí nastavení Cloudflare: Znovu načtěte přihlašovací stránka a zobrazí zprávu o blokování pod logem Cloudflare Access. Výchozí zpráva zní That account does not have access, nebo můžete zadat vlastní zprávu.
      • Redirect URL: Přesměrování na zadaný web.
      • Vlastní šablona stránky: Zobrazit vlastní blokovací stránka hostovaný v Cloudflare One.
  4. Vyberte Vytvořit.

3. Nakonfigurujte SSO ve vaší aplikaci SaaS

Dále nakonfigurujte svou aplikaci SaaS tak, aby vyžadovala přihlášení uživatelů přes Cloudflare Access. Pokyny, jak nakonfigurovat externího poskytovatele SAML SSO, najdete v dokumentaci vaší aplikace SaaS. Z Cloudflare One budete potřebovat následující hodnoty:

Tato data můžete do aplikace SaaS zadat ručně, nebo nahrát soubor metadat XML. Metadata jsou dostupná na této adrese URL: <SSO endpoint>/saml-metadata.

Ověřit odpověď SAML

Když Cloudflare vystupuje jako poskytovatel identity SAML, podepisuje SAML Response i SAML Assertion pomocí algoritmu SHA-256. Aplikace SaaS může tento podpis ověřit pomocí Veřejný klíč který nahrajete do aplikace SaaS.

4. Otestujte integraci

Otevřete okno prohlížeče v anonymním režimu a přejděte na přihlašovací URL adresu aplikace SaaS. Budete přesměrováni na přihlašovací obrazovku Cloudflare Access a vyzváni k přihlášení u svého poskytovatele identity.

atributy SAML

atributy SAML označují charakteristiky identity uživatele, které Cloudflare Access po úspěšném ověření sdílí s vaší aplikací SAML SaaS. Cloudflare Access ve výchozím nastavení předává aplikaci SaaS následující atributy (pokud jsou k dispozici):

V Access for SaaS můžete přidat další atributy SAML nebo upravit výrok SAML odesílaný do aplikace SaaS. Díky tomu můžete integrovat aplikace SaaS, které mají specifické požadavky na atributy SAML.

výroky o atributech SAML

Chcete-li odeslat další atributy SAML do své aplikace SaaS, nakonfigurujte pro každý atribut následující pole:

transformace atributů JSONata

V Pokročilá nastavení > Transformace, můžete zadat JSONata skript, který upraví kopii User Registry identity. Hodí se to k nastavení výchozích hodnot, vyloučení e-mailových adres nebo zajištění, že uživatelská jména splňují libovolná kritéria. Access odešle upravenou identitu uživatele do aplikace SaaS jako atributy SAML.

To odpovídá saml_attribute_transform_jsonata v API pro aplikace Access.

Následující skript JSONata například sloučí názvy skupin do seznamu a přidá eduPersonPrincipalName pole, které se mapuje na e-mail uživatele.

$merge([$, {"groups": groups.name, 'eduPersonPrincipalName': email}])

Zde je příklad identity uživatele před aplikací transformace JSONata:

{
  "account_id": "699d98642c564d2e855e9661899b7252",
  "amr": [
    "pwd"
  ],
  "auth_status": "NONE",
  "common_name": "",
  "device_id": "c1744f8b-faa1-48a4-9e5c-02ac921467fa",
  "device_sessions": {
    "49e653db-991e-11ee-af26-2243bf8c3428": {
      "last_authenticated": 1703004275
    }
  },
  "devicePosture": {
    "8534a230-e85e-4183-8964-a4b7dcf72986": {
      "rule_name": "Warp",
      "success": true,
      "type": "warp"
    }
  },
  "email": "[email protected]",
  "gateway_account_id": "bTSquyUGwLQjYJn8cI8S1h6M6wU",
  "geo": {
    "country": "US"
  },
  "groups": [
    {
      "id": "12fdf91a-fb23-41b3-995a-de2f72c61d0e",
      "name": "IdentityProtection-RiskyUser-RiskLevel-low"
    },
    {
      "id": "12348f47-8234-4860-a03f-c2a1513f267b",
      "name": "Global Administrator"
    },
    {
      "id": "11235980-87d7-4917-b0aa-74c01914c40e",
      "name": "Application Administrator"
    }
  ],
  "iat": 1659474397,
  "id": "OidHvkPt-I-13IBSnd77UJ8cHgsrUpjs3W6_4t6ES7M",
  "idp": {
    "id": "b08e8c0c-a75d-4b3f-8e7b-cd427b7c7b47",
    "type": "azureAD"
  }
}

Výsledek po použití ukázkového skriptu JSONata:

{
  "account_id": "699d98642c564d2e855e9661899b7252",
  "amr": [
    "pwd"
  ],
  "auth_status": "NONE",
  "common_name": "",
  "device_id": "c1744f8b-faa1-48a4-9e5c-02ac921467fa",
  "device_sessions": {
    "49e653db-991e-11ee-af26-2243bf8c3428": {
      "last_authenticated": 1703004275
    }
  },
  "devicePosture": {
    "8534a230-e85e-4183-8964-a4b7dcf72986": {
      "rule_name": "Warp",
      "success": true,
      "type": "warp"
    }
  },
  "email": "[email protected]",
  "gateway_account_id": "bTSquyUGwLQjYJn8cI8S1h6M6wU",
  "geo": {
    "country": "US"
  },
  "groups": [
    "IdentityProtection-RiskyUser-RiskLevel-low",
    "Global Administrator",
    "Application Administrator"
  ],
  "iat": 1659474397,
  "id": "OidHvkPt-I-13IBSnd77UJ8cHgsrUpjs3W6_4t6ES7M",
  "idp": {
    "id": "b08e8c0c-a75d-4b3f-8e7b-cd427b7c7b47",
    "type": "azureAD"
  },
  "eduPersonPrincipalName": "[email protected]"
}

Další případy použití transformace JSONata najdete v následujících příkladech.

Odebrat atribut groups

Následující skript JSONata odstraňuje groups atribut SAML. To se hodí, pokud vaše aplikace SaaS nepotřebuje dostávat informace o skupinách uživatelů.

výraz JSONata
$ ~> |$|{}, ['groups']|

Výsledek po použití transformace JSONata:

{
  "account_id": "699d98642c564d2e855e9661899b7252",
  "amr": [
    "pwd"
  ],
  "auth_status": "NONE",
  "common_name": "",
  "device_id": "c1744f8b-faa1-48a4-9e5c-02ac921467fa",
  "device_sessions": {
    "49e653db-991e-11ee-af26-2243bf8c3428": {
      "last_authenticated": 1703004275
    }
  },
  "devicePosture": {
    "8534a230-e85e-4183-8964-a4b7dcf72986": {
      "rule_name": "Warp",
      "success": true,
      "type": "warp"
    }
  },
  "email": "[email protected]",
  "gateway_account_id": "bTSquyUGwLQjYJn8cI8S1h6M6wU",
  "geo": {
    "country": "US"
  },
  "iat": 1659474397,
  "id": "OidHvkPt-I-13IBSnd77UJ8cHgsrUpjs3W6_4t6ES7M",
  "idp": {
    "id": "b08e8c0c-a75d-4b3f-8e7b-cd427b7c7b47",
    "type": "azureAD"
  }
}

Přejmenujte pole groups a odeberte ID skupiny

Následující skript JSONata mění groups.name pole z name na group_name a odebere groups.id pole:

výraz JSONata
{
  "account_id": account_id,
  "amr": amr,
  "auth_status": auth_status,
  "common_name": common_name,
  "devicePosture": devicePosture,
  "device_id": device_id,
  "device_sessions": device_sessions,
  "email": email,
  "gateway_account_id": gateway_account_id,
  "geo": geo,
	"groups": $map($.groups, function($group) {
    {"group_name": $group.name}}),
  "iat": iat,
  "id": id,
  "idp": idp
}

Výsledek po použití transformace JSONata:

{
  "account_id": "699d98642c564d2e855e9661899b7252",
  "amr": [
    "pwd"
  ],
  "auth_status": "NONE",
  "common_name": "",
  "devicePosture": {
    "8534a230-e85e-4183-8964-a4b7dcf72986": {
      "rule_name": "Warp",
      "success": true,
      "type": "warp"
    }
  },
  "device_id": "c1744f8b-faa1-48a4-9e5c-02ac921467fa",
  "device_sessions": {
    "49e653db-991e-11ee-af26-2210bf8c3428": {
      "last_authenticated": 1703004275
    }
  },
  "email": "[email protected]",
  "gateway_account_id": "bTSquyUGwLQjYJn8cI8S1h6M6wU",
  "geo": {
    "country": "US"
  },
  "groups": [
    {
      "group_name": "IdentityProtection-RiskyUser-RiskLevel-low"
    },
    {
      "group_name": "Global Administrator"
    },
    {
      "group_name": "Application Administrator"
    }
  ],
  "iat": 1659474397,
  "id": "OidHvkPt-I-13IBSnd77UJ8cHgsrUpjs3W6_4t6ES7M",
  "idp": {
    "id": "b08e8c0c-a75d-4b3f-8e7b-cd427b7c7b47",
    "type": "azureAD"
  }
}

Filtrovat skupiny podle názvu

Následující skript JSONata filtruje skupiny podle shody s regulárním výrazem.

výraz JSONata
$merge([$, { "groups": $filter(groups, function($v) { $contains($v.name, /Administrator/) }) }])

Výsledek po použití transformace JSONata:

{
  "account_id": "699d98642c564d2e855e9661899b7252",
  "amr": [
    "pwd"
  ],
  "auth_status": "NONE",
  "common_name": "",
  "device_id": "c1744f8b-faa1-48a4-9e5c-02ac921467fa",
  "device_sessions": {
    "49e653db-991e-11ee-af26-2243bf8c3428": {
      "last_authenticated": 1703004275
    }
  },
  "devicePosture": {
    "8534a230-e85e-4183-8964-a4b7dcf72986": {
      "rule_name": "Warp",
      "success": true,
      "type": "warp"
    }
  },
  "email": "[email protected]",
  "gateway_account_id": "bTSquyUGwLQjYJn8cI8S1h6M6wU",
  "geo": {
    "country": "US"
  },
  "groups": [
    {
      "id": "12348f47-8234-4860-a03f-c2a1513f267b",
      "name": "Global Administrator"
    },
    {
      "id": "11235980-87d7-4917-b0aa-74c01914c40e",
      "name": "Application Administrator"
    }
  ],
  "iat": 1659474397,
  "id": "OidHvkPt-I-13IBSnd77UJ8cHgsrUpjs3W6_4t6ES7M",
  "idp": {
    "id": "b08e8c0c-a75d-4b3f-8e7b-cd427b7c7b47",
    "type": "azureAD"
  }
}

NameID transform

Access ve výchozím nastavení odesílá e-mailovou adresu uživatele jako SAML NameID. Některé aplikace SaaS vyžadují jinou hodnotu, například ID zaměstnance, upravenou e-mailovou adresu nebo uživatelské jméno ze staršího systému.

Můžete přizpůsobit NameID nastavením name_id_transform_jsonata pole u aplikace SaaS prostřednictvím API pro aplikace Access. Toto pole přijímá JSONata výraz, který se vyhodnocuje vůči identitě uživatele a musí vrátit jedinou řetězcovou hodnotu. Výsledek nahradí výchozí NameID v SAML assertion.

Pokud chcete například upravit e-mail uživatele tak, aby obsahoval +sandbox příponu (užitečné při připojování více instancí stejné aplikace SaaS):

Nastavte transformaci NameID prostřednictvím API
curl --request PUT \
https://api.cloudflare.com/client/v4/accounts/{account_id}/access/apps/{app_id} \
--header "Authorization: Bearer {api_token}" \
--header "Content-Type: application/json" \
--data '{
  "saas_app": {
    "auth_type": "saml",
    "name_id_transform_jsonata": "$substringBefore(email, '\''@'\'') & '\''+sandbox@'\'' & $substringAfter(email, '\''@'\'')"
  }
}'

Pokud má uživatel e-mail [email protected], tento výraz vytvoří NameID z [email protected].

Použít ID zaměstnance jako NameID

Chcete-li odeslat atribut, který není e-mailem, například ID zaměstnance, uveďte název atributu přímo ve výrazu JSONata. Tento atribut musí být dostupný v identitě uživatele poskytnuté IdP.

Nastavit employee_id jako NameID
curl --request PUT \
https://api.cloudflare.com/client/v4/accounts/{account_id}/access/apps/{app_id} \
--header "Authorization: Bearer {api_token}" \
--header "Content-Type: application/json" \
--data '{
  "saas_app": {
    "auth_type": "saml",
    "name_id_transform_jsonata": "employee_id"
  }
}'

Pokud identita uživatele obsahuje "employee_id": "efgh5678", NameID odeslaný v tvrzení SAML bude efgh5678.

Odebrat transformaci NameID

Chcete-li se vrátit k výchozímu chování (odesílání e-mailu uživatele jako NameID), nastavte pole na prázdný řetězec:

Odebrat transformaci NameID
curl --request PUT \
https://api.cloudflare.com/client/v4/accounts/{account_id}/access/apps/{app_id} \
--header "Authorization: Bearer {api_token}" \
--header "Content-Type: application/json" \
--data '{
  "saas_app": {
    "auth_type": "saml",
    "name_id_transform_jsonata": ""
  }
}'