← Cloudflare One / cloudflare-one / access-controls / applications / http-apps / saas-apps
Obecná aplikace SAML
Tato stránka obsahuje obecné pokyny pro nastavení aplikace SaaS v Cloudflare Access pomocí ověřovacího protokolu SAML.
Předpoklady
- poskytovatel identity nakonfigurováno ve službě Cloudflare One
- Přístup správce k účtu aplikace SaaS
1. Získejte adresy URL aplikace SaaS
Z účtu vaší aplikace SaaS získejte tyto adresy URL:
- Entity ID: Jedinečná adresa URL vydaná pro vaši aplikaci SaaS, například
https://<your-domain>.my.salesforce.com. - Assertion Consumer Service URL: Endpoint poskytovatele služby pro příjem a zpracování SAML assertions.
2. Přidejte svou aplikaci do Access
-
V Cloudflare dashboard ↗, přejděte na Zero Trust > Řízení přístupu > Aplikace.
-
Vyberte Vytvořit novou aplikaci.
-
Vyberte Aplikace SaaS.
-
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.
-
Vyberte SAML.
-
Vyberte Přidat aplikaci.
-
Zadejte Entity ID a Assertion Consumer Service URL získané z účtu vaší aplikace SaaS.
-
Vyberte Name ID Format očekávaná vaší aplikací SaaS (obvykle E-mail).
-
(Volitelné) Nakonfigurujte veškerá další výroky o atributech SAML vyžadované vaší aplikací SaaS.
-
Zkopírujte SSO endpoint, Access Entity ID nebo Issuer, a Veřejný klíč.
-
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.
-
Nakonfigurujte, jak se budou uživatelé ověřovat:
Vyberte poskytovatelé identity chcete povolit pro svou aplikaci.
(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.
- (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.
-
(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.
- 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í
-
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:
- SSO endpoint
- Access Entity ID nebo Issuer
- Veřejný klíč
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):
id: UUID identity uživatele v Accessname: Celé jméno uživatele (napříkladJohn Doe)email: E-mailová adresa uživatelegroups: Členství ve skupině poskytovatele identity
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:
- Název: Název atributu SAML
- přívětivý název SAML: (Volitelné) Srozumitelný název atributu SAML
- Formát názvu: Zadejte Název formátu, který aplikace SaaS očekává:
Unspecified: (výchozí) Není vyžadován žádný konkrétní formát.URI: Název má formát, napříkladurn:ietf:params:scim:schemas:core:2.0:User:userNamenebourn:oid:2.5.4.42.Basic: Název je běžný řetězec, napříkladuserName.
- claim IdP: Hodnota poskytovatele identity, která se má mapovat na tento atribut SAML. Můžete vybrat libovolnou atribut SAML nebo OIDC claim která byla nakonfigurována v integraci Cloudflare One IdP.
- Povinné: Pokud je atribut označen jako povinný, ale poskytovatel IdP jej neposkytne, Cloudflare ověřovací požadavek odmítne a zobrazí chybovou stránku.
- Přidat claim podle IdP: (Volitelné) Pokud jste pro aplikaci SaaS zapnuli více poskytovatelů identity, můžete pro každého IdP zvolit odlišné mapování atributů. Tyto hodnoty přepíší nadřazený claim IdP.
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ů.
$ ~> |$|{}, ['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:
{
"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.
$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):
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.
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:
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": ""
}
}'