{"id":16547,"date":"2016-09-06T16:22:32","date_gmt":"2016-09-06T14:22:32","guid":{"rendered":"\/?page_id=16547"},"modified":"2024-03-05T17:40:29","modified_gmt":"2024-03-05T15:40:29","slug":"authentification-de-lacces-web-pour-les-apps","status":"publish","type":"page","link":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/","title":{"rendered":"Authentification de l\u2019acc\u00e8s Web pour les Apps"},"content":{"rendered":"<div id=\"pl-16547\"  class=\"panel-layout\" ><div id=\"pg-16547-0\"  class=\"panel-grid panel-has-style\" ><div class=\"panel-row-style panel-row-style-for-16547-0\" ><div id=\"pgc-16547-0-0\"  class=\"panel-grid-cell\" ><div id=\"panel-16547-0-0-0\" class=\"so-panel widget widget_sow-hero panel-first-child panel-last-child\" data-index=\"0\" ><div\n\t\t\t\n\t\t\tclass=\"so-widget-sow-hero so-widget-sow-hero-default-6e283e92799f-16547 so-widget-fittext-wrapper\"\n\t\t\t data-fit-text-compressor=\"0.85\"\n\t\t>\t\t\t\t<div class=\"sow-slider-base\" style=\"display: none\" tabindex=\"0\">\n\t\t\t\t\t<ul\n\t\t\t\t\tclass=\"sow-slider-images\"\n\t\t\t\t\tdata-settings=\"{&quot;pagination&quot;:true,&quot;speed&quot;:800,&quot;timeout&quot;:8000,&quot;paused&quot;:false,&quot;pause_on_hover&quot;:false,&quot;swipe&quot;:true,&quot;nav_always_show_desktop&quot;:&quot;&quot;,&quot;nav_always_show_mobile&quot;:&quot;&quot;,&quot;breakpoint&quot;:&quot;780px&quot;,&quot;unmute&quot;:false,&quot;anchor&quot;:null}\"\n\t\t\t\t\t\t\t\t\t\tdata-anchor-id=\"\"\n\t\t\t\t>\t\t<li class=\"sow-slider-image  sow-slider-image-cover\" style=\"visibility: visible;;background-color: #333333;background-image: url(https:\/\/www.evidian.com\/wp-content\/smush-webp\/2020\/11\/WAM-for-apps-min-1.jpg.webp)\" >\n\t\t\t\t\t<div class=\"sow-slider-image-container\">\n\t\t\t<div class=\"sow-slider-image-wrapper\">\n\t\t\t\t<h1>Livre blanc Web Access Management <br \/>Authentification de l\u2019acc\u00e8s Web pour les Apps<\/h1>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t<\/ul>\t\t\t\t<ol class=\"sow-slider-pagination\">\n\t\t\t\t\t\t\t\t\t\t\t<li><a href=\"#\" data-goto=\"0\" aria-label=\"Display slide 1\"><\/a><\/li>\n\t\t\t\t\t\t\t\t\t<\/ol>\n\n\t\t\t\t<div class=\"sow-slide-nav sow-slide-nav-next\">\n\t\t\t\t\t<a href=\"#\" data-goto=\"next\" aria-label=\"Next slide\" data-action=\"next\">\n\t\t\t\t\t\t<em class=\"sow-sld-icon-thin-right\"><\/em>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"sow-slide-nav sow-slide-nav-prev\">\n\t\t\t\t\t<a href=\"#\" data-goto=\"previous\" aria-label=\"Previous slide\" data-action=\"prev\">\n\t\t\t\t\t\t<em class=\"sow-sld-icon-thin-left\"><\/em>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div><\/div><\/div><\/div><\/div><\/div><div id=\"pg-16547-1\"  class=\"panel-grid panel-has-style\" ><div class=\"panel-row-style panel-row-style-for-16547-1\" ><div id=\"pgc-16547-1-0\"  class=\"panel-grid-cell\" ><div id=\"panel-16547-1-0-0\" class=\"so-panel widget widget_sow-editor panel-first-child panel-last-child\" data-index=\"1\" ><div\n\t\t\t\n\t\t\tclass=\"so-widget-sow-editor so-widget-sow-editor-base\"\n\t\t\t\n\t\t>\n<div class=\"siteorigin-widget-tinymce textwidget\">\n\t<h2>F\u00e9d\u00e9ration des Identit\u00e9s et SSO<br \/>\nLes pi\u00e8ges \u00e0 \u00e9viter durant le d\u00e9veloppement d\u2019une application Web :<\/h2>\n<h3>Toute erreur de conception dans la gestion de l\u2019authentification peut permettre de contourner le m\u00e9canisme d\u2019authentification.<\/h3>\n<p>R\u00e9cemment, une application Web bien connue fut expos\u00e9e \u00e0 une faille de s\u00e9curit\u00e9. Elle \u00e9tait s\u00e9curis\u00e9e par une authentification forte \u00e0 deux facteurs. Malheureusement, il \u00e9tait possible de la contourner gr\u00e2ce \u00e0 une API Web utilis\u00e9e par la version mobile de l\u2019application.<\/p>\n<p>De nouveaux \u00ab designs patterns \u00bb permettent de d\u00e9velopper sans distinction des applications Web et des applications mobiles, en utilisant des API qui exposent les m\u00eames fonctionnalit\u00e9s pour les deux mondes. Dans les deux cas, l\u2019authentification et le contr\u00f4le<br \/>\nd\u2019acc\u00e8s doivent \u00eatre correctement adapt\u00e9s et g\u00e9r\u00e9s. Il doit \u00eatre impossible de contourner les s\u00e9curit\u00e9s mises en place.<\/p>\n<p>Un gestionnaire d\u2019acc\u00e8s Web (WAM - Web Access Manager) int\u00e8gre la gestion de l\u2019authentification dynamique et la gestion des autorisations dynamiques tout en prot\u00e9geant et en masquant les ressources prot\u00e9g\u00e9es d\u2019une application Web. Le niveau de s\u00e9curit\u00e9 de l\u2019acc\u00e8s Web ne d\u00e9pendra que d\u2019un seul composant :\u00a0 WAM. Les applications Web sont prot\u00e9g\u00e9es sans contournement de la s\u00e9curit\u00e9, m\u00eame si de nouveaux services sont d\u00e9velopp\u00e9s et d\u00e9ploy\u00e9s.<\/p>\n<p><a href=\"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/\"><strong>En savoir plus sur Web Access Manager: Acc\u00e8s simplifi\u00e9 &amp; s\u00e9curis\u00e9 (SSO &amp; F\u00e9d\u00e9ration d\u2019identit\u00e9) aux applications cloud et sur site approuv\u00e9<\/strong><\/a><\/p>\n<p>Le paysage moderne de l\u2019informatique repose de plus en plus sur des\u00a0<strong>applications Cloud<\/strong>. Cependant, les\u00a0<strong>applications on-premise<\/strong>\u00a0dominent toujours. Evidian<strong>\u00a0Web Access Manager (WAM)<\/strong>\u00a0vous permet de r\u00e9pondre de mani\u00e8re transparente aux d\u00e9fis des acc\u00e8s de ces deux environnements.<\/p>\n<p>Tandis que la s\u00e9curit\u00e9 reste votre principale pr\u00e9occupation, les utilisateurs s\u2019attendent\u00a0<strong>\u00e0 une transformation num\u00e9rique transparente<\/strong>\u00a0en entreprise. Que ce soit en utilisant les outils de l\u2019entreprise, leurs propres appareils au sein de l\u2019entreprise ou directement depuis internet.<\/p>\n<ul>\n<li><strong>SSO pour toutes les ressources Web (Legacy, modernes, mobiles, APIs\u2026)<\/strong><\/li>\n<li><strong>Exploitez les protocoles de f\u00e9d\u00e9ration modernes<\/strong><\/li>\n<li><strong>Portail\/passerelle d\u2019acc\u00e8s int\u00e9gr\u00e9(e)<\/strong><\/li>\n<li><strong>Authentification multi-facteurs contextuelle<\/strong><\/li>\n<li><strong>Politiques d\u2019acc\u00e8s granulaires<\/strong><\/li>\n<\/ul>\n<\/div>\n<\/div><\/div><\/div><div id=\"pgc-16547-1-1\"  class=\"panel-grid-cell\" ><div id=\"panel-16547-1-1-0\" class=\"widget_text so-panel widget widget_custom_html panel-first-child panel-last-child\" data-index=\"2\" ><div class=\"textwidget custom-html-widget\"><!-- search for BR to find all modifications made from the original script -->\r\n<script src=\"\/\/pages.atos.net\/js\/forms2\/js\/forms2.min.js\"><\/script>\r\n<!-- BR - add Japan translation -->\r\n<!--\r\n<script src=\"\/\/pages.atos.net\/rs\/247-MBJ-716\/images\/translations.js\"><\/script>\r\n-->\r\n<script src=\"https:\/\/www.evidian.com\/p\/sm7\/translations.js?ver=1.15\"><\/script>\r\n\r\n\r\n<style>\r\n\/* forms color = new blue *\/\r\nform.mktoForm, .mktoFormCol {\r\n    background-color: #006878;\r\n    padding: 20px 20px 30px 10px;\r\n    border-radius: 20px 20px 20px 20px;\r\n\twidth: 95%!important;\r\n\tmargin: auto;\r\n    font-family: 'Montserrat', sans-serif!important;\r\n}\r\n\r\n.panel-cell-style {\r\n    background-color: #006878!important;\r\n    font-family: 'Montserrat', sans-serif!important;\r\n}\r\n\r\nlabel, .mktoHtmlText {\r\n    font-family: 'Montserrat', sans-serif!important;\r\n    color: #ffffff!important;\r\n}\r\n\r\n.mktoButton {\r\n    background-color: #ffffff!important;\r\n    border: 1px solid #002D3C !important;\r\n    font-family: 'Montserrat', sans-serif!important;\r\n    color: #006878!important;\r\n}\r\n\r\n.mktoButton:hover {\r\n    background-color: #002D3C!important;\r\n    font-family: 'Montserrat', sans-serif!important;\r\n    color: #ffffff!important;\r\n\tfont-weight:bold;\r\n}\r\n\r\n.mktoField {\r\n    border: 1px solid #002D3C !important;\r\n    font-family: 'Montserrat', sans-serif!important;\r\n    color: #5A5A5A;\r\n}\r\n\r\n    .setToInvisible {\r\n        display: none !important;\r\n    }\r\n    .setToVisible {\r\n        display: block;\r\n    }\r\n    .mktoErrorRealign {\r\n        left: 2%;\r\n        right: unset !important;\r\n    }\r\n    #mktoFormThankYouMessage {\r\n        text-align: center;\r\n        font-family:'Montserrat', sans-serif!important; \r\n        font-size: 15px;\r\n        padding: 5px;\r\n        \r\n    }\r\n    #mktoFormThankYouMessage a {\r\n        color: #0596FF;\r\n        text-decoration: underline;\r\n    }\r\n    @media only screen and (max-width: 1400px)  {\r\n        .mktoErrorRealign {\r\n            left: 4%;\r\n            right: unset !important;\r\n        }\r\n    }\r\n    @media only screen and (max-width: 768px)  {\r\n        .mktoErrorRealign {\r\n            left: 10%;\r\n            right: unset !important;\r\n        }\r\n    }\r\n\r\n\r\n<\/style>\r\n\r\n<!--Please insert into <form> below\r\n    id=\"mktoForm_xxxx\"              - where xxxx is the marketo form ID. (not always 4 digits) (1047 = atos primary form, sandbox version) \r\n    form-type=\"TypeOfForm\"          - where TypeOfForm is one of: Thank You; Asset Download; Page Redirect.\r\n    data-content=\"NameOfAsset\"      - where NameOfAsset is a user-friendly title of the asset to download.\r\n    data-destination=\"UrlOfAsset\"   - where UrlOfAsset is the full URL of the asset to download or page redirect. (e.g. https:\/\/clever-touch.com\/)\r\n    class=\"mktoForm\"                - this does not need editing. \r\n-->\r\n\r\n<form id=\"mktoForm_1624\"\r\n      form-type=\"Page Redirect\"\r\n      data-content=\"WAM_WP_FR Authentification de l\u2019acc\u00e8s Web pour les Apps\"\r\n      data-destination=\"https:\/\/www.evidian.com\/page-redirect.php?c=WAM_WP_FR&amp;url=https:\/\/www.evidian.com\/pdf\/wp-wam-apps-fr.pdf\"\r\n      class=\"mktoForm marketo\">\r\n<\/form>\r\n\r\n<script>\r\n\/\/ begin BR - token for recaptcha verification in marketo-lead-post.php\r\n\tvar reCAPTCHALastUserFingerprint=\"\";\r\n\/\/ end BR\r\n    \/\/in order to access your desired Marketo form change these 2 variables to the 2 provided by the embed code in the line beginning MktoForms2.loadForm\r\n    const baseURL = \"\/\/pages.atos.net\";\r\n    const munchkinID = \"247-MBJ-716\"\r\n\r\n    \/\/takes the id from mktoForm element and converts to just the id number, for use in MktoForms2.loadForm\r\n    const mktoForm_xxxx_ID = document.getElementsByClassName(\"mktoForm\")[0].getAttribute(\"id\")\r\n    const extractDigits = \/\\d+\/;\r\n    const FormID = parseInt(mktoForm_xxxx_ID.match(extractDigits), 10);\r\n    var language;\r\n    var privacyType = \"none\"\r\n    var browserLangFormatted;\r\n    switch (navigator.language) {\r\n        case \"en\": case \"en-GB\":\r\n            browserLangFormatted = \"English GB\";\r\n            break;\r\n        case \"en-US\":\r\n            browserLangFormatted = \"English US\";\r\n            break;\r\n        case \"es\": case \"es-ES\":\r\n            browserLangFormatted = \"European Spanish\";\r\n            break;\r\n        case catchFrenchLanguageCodes(navigator.language): \r\n            browserLangFormatted = \"French\";\r\n            break;\r\n        case catchLatAmSpanishLanguageCodes(navigator.language):\r\n            browserLangFormatted = \"Latin American Spanish\";\r\n            break;\r\n        case catchGermanLanguageCodes(navigator.language):\r\n            browserLangFormatted = \"German\";\r\n            break;\r\n        case \"it\": case \"it-CH\":\r\n            browserLangFormatted = \"Italian\";\r\n            break;\r\n        case \"nl\": case \"nl-BE\":\r\n            browserLangFormatted = \"Dutch\";\r\n            break;\r\n        case \"pt-BR\": \r\n            browserLangFormatted = \"Brazilian Portuguese\"\r\n            break;\r\n        default:\r\n            browserLangFormatted = \"English US\";\r\n            break;\r\n    }\r\n\r\n    \/\/ * @copyright \u00a9 2021 Sanford Whiteman\r\n    \/\/ @license Hippocratic 2.1\r\n    (function(){\r\n\r\n        var userConfig = {\r\n            apiKeys : {\r\n                recaptcha : \"6LfRM6keAAAAACnaog4Sl9nzvzHupd74YADwTAvp\"\r\n            },\r\n            fields : {\r\n                recaptchaFinger : \"reCAPTCHALastUserFingerprint\"\r\n            },\r\n            actions : {\r\n                formSubmit : \"form\"\r\n            },\r\n            debug : {\r\n                testBadFinger : false\r\n            }\r\n        };\r\n\r\n        \/* --- NO NEED TO TOUCH BELOW THIS LINE --- *\/\r\n\r\n        MktoForms2.whenReady(function(mktoForm) {\r\n            var formEl = mktoForm.getFormElem()[0],\r\n                submitButtonEl = formEl.querySelector(\"button[type='submit']\");\r\n\r\n            \/* pending reCAPTCHA widget ready *\/\r\n            submitButtonEl.disabled = true;\r\n\r\n            \/* pending reCAPTCHA verify *\/\r\n            mktoForm.submittable(false);\r\n            mktoForm.locked = false;\r\n\r\n            mktoForm.onValidate(function(native) {\r\n                if (!native) return;\r\n                if(!validate_email()) {\r\n                    \/\/ document.getElementById(\"LblEmail\").focus();\r\n                    \/\/ document.getElementById(\"Email\").focus();\r\n                    \/\/ form.showErrorMessage(\"Please enter your business email address\", emailField); \/\/ under the Email field\r\n                    return;\r\n                }\r\n\r\n                grecaptcha.ready(function() {\r\n                    grecaptcha.execute(userConfig.apiKeys.recaptcha, {\r\n                        action: userConfig.actions.formSubmit\r\n                    })\r\n                        .then(function(recaptchaFinger) {\r\n\t\t                    var mktoFields = {};\r\n                            if (mktoForm.locked == false) {\r\n                                mktoForm.locked = true;\r\n                                if(!userConfig.debug.testBadFinger) {\r\n                                    mktoFields[userConfig.fields.recaptchaFinger] = recaptchaFinger;\r\n                                } else {\r\n                                    mktoFields[userConfig.fields.recaptchaFinger] = \"known bad fingerprint \" + Math.random();\r\n                                }\r\n                                mktoForm.addHiddenFields(mktoFields);\r\n\t\t\t\t\t\t\t\t\/\/ begin BR\r\n\t\t\t\t\t\t\t\t\/\/ console.log('token 1='+recaptchaFinger); \/\/ debug\r\n\t\t\t\t\t\t\t\t\/\/ a recaptcha token can be verified only once\r\n\t\t\t\t\t\t\t\t\/\/ cannot used this token in marketo-lead-post.php else bug in marketo backend\r\n\t\t\t\t\t\t\t\t\/\/ reCAPTCHALastUserFingerprint=mktoFields.reCAPTCHALastUserFingerprint;\r\n\t\t\t\t\t\t\t\t\/\/ end BR\r\n                                mktoForm.submittable(true);\r\n                                mktoForm.submit();\r\n                            } else {\r\n                            }\r\n                        });\r\n                });\r\n            });\r\n\r\n\t\t\t\/\/ begin BR - need a new recaptcha token for marketo-lead-post.php\r\n            mktoForm.onValidate(function(native) {\r\n                if (!native) return;\r\n\r\n                grecaptcha.ready(function() {\r\n                    grecaptcha.execute(userConfig.apiKeys.recaptcha, {\r\n                        action: userConfig.actions.formSubmit\r\n                    })\r\n                        .then(function(recaptchaFinger) {\r\n\t\t\t\t\t\t\t\t\/\/ called twice\r\n\t\t\t\t\t\t\t\t\/\/ console.log('grecaptcha.execute 2');\r\n\t\t\t\t\t\t\t\tif (reCAPTCHALastUserFingerprint == \"\") {\r\n\t\t\t\t\t\t\t\t\t\/\/ console.log('token 2='+recaptchaFinger); \/\/ debug\r\n\t\t\t\t\t\t\t\t\treCAPTCHALastUserFingerprint=recaptchaFinger; \/\/ new token\r\n\t\t\t\t\t\t\t\t}\r\n                        });\r\n                });\r\n            });\r\n\t\t\t\/\/ end BR\r\n\r\n\t\t\tfunction validate_email() {\r\n               var emailField = mktoForm.getFormElem().find('#Email');\r\n               var emailValue = emailField.val();\r\n               var submittable = true;\r\n               if (!emailValue) {\r\n                  submittable = false;\r\n               }\r\n               else {\r\n                  var domain = emailValue.split('@')[1];\r\n                  if (!domain) {\r\n                     submittable = false;\r\n                  }\r\n                  else {\r\n                     if (domain && ['gmail.com', 'yahoo.com', 'outlook.com'].includes(domain.toLowerCase())) {\r\n                        submittable = false;\r\n                     } \r\n                     \/*else {\r\n                         submittable = true;\r\n                     }*\/\r\n                  }\r\n               }\r\n               if (submittable) {\r\n                   \/\/form.submittable(true);\r\n                   return true;\r\n               }\r\n               else {\r\n                   \/\/ document.getElementById(\"LblEmail\").focus();\r\n                   document.getElementById(\"Email\").focus();\r\n                   mktoForm.showErrorMessage(\"Please enter your business email address\", emailField); \/\/ under the Email field\r\n                   \/\/ alert('Please use your business email address');\r\n                   \/\/\tform.submittable(false);\r\n                   return false;\r\n               }\r\n            }\r\n\t\t});\r\n\r\n        var recaptchaListeners = {\r\n            ready : function() {\r\n                MktoForms2.whenReady(function(mktoForm){\r\n                    var formEl = mktoForm.getFormElem()[0],\r\n                        submitButtonEl = formEl.querySelector(\"button[type='submit']\");\r\n\r\n                    submitButtonEl.disabled = false;\r\n                });\r\n            }\r\n        };\r\n        Object.keys(recaptchaListeners).forEach(function globalize(fnName){\r\n            window[\"grecaptchaListeners_\" + fnName] = recaptchaListeners[fnName];\r\n        });\r\n\r\n        \/* inject the reCAPTCHA library *\/\r\n        recaptchaLib = document.createElement(\"script\");\r\n        recaptchaLib.src = \"https:\/\/www.google.com\/recaptcha\/api.js?render=\" + userConfig.apiKeys.recaptcha + \"&onload=grecaptchaListeners_ready\";\r\n        document.head.appendChild(recaptchaLib);\r\n\r\n    })();\r\n\r\n    MktoForms2.loadForm(baseURL, munchkinID, FormID, function(form) {\r\n\r\n\/\/ this will be replaced by a string fetched from translations.js\r\nvar thankYouMessage = \"Thank you for your interest in\";\r\nvar downloadLinkText = \"You can download the report here.\";\r\nvar contactMessage = \"A member of our team will be in touch with you shortly.\"\r\n\r\n\r\n\/\/find out which type of form this is\r\nvar formType = document.getElementsByClassName(\"mktoForm\")[0].getAttribute(\"form-type\");\r\nvar form_destination = document.getElementsByClassName(\"mktoForm\")[0].getAttribute(\"data-destination\");\r\nvar form_content_name = document.getElementsByClassName(\"mktoForm\")[0].getAttribute(\"data-content\");\r\n\r\n\/\/ begin BR - hidden field added with the URL referrer (URL of the form) to display it in the Market alert notification (email from Marketo to commercials)\r\nMktoForms2.whenReady(function (form) {\r\n\tform.addHiddenFields({lastFormReferrer : document.location.href });\r\n});\r\n\/\/ end BR\r\n\r\n\/\/ begin BR - conversion code coming from google ads\r\n\/\/ Event snippet for Clic Submit Formulaire (11\/03\/2021\/ conversion page\r\nfunction gtag_report_conversion(url) {\r\n\tvar callback = function () {\r\n\t\tif (typeof(url) != 'undefined') {\r\n\t\t\tconsole.log('gtag_report_conversion callback url='+url); \/\/ debug\r\n\t\t\t\/\/ window.location = url; \/\/ loading \"url\" after submit (already managed by Marketo)\r\n\t\t}\r\n\t};\r\n\tgtag('event', 'conversion', {\r\n\t\t 'send_to': 'AW-978904711\/Y3XjCIbkmvsBEIfN49ID', \r\n\t\t 'event_callback': callback \r\n\t});\r\n\tconsole.log('gtag conversion called');\r\n\treturn false;\r\n}\r\n\/\/ end BR\r\n\r\nform.onSuccess(function(values, followUpUrl) {\r\n\r\n\t\/\/ begin BR\r\n\t\/\/ google ads conversion code\r\n\tvar getUrl = window.location;\r\n\tconsole.log('Marketo google ads conversion: '+getUrl); \/\/ debug\r\n\tgtag_report_conversion(getUrl);\r\n\r\n\t\/\/ post form parameters on https:\/\/www.evidian.com\/p\/sm7\/marketo-lead-get.php\r\n\tvar param='';\r\n\r\n\tif (window.location.href !== null) {\r\n\t  url=window.location.href;\r\n\t\/\/  console.log('url='+url);\r\n\t}\r\n\telse url=\"not defined\";\r\n\tparam=param+'url='+encodeURIComponent(url);\r\n\r\n\tif (document.getElementsByClassName(\"mktoForm\") !== null) {\r\n\t  form_id=document.getElementsByClassName(\"mktoForm\")[0].getAttribute(\"id\");\r\n\t\/\/  console.log('form_id='+form_id);\r\n\t}\r\n\telse form_id=\"not defined\";\r\n\tparam=param+'&form_id='+encodeURIComponent(form_id);\r\n\r\n\tif (formType !== null) {\r\n\t  form_type=formType;\r\n\t\/\/  console.log('form_type='+form_type);\r\n\t}\r\n\telse form_type=\"not defined\";\r\n\tparam=param+'&form_type='+encodeURIComponent(form_type);\r\n\r\n\tif (form_destination !== null) {\r\n\t  form_destination=form_destination;\r\n\t\/\/  console.log('form_destination='+form_destination);\r\n\t}\r\n\telse form_destination=\"not defined\";\r\n\tparam=param+'&form_destination='+encodeURIComponent(form_destination);\r\n\r\n\tif (form_content_name !== null) {\r\n\t  form_content=form_content_name;\r\n\t\/\/  console.log('form_content='+form_content);\r\n\t}\r\n\telse form_content=\"not defined\";\r\n\tparam=param+'&form_content='+encodeURIComponent(form_content);\r\n\r\n\tif (document.getElementById('preferredLanguage') !== null) {\r\n\t  preferred_language=document.getElementById('preferredLanguage').value;\r\n\t\/\/  console.log('preferred_language='+preferred_language);\r\n\t}\r\n\telse preferred_language=\"not defined\";\r\n\tparam=param+'&preferred_language='+encodeURIComponent(preferred_language);\r\n\r\n\tif (document.getElementById('Salutation') !== null) {\r\n\t  salutation=document.getElementById('Salutation').value;\r\n\t\/\/  console.log('salutation='+salutation);\r\n\t}\r\n\telse salutation=\"not defined\";\r\n\tparam=param+'&salutation='+encodeURIComponent(salutation);\r\n\r\n\tif (document.getElementById('FirstName') !== null) {\r\n\t  first_name=document.getElementById('FirstName').value;\r\n\t\/\/  console.log('first_name='+first_name);\r\n\t}\r\n\telse first_name=\"not defined\";\r\n\tparam=param+'&first_name='+encodeURIComponent(first_name);\r\n\r\n\tif (document.getElementById('LastName') !== null) {\r\n\t  last_name=document.getElementById('LastName').value;\r\n\t\/\/  console.log('last_name='+last_name);\r\n\t}\r\n\telse last_name=\"not defined\";\r\n\tparam=param+'&last_name='+encodeURIComponent(last_name);\r\n\r\n\tif (document.getElementById('Email') !== null) {\r\n\t  email=document.getElementById('Email').value;\r\n\t\/\/  console.log('email='+email);\r\n\t}\r\n\telse email=\"not defined\";\r\n\tparam=param+'&email='+encodeURIComponent(email);\r\n\r\n\tif (document.getElementById('Phone') !== null) {\r\n\t  phone=document.getElementById(\"Phone\").value;\r\n\t\/\/  console.log('phone='+phone);\r\n\t}\r\n\telse phone=\"not defined\";\r\n\tparam=param+'&phone='+encodeURIComponent(phone);\r\n\r\n\tif (document.getElementById('JobFunction__c') !== null) {\r\n\t  job_function=document.getElementById(\"JobFunction__c\").value;\r\n\t\/\/  console.log('phone='+job_function);\r\n\t}\r\n\telse job_function=\"not defined\";\r\n\tparam=param+'&job_function='+encodeURIComponent(job_function);\r\n\r\n\tif (document.getElementById('SF_Job_Title__c') !== null) {\r\n\t  job_title=document.getElementById(\"SF_Job_Title__c\").value;\r\n\t\/\/  console.log('job_title='+job_title);\r\n\t}\r\n\telse job_title=\"not defined\";\r\n\tparam=param+'&job_title='+encodeURIComponent(job_title);\r\n\r\n\tif (document.getElementById('Company') !== null) {\r\n\t  company=document.getElementById(\"Company\").value;\r\n\t\/\/  console.log('company='+company);\r\n\t}\r\n\telse company=\"not defined\";\r\n\tparam=param+'&company='+encodeURIComponent(company);\r\n\r\n\tif (document.getElementById('Company_Revenue__c') !== null) {\r\n\t  company_revenue=document.getElementById(\"Company_Revenue__c\").value;\r\n\t\/\/  console.log('company_revenue='+company_revenue);\r\n\t}\r\n\telse company_revenue=\"not defined\";\r\n\tparam=param+'&company_revenue='+encodeURIComponent(company_revenue);\r\n\r\n\tif (document.getElementById('Company_Size__c') !== null) {\r\n\t  company_size=document.getElementById(\"Company_Size__c\").value;\r\n\t\/\/  console.log('company_size='+company_size);\r\n\t}\r\n\telse company_size=\"not defined\";\r\n\tparam=param+'&company_size='+encodeURIComponent(company_size);\r\n\r\n\tif (document.getElementById('customerIndustry') !== null) {\r\n\t  industry=document.getElementById(\"customerIndustry\").value;\r\n\t\/\/  console.log('industry='+industry);\r\n\t}\r\n\telse industry=\"not defined\";\r\n\tparam=param+'&industry='+encodeURIComponent(industry);\r\n\r\n\tif (document.getElementById('Country') !== null) {\r\n\t\tcountry=document.getElementById(\"Country\").value;\r\n\t\/\/\tconsole.log('[success] country='+country);\r\n\t}\r\n\telse country=\"not defined\";\r\n\tparam=param+'&country='+encodeURIComponent(country);\r\n\r\n\tif (document.getElementById('Purchase_Authority__c') !== null) {\r\n\t  purchase_authority=document.getElementById(\"Purchase_Authority__c\").value;\r\n\t\/\/  console.log('purchase_authority='+purchase_authority);\r\n\t}\r\n\telse purchase_authority=\"not defined\";\r\n\tparam=param+'&purchase_authority='+encodeURIComponent(purchase_authority);\r\n\r\n\tif (document.getElementsByName('Opt_in__c') !== null) {\r\n\t\tif(document.getElementsByName('Opt_in__c')[0].checked)\r\n\t\t  opt_in=\"Yes\";\r\n\t\telse opt_in=\"No\";\r\n\t\/\/  console.log('opt_in='+opt_in);\r\n\t}\r\n\telse opt_in=\"not defined\";\r\n\tparam=param+'&opt_in='+encodeURIComponent(opt_in);\r\n\r\n\tif (document.getElementById('enquiryType') !== null) {\r\n\t\/\/  enquiry_type=document.getElementById(\"enquiryType\").value;\r\n      \/\/ Get the <select> element and translated \r\n\t  var selectElement=document.getElementById(\"enquiryType\");\r\n\r\n\t  \/\/ Get the selected option\r\n\t  var selectedOption=selectElement.options[selectElement.selectedIndex];\r\n\r\n\t  \/\/ Get the text content of the selected option\r\n\t  enquiry_type=selectedOption.text;\r\n\t  \/\/  console.log('enquiry_type='+enquiry_type);\r\n\t}\r\n\telse enquiry_type=\"not defined\";\r\n\tparam=param+'&enquiry_type='+encodeURIComponent(enquiry_type);\r\n\r\n\tif (document.getElementById('enquiryType') !== null) {\r\n\t   enquiry_type_not_translated=document.getElementById(\"enquiryType\").value;\r\n\t  \/\/  console.log('enquiry_type_not_translated='+enquiry_type_not_translated);\r\n\t}\r\n\telse enquiry_type_not_translated=\"not defined\";\r\n\tparam=param+'&enquiry_type_not_translated='+encodeURIComponent(enquiry_type_not_translated);\r\n\r\n\tmy_campaign=\"\";\r\n\t\/\/ console.log('my_campaign='+my_campaign);\r\n\tparam=param+'&my_campaign='+encodeURIComponent(my_campaign);\r\n\r\n\tif (document.getElementById('enquiry') !== null) {\r\n\t  enquiry=document.getElementById(\"enquiry\").value;\r\n\t\/\/  console.log('enquiry='+enquiry);\r\n\t}\r\n\telse enquiry=\"not defined\";\r\n\tparam=param+'&enquiry='+encodeURIComponent(enquiry);\r\n\r\n\tif (document.getElementById('interestedIn') !== null) {\r\n\t  interested_in=document.getElementById(\"interestedIn\").value;\r\n\t\/\/  console.log('interested_in='+interested_in);\r\n\t}\r\n\telse interested_in=\"not defined\";\r\n\tparam=param+'&interested_in='+encodeURIComponent(interested_in);\r\n\r\n\t\/\/ Deal reg - customer company\r\n\tif (document.getElementById('programMemberField01') !== null) {\r\n\t  programMemberField01=document.getElementById(\"programMemberField01\").value;\r\n\t\/\/  console.log('programMemberField01='+programMemberField01);\r\n\t}\r\n\telse programMemberField01=\"not defined\";\r\n\tparam=param+'&programMemberField01='+encodeURIComponent(programMemberField01);\r\n\r\n\t\/\/ Deal reg - customer industry\r\n\tif (document.getElementById('programMemberField02') !== null) {\r\n\t  programMemberField02=document.getElementById(\"programMemberField02\").value;\r\n\t\/\/  console.log('programMemberField02='+programMemberField02);\r\n\t}\r\n\telse programMemberField02=\"not defined\";\r\n\tparam=param+'&programMemberField02='+encodeURIComponent(programMemberField02);\r\n\r\n\t\/\/ Deal reg - customer country\r\n\tif (document.getElementById('programMemberField03') !== null) {\r\n\t  programMemberField03=document.getElementById(\"programMemberField03\").value;\r\n\t\/\/  console.log('programMemberField03='+programMemberField03);\r\n\t}\r\n\telse programMemberField03=\"not defined\";\r\n\tparam=param+'&programMemberField03='+encodeURIComponent(programMemberField03);\r\n\r\n\t\/\/ Deal reg - quantity of users\/servers\r\n\tif (document.getElementById('programMemberField04') !== null) {\r\n\t  programMemberField04=document.getElementById(\"programMemberField04\").value;\r\n\t\/\/  console.log('programMemberField04='+programMemberField04);\r\n\t}\r\n\telse programMemberField04=\"not defined\";\r\n\tparam=param+'&programMemberField04='+encodeURIComponent(programMemberField04);\r\n\r\n\t\/\/ Deal reg - purchase timeline\r\n\tif (document.getElementById('Purchase_Timeline__c') !== null) {\r\n\t  purchase_timeline=document.getElementById(\"Purchase_Timeline__c\").value;\r\n\t\/\/  console.log('purchase_timeline='+purchase_timeline);\r\n\t}\r\n\telse purchase_timeline=\"not defined\";\r\n\tparam=param+'&purchase_timeline='+encodeURIComponent(purchase_timeline);\r\n\r\n\t\/\/ Deal reg - budget\r\n\tif (document.getElementById('programMemberField05') !== null) {\r\n\t  programMemberField05=document.getElementById(\"programMemberField05\").value;\r\n\t\/\/  console.log('programMemberField05='+programMemberField05);\r\n\t}\r\n\telse programMemberField05=\"not defined\";\r\n\tparam=param+'&programMemberField05='+encodeURIComponent(programMemberField05);\r\n\r\n\t\/\/ Deal reg - advised by\r\n\tif (document.getElementById('programMemberField06') !== null) {\r\n\t  programMemberField06=document.getElementById(\"programMemberField06\").value;\r\n\t\/\/  console.log('programMemberField06='+programMemberField06);\r\n\t}\r\n\telse programMemberField06=\"not defined\";\r\n\tparam=param+'&programMemberField06='+encodeURIComponent(programMemberField06);\r\n\r\n\tif (reCAPTCHALastUserFingerprint !== null) {\r\n\t\/\/  console.log('reCAPTCHALastUserFingerprint='+reCAPTCHALastUserFingerprint);\r\n\t}\r\n\telse reCAPTCHALastUserFingerprint=\"not defined\";\r\n\tparam=param+'&reCAPTCHALastUserFingerprint='+encodeURIComponent(reCAPTCHALastUserFingerprint);\r\n\r\n\t\/\/ console.log('param='+param);\r\n\r\n\t\/\/POST\r\n\tvar request=new XMLHttpRequest();\r\n\trequest.open(\"POST\", \"https:\/\/www.evidian.com\/p\/sm7\/marketo-lead-post.php\", false);\r\n\trequest.setRequestHeader(\"Content-Type\", \"application\/x-www-form-urlencoded; charset=UTF-8\");\r\n\trequest.send(param);\r\n\tif (request.readyState != \"4\") return false;\r\n\tif (request.status != \"200\") return false;\r\n\t\/\/ end BR\r\n\r\n    \/\/ Page Redirect - immediately goes to destination page in same tab\r\n   if (formType == \"Page Redirect\") {\r\n\t\t\/\/ test if it is a call for a SafeKit free trial license key (sek*.asp): if yes add the email in query string\r\n\t\tlet result=form_destination.indexOf(\"sek\");\r\n\t\tif (result !== -1) form_destination=form_destination+\"?Email=\"+encodeURIComponent(email);\r\n\t\t\/\/ console.log('Page Redirect (form_destination)='+\" \"+form_destination);\r\n\t\twindow.open(form_destination, \"_self\");\r\n\t\t\/\/ window.open(form_destination, \"_parent\"); \/\/ original line\r\n        return false;\r\n    }\r\n    \/\/ Asset Download - shows TY message with link to asset. \r\n    else if (formType == \"Asset Download\") {\r\n        if (form_content_name !== \"\") {\r\n            jQuery(\"#mktoFormThankYouMessageText\").html(thankYouMessage + \" \" + form_content_name + \".\");\r\n        } else {\r\n            jQuery(\"#mktoFormThankYouMessageText\").html(thankYouMessage);\r\n        }\r\n        jQuery(\"#mktoFormThankYouMessageLink\").attr(\"href\", form_destination);\r\n        jQuery(\"#mktoFormThankYouMessageLink\").html(downloadLinkText)\r\n        jQuery(\"#mktoFormThankYouMessageLink\").addClass(\"setToVisible\").removeClass(\"setToInvisible\");\r\n        showThankYouMessage();\r\n        return false;\r\n    }\r\n    \/\/ Thank You, or any kind of form not listed - shows TY message saying we'll get back to you\r\n    else {\r\n        jQuery(\"#mktoFormThankYouMessageText\").html(thankYouMessage);\r\n        jQuery(\"#mktoFormContactMessage\").html(contactMessage);\r\n        jQuery(\"#mktoFormContactMessage\").addClass(\"setToVisible\").removeClass(\"setToInvisible\");\r\n        showThankYouMessage();\r\n        return false;\r\n    };\r\n\r\n});\r\n\r\n        function translateFormLabels() {\r\n\t\t\t\r\n\t\t\t\/\/ BR - as translateFormLabels is called each time a field is changed, let's take advantage of it to force Costa Rica.\r\n\t\t\t\/\/ Clear the pre-filled form fields set by the browser based on the user's input history.\r\n\t\t\tif (document.getElementById('Country') !== null) {\r\n\t\t\t\tvar display=\"none\";\r\n\t\t\t\tvar country_predefined=\"France\";\r\n\t\t\t\tif ((display == \"none\") && (country_predefined == \"Costa Rica\")) {\r\n\t\t\t\t\t\/\/ console.log('[translate] country='+document.getElementById(\"Country\").value);\r\n\t\t\t\t\tdocument.getElementById(\"Country\").value=\"Costa Rica\";\r\n\t\t\t\t\t\/\/ console.log('[translate] country='+document.getElementById(\"Country\").value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n            if (document.getElementById(\"preferredLanguage\")) {\r\n                \/\/use the form's language field, if it's empty, use the browser's default language\r\n                if (form.vals().preferredLanguage.length > 0) {\r\n                    language = form.vals().preferredLanguage;\r\n                } else {\r\n                    language = browserLangFormatted\r\n                }\r\n\r\n                const translationsObj = getTranslations(language);\r\n                const formFieldLabels = Object.keys(form.vals());\r\n                const keysForThisLanguage = Object.keys(languageTranslations[language]);\r\n\r\n                for (var i=0; i<formFieldLabels.length ; i++) {\r\n                    if (formContains(formFieldLabels[i], keysForThisLanguage)) {\r\n                        var objOfThisField = translationsObj[formFieldLabels[i]];\r\n                        \/\/change this label text to translated version\r\n                        jQuery(\"#Lbl\" + formFieldLabels[i]).html(objOfThisField.label);\r\n\r\n                        if (objOfThisField.type == \"select\") {\r\n                            var optionsForThisSelect = objOfThisField.options\r\n\r\n                            \/\/alphabestises the dropdown options for the field, based on the translated display text - ONLY sorts, not displays\r\n\/\/ BR BUG                   if (keysForThisLanguage[i] == \"customerIndustry\") {\r\n\t\t\t\t\t\t\tif (formFieldLabels[i] == \"customerIndustry\") {\r\n                                sortIndustryField(optionsForThisSelect);\r\n                            }\r\n\r\n\/\/ BR added\r\n                            \/\/alphabestises the dropdown options for the field, based on the translated display text - ONLY sorts, not displays\r\n\t\t\t\t\t\t\tif (formFieldLabels[i] == \"Country\") {\r\n                                sortIndustryField(optionsForThisSelect);\r\n                            }\r\n\/\/ end BR\r\n\r\n                            var valuesForThisSelect = optionsForThisSelect.map(a => a.value);\r\n                            var textsForThisSelect = optionsForThisSelect.map(a => a.text);\r\n                            var formOptionsForThisField = jQuery(\"#\" + formFieldLabels[i] + \" option\");\r\n                            var thisFormField = jQuery(\"#\" + formFieldLabels[i])\r\n\r\n                            \/\/if this dropdown option is in translations.js, translate the text that is displayed.\r\n                            for (var j = 0; j < formOptionsForThisField.length; j++) {\r\n                                var indexOfOption = valuesForThisSelect.indexOf(formOptionsForThisField[j].value);\r\n                                if (indexOfOption > -1) {\r\n                                    formOptionsForThisField[j].innerHTML = textsForThisSelect[indexOfOption];\r\n                                }\r\n                            }\r\n\r\n                            \/\/DISPLAYS the alphabetised options for the dropdown\r\n\/\/ BR BUG                   if (keysForThisLanguage[i] == \"customerIndustry\") {\r\n\t\t\t\t\t\t\tif (formFieldLabels[i] == \"customerIndustry\") {\r\n                                overwriteIndustryField(thisFormField, valuesForThisSelect, textsForThisSelect)\r\n                            }\r\n\r\n\/\/ BR added\r\n                            \/\/DISPLAYS the alphabetised options for the dropdown\r\n\t\t\t\t\t\t\tif (formFieldLabels[i] == \"Country\") {\r\n                                overwriteIndustryField(thisFormField, valuesForThisSelect, textsForThisSelect)\r\n                            }\r\n\/\/ end BR\r\n\r\n                            \/\/remove all salutation options, then replace with the values for this language\r\n\/\/ BR BUG                   if (keysForThisLanguage[i] == \"Salutation\") {\r\n                            if (formFieldLabels[i] == \"Salutation\") {                                currentSalutationSelected = form.vals().Salutation\r\n                                jQuery(\"#Salutation\").html(\"\")\r\n                                for (var j = 0; j < valuesForThisSelect.length; j++) {\r\n                                    jQuery(\"#Salutation\").append(jQuery('<option\/>', {\r\n                                        value: valuesForThisSelect[j],\r\n                                        text : textsForThisSelect[j]\r\n                                    }));\r\n                                }\r\n                                \/\/if the selected salutation is still an option, keep it selected.\r\n                                if (valuesForThisSelect.includes(currentSalutationSelected)) {\r\n                                    form.vals({ \"Salutation\" : currentSalutationSelected})\r\n                                }\r\n                            }\r\n\r\n                        } else if (objOfThisField.type == \"radio\") {\r\n                            var optionsForThisSelect = objOfThisField.options\r\n                            var valuesForThisSelect = optionsForThisSelect.map(a => a.value);\r\n                            var textsForThisSelect = optionsForThisSelect.map(a => a.text);\r\n                            var radioOptionsValueForThisField = jQuery(\"input[name='Opt_in__c']\");\r\n                            var radioOptionsLabelForThisField = jQuery(\"input[name='Opt_in__c']\").next();\r\n                            for (var j = 0; j < radioOptionsLabelForThisField.length; j++) {\r\n                                var indexOfOption = valuesForThisSelect.indexOf(radioOptionsValueForThisField[j].value);\r\n                                if (indexOfOption > -1) {\r\n                                    radioOptionsLabelForThisField[j].innerHTML = textsForThisSelect[indexOfOption];\r\n                                    jQuery(radioOptionsLabelForThisField[j]).removeClass(\"setToInvisible\");\r\n                                }\r\n                            }\r\n                        }\r\n                    };\r\n                }\r\n\r\n                \/\/choose correct privacy policy\r\n                var nationalPrivLawURL = \"none\"; \r\n                var nationalPrivLawRegex = new RegExp;\r\n                switch (form.vals().Country) {\r\n                    case \"United Kingdom\": case \"Isle of Man\": case \"Gibraltar\" : \r\n                        privacyType = \"DPA\";\r\n                        nationalPrivLawURL = \"https:\/\/www.legislation.gov.uk\/ukpga\/2018\/12\/contents\/enacted\";\r\n                        nationalPrivLawRegex = \/DPA|APD\/g;\r\n                        break;\r\n                    case \"United States\" : \r\n                        if (form.vals().State == \"CA\") {\r\n                            privacyType = \"CCPA\";\r\n                            nationalPrivLawURL = \"https:\/\/oag.ca.gov\/privacy\/ccpa\";\r\n                            nationalPrivLawRegex = \/CCPA\/g;\r\n                            nationalPrivLawURL2 = \"https:\/\/thecpra.org\/\"\r\n                            nationalPrivLawRegex2 = \/CPRA\/g;\r\n                        } else {\r\n                            privacyType = \"none\";\r\n                            nationalPrivLawURL = \"none\"\r\n                        }\r\n                        break;\r\n                    case \"Canada\" : \r\n                        privacyType = \"CASL\";\r\n                        nationalPrivLawURL = \"https:\/\/laws-lois.justice.gc.ca\/eng\/acts\/E-1.6\/index.html\";\r\n                        nationalPrivLawRegex = \/CASL\/g;\r\n                        break;\r\n                    case \"Brazil\" : \r\n                        privacyType = \"LGDP\";\r\n                        nationalPrivLawURL = \"https:\/\/lgpd-brazil.info\/\";\r\n                        nationalPrivLawRegex = \/LGPD\/g;\r\n                        break;\r\n                    case \"South Africa\" : \r\n                        privacyType = \"POPIA\";\r\n                        nationalPrivLawURL = \"https:\/\/popia.co.za\/\";\r\n                        nationalPrivLawRegex = \/POPIA\/g;\r\n                        break;\r\n                    case \"Mexico\" : \r\n                        privacyType = \"LFPDPPP\";\r\n                        nationalPrivLawURL = \"https:\/\/privacyinternational.org\/state-privacy\/1006\/state-privacy-mexico#dataprotection\"\r\n                        nationalPrivLawRegex = \/LFPDPPP\/g;\r\n                        break;\r\n                    case gdprCountries(form.vals().Country) : \r\n                        privacyType = \"GDPR\";\r\n                        nationalPrivLawURL = \"https:\/\/gdpr.eu\/\";\r\n                        nationalPrivLawRegex = \/GDPR|RGPD|DSGVO|AVG\/g\r\n                        break;\r\n                    default:\r\n                        privacyType = \"none\";\r\n                        nationalPrivLawURL = \"none\";\r\n                        break;\r\n                };\r\n\r\n                \/\/translate opt-in text\t\r\n\t\t\t\t\/\/ BR - translate opt-in messages only if they are displayed\r\n\t\t\t\tif (document.getElementById('LblOpt_in__c') !== null) {\r\n\t\t\t\t\t\/\/ BR - Count all elements with class of mktoHtmlText \r\n\t\t\t\t\t\/\/ and translate only the two last opt-in mktoHtmlText elements\r\n\t\t\t\t\t\/\/ Instead of jQuery(\".mktoHtmlText\").eq(0) jQuery(\".mktoHtmlText\").eq(1)\r\n\t\t\t\t\t\/\/ call jQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-2) and jQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-1)\r\n\t\t\t\t\tvar count_mktoHtmlText = document.querySelectorAll('.mktoHtmlText').length;\r\n\t\t\t\t\t\/\/ console.log('count_mktoHtmlText='+count_mktoHtmlText);\r\n\t\t\t\t\tvar optInTextObj = translationsObj[\"OptInText\"];\r\n\t\t\t\t\tvar optInTypes = optInTextObj.map(a => a.value);\r\n\t\t\t\t\t\/\/only California is different Opt-In to GDPR\/Default\r\n\t\t\t\t\tif (privacyType == \"CCPA\") {\r\n\t\t\t\t\t\tjQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-2).html(optInTextObj[optInTypes.indexOf(privacyType)].text); \r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-2).html(optInTextObj[0].text); \r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\/\/translate Privacy Policy text\r\n\t\t\t\t\tvar privacyTextObj = translationsObj[\"PrivacyText\"];\r\n\t\t\t\t\tvar privacyTypes = privacyTextObj.map(a => a.value);\r\n\t\t\t\t\tvar indexOfPrivacyType = privacyTypes.indexOf(privacyType);\r\n\t\t\t\t\tjQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-1).html(privacyTextObj[indexOfPrivacyType].text); \r\n\r\n\t\t\t\t\t\/\/add in privacy policy links to translated text, for atos and for national law (e.g. GDPR)\r\n\t\t\t\t\tif (jQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-1).html()) {\r\n\t\t\t\t\t\tvar privacyText = jQuery(\".mktoHtmlText\").eq(count_mktoHtmlText-1)\r\n\t\t\t\t\t\tvar atosPrivLinkRegex = \/(Privacy Policy|Politique de confidentialit\u00e9|Informativa sulla privacy|Datenschutzrichtlinie|Pol\u00edtica de privacidad|Privacybeleid|Pol\u00edtica de Privacidade)\/g\r\n\t\t\t\t\t\tvar atosPrivPolicyURL = 'https:\/\/eviden.com\/privacy-policy\/'\r\n\t\t\t\t\t\t\tif (language == \"French\") {\r\n\t\t\t\t\t\t\t\t\/\/only French link is non-EN\r\n\t\t\t\t\t\t\t\tatosPrivPolicyURL = 'https:\/\/eviden.com\/fr-fr\/politique-de-confidentialite\/'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\/\/add atos privacy link\r\n\t\t\t\t\t\taddInLink(privacyText, atosPrivLinkRegex, atosPrivPolicyURL);\r\n\t\t\t\t\t\tif (privacyType != \"none\" ) {\r\n\t\t\t\t\t\t\t\/\/add GDPR etc. link\r\n\t\t\t\t\t\t\taddInLink(privacyText, nationalPrivLawRegex, nationalPrivLawURL);\r\n\t\t\t\t\t\t\tif (privacyType == \"CCPA\") {\r\n\t\t\t\t\t\t\t\t\/\/California has two links\r\n\t\t\t\t\t\t\t\taddInLink(privacyText, nationalPrivLawRegex2, nationalPrivLawURL2);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\/* end modif BR *\/\r\n\t\t\t\t\r\n                \/\/translate Submit Button\r\n                var submitButtonObj = translationsObj[\"Submit\"];\r\n\t\t\t\tvar submit_text=\"\"; \/\/ special text requested for Submit\r\n\t\t\t\tif (submit_text == \"\") {\r\n\t\t\t\t\tsubmit_text=submitButtonObj.text;\r\n\t\t\t\t}\r\n                jQuery(\".mktoButton[type='submit']\").html(submit_text);\r\n                \r\n                \/\/translate Thank You texts\r\n                if (form_content_name != \"\" && formType == \"Asset Download\") {\r\n                    thankYouMessage = translationsObj[\"ThankYouDataContent\"]\r\n                } else {\r\n                    thankYouMessage = translationsObj[\"ThankYouEmptyDataContent\"]\r\n                }\r\n                downloadLinkText = translationsObj[\"DownloadLinkText\"]\r\n                contactMessage = translationsObj[\"ContactTYText\"]\r\n                \r\n            };\r\n\t\t\t\r\n\t\t\t\/\/ BR - set label_job_title if defined\r\n\t\t\tvar label_job_title=\"\";\r\n\t\t\tif (label_job_title != \"\") {\r\n\t\t\t\tlabelElement = document.getElementById(\"LblSF_Job_Title__c\");\r\n\t\t\t\tlabelElement.innerHTML = label_job_title;\r\n\t\t\t}\r\n\r\n        };\r\n\r\n        const sortIndustryField = function(options) {\r\n            options.sort(function(a,b) {\r\n                \/\/make sure the 'please select' option is first\r\n                if (a.value == b.value) return 0\r\n                if (a.value == \"\") return -1;\r\n                if (b.value == \"\") return 1;\r\n                \/\/and sort the rest alphabetically\r\n                return a.text.localeCompare(b.text)\r\n                \/\/if (a.text > b.text) return 1;\r\n                \/\/if (a.text < b.text) return -1;\r\n                \/\/return 0 \r\n            })\r\n        }\r\n\r\n\r\n        const overwriteIndustryField = function(field, values, texts) {\r\n            var selectedVal = (field.val())\r\n            field.html(\"\");\r\n            for (var j = 0; j < values.length; j++) {\r\n                field.append(jQuery('<option\/>', {\r\n                    value: values[j],\r\n                    text : texts[j]\r\n                }));\r\n            }\r\n            \/\/keep previously selected value as selected\r\n            field.val(selectedVal);\r\n        } \r\n\r\n        \/\/add in privacy links to translated text\r\n        const addInLink = function(privacyText, unlinkedTextRegex, privURL) {\r\n            var stringToLink = privacyText.html().match(unlinkedTextRegex)\r\n            var linkedText = \"<a href=\"+ privURL + \" target='blank'>\" + stringToLink + \"<\/a>\";\r\n            var replacement = privacyText.html().replace(unlinkedTextRegex, linkedText);\r\n            privacyText.html(replacement) \r\n        }\r\n        \r\n        const formContains = (label, keysForThisLanguage) => {\r\n            if (keysForThisLanguage.includes(label)) {\r\n                return true\r\n            } else {\r\n                return false\r\n            }\r\n        }\r\n\r\n        const getTranslations = (language) => {\r\n            if(Object.keys(languageTranslations).includes(language)) {\r\n                return languageTranslations[language];\r\n            } else { return [] }\r\n        }\r\n\r\n        translateFormLabels();\r\n\r\n        \/\/when a field changes, check if any progressive fields have appeared and need translation\r\n        jQuery(\".mktoForm\").on(\"change\", \".mktoField\", () => {\r\n            translateFormLabels();\r\n        }); \r\n\r\n\r\n        \/\/check for a Marketo validation error message appearing, grab its text and change it to translated version\r\n        jQuery(document).delegate('.mktoForm', 'focus', function() {\r\n            if (document.getElementById(\"preferredLanguage\")) {\r\n                if ( jQuery('.mktoErrorMsg')['0'] ) {\r\n                    originalErrorMessage = jQuery('.mktoErrorMsg')[0];\r\n                    errorMessageID = jQuery(originalErrorMessage).attr('id')\r\n                    fieldID = errorMessageID.replace('ValidMsg', '')\r\n                    const translationsObj = getTranslations(language);\r\n                    var objOfThisField = translationsObj[fieldID];\r\n                    jQuery('.mktoError').addClass(\"mktoErrorRealign\")\r\n                    jQuery('.mktoErrorMsg')['0'].innerHTML = objOfThisField.requiredError;\r\n                };\r\n            };\r\n        });\r\n\r\n\/\/ Begin BR\r\n\t\tjQuery(document).ready( function($){\r\n\/*\r\n\tinverse first name \/ last name for Japanese (does not work - break the dynamic form - pb solved in translation.js)\r\n\t$first_name_div=$(\"#FirstName\").parents(\".mktoFormRow\")\r\n\t$first_name_div.clone(true).insertAfter($(\"#LastName\").parents(\".mktoFormRow\"))\r\n\t$first_name_div.remove()\r\n*\/\r\n\t\/* add Japanese in the list of languages *\/\r\n\t$('#preferredLanguage').append('<option value=\"Japanese\">Japanese<\/option>');\r\n\t\/* implement shortcodes \"marketo id=\"1624\" shortcodes...\" *\/\r\n\tvar display=\"none\";\r\n\tvar preferred_language=\"French\";\r\n\tif (preferred_language != \"\") {\r\n\t\t$('#preferredLanguage').val(\"French\");\r\n\t\t$('#preferredLanguage').trigger('change');\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#preferredLanguage\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\r\n\tvar enquiry_type=\"Product Information\";\r\n\tif (enquiry_type != \"\") {\r\n\t\t$('#enquiryType').val(\"Product Information\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#enquiryType\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\r\n\tif (\"1624\" == \"1624\") {\r\n\t\tvar my_campaign=\"\";\r\n\t\tif (my_campaign != \"\") {\r\n\t\t\telements=document.getElementsByName(\"programMemberField01\"); \/\/ hidden field\r\n\t\t\tif ( elements.length > 0 ) elements[0].value=\"\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tvar interested_in=\"Web Access Manager\";\r\n\tif (interested_in != \"\") {\r\n\t\t$('#interestedIn').val(\"Web Access Manager\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#interestedIn\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar phone=\"\";\r\n\tif (phone != \"\") {\r\n\t\t$('#Phone').val(\"\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#Phone\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar job_title=\"Not specified\";\r\n\tif (job_title != \"\") {\r\n\t\t$('#SF_Job_Title__c').val(\"Not specified\");\r\n\t\tif (display == \"none\") {\r\n\t\t\tif (job_title == \"email\") {\r\n\t\t\t\tlabelElement = document.getElementById(\"LblSF_Job_Title__c\");\r\n\t\t\t\tlabelElement.innerHTML = \"Business Email Address *\";\r\n\t\t\t\t$('#SF_Job_Title__c').val(\"\");\r\n\t\t\t} else {\r\n\t\t\t\t$(\"#SF_Job_Title__c\").parents(\".mktoFormRow\").css('display','none');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tvar industry=\"Other\";\r\n\tif (industry != \"\") {\r\n\t\t$('#customerIndustry').val(\"Other\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#customerIndustry\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar enquiry=\"\";\r\n\tif (enquiry != \"\") {\r\n\t\t$('#enquiry').val(\"\");\r\n\t\tif ((display == \"none\")&& (enquiry==\"none\"))\r\n\t\t\t$(\"#enquiry\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar email=\"\";\r\n\tif (email != \"\") {\r\n\t\t$('#Email').val(\"\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#Email\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar first_name=\"\";\r\n\tif (first_name != \"\") {\r\n\t\t$('#FirstName').val(\"\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#FirstName\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar last_name=\"\";\r\n\tif (last_name != \"\") {\r\n\t\t$('#LastName').val(\"\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#LastName\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar company=\"\";\r\n\tif (company != \"\") {\r\n\t\t$('#Company').val(\"\");\r\n\t\tif (display == \"none\")\r\n\t\t\t$(\"#Company\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\tvar country_predefined=\"France\";\r\n\tif (country_predefined != \"\") {\r\n\t\t$('#Country').val(\"France\");\r\n\t\t\/\/ keep country visible except when equal to Costa Rica\r\n\t\tif ((display == \"none\")&& (country_predefined == \"Costa Rica\")) {\r\n\t\t\t\/\/ console.log('[ready] display none for country='+document.getElementById(\"Country\").value);\r\n\t\t\t$(\"#Country\").parents(\".mktoFormRow\").css('display','none');\r\n\t\t}\r\n\r\n\t}\r\n\tvar display_salutation=\"false\";\r\n\tif (display_salutation == \"false\") {\r\n\t\t$(\"#Salutation\").parents(\".mktoFormRow\").css('display','none')\r\n\t}\r\n\t\r\n\ttranslateFormLabels(); \/* translate and sort according pre-selection *\/\r\n\r\n});\r\n\/\/ End BR\r\n\r\n\t});\r\n\r\n    \/\/check for Countries in GDPR during privacy policy selection\r\n    const gdprCountriesArr = listOfEuropeanCountries\r\n    const gdprCountries = (country) => {\r\n        if (gdprCountriesArr.includes(country)) {\r\n            return country;\r\n        } else return false;\r\n    }\r\n\r\n    function showThankYouMessage() {\r\n        MktoForms2.whenReady(function (form) {\r\n            form.getFormElem().hide();\r\n            jQuery(\"#mktoFormThankYouMessage\").addClass(\"setToVisible\").removeClass(\"setToInvisible\");\r\n        });\r\n    }\r\n\r\n    \r\n<\/script>\r\n\r\n<div id=\"mktoFormThankYouMessage\" class=\"setToInvisible\" mktoname=\"Form Thank you message\">\r\n    <div><span id=\"mktoFormThankYouMessageText\">Thank you for your interest.<\/span>\r\n        <!-- <a> below only displays if form-type is Asset Download-->\r\n        <a class=\"setToInvisible\" id=\"mktoFormThankYouMessageLink\" target=\"_blank\" href=\"\">You can download the report here.<\/a>\r\n    <\/div>\r\n    <!-- span below only displays if form-type is Contact Us-->\r\n    <span id=\"mktoFormContactMessage\" class=\"setToInvisible\">A member of our team will be in touch with you shortly<\/span>\r\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"F\u00e9d\u00e9ration des Identit\u00e9s et SSO Les pi\u00e8ges \u00e0 \u00e9viter durant le d\u00e9veloppement d\u2019une application Web : Toute erreur de conception dans la gestion de l\u2019authentification peut permettre de contourner le m\u00e9canisme d\u2019authentification. R\u00e9cemment, une application Web bien connue fut expos\u00e9e \u00e0 une faille de s\u00e9curit\u00e9. Elle \u00e9tait s\u00e9curis\u00e9e par une authentification forte \u00e0 deux facteurs. [&hellip;]","protected":false},"author":71,"featured_media":0,"parent":4312,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-full-screen-marketo-form.php","meta":{"_acf_changed":false,"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"class_list":["post-16547","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Authentification de l\u2019acc\u00e8s Web pour les Apps - Evidian<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Authentification de l\u2019acc\u00e8s Web pour les Apps\" \/>\n<meta property=\"og:description\" content=\"F\u00e9d\u00e9ration des Identit\u00e9s et SSO Les pi\u00e8ges \u00e0 \u00e9viter durant le d\u00e9veloppement d\u2019une application Web : Toute erreur de conception dans la gestion de l\u2019authentification peut permettre de contourner le m\u00e9canisme d\u2019authentification. R\u00e9cemment, une application Web bien connue fut expos\u00e9e \u00e0 une faille de s\u00e9curit\u00e9. Elle \u00e9tait s\u00e9curis\u00e9e par une authentification forte \u00e0 deux facteurs. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/\" \/>\n<meta property=\"og:site_name\" content=\"Evidian\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-05T15:40:29+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/web-sso\\\/authentification-de-lacces-web-pour-les-apps\\\/\",\"url\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/web-sso\\\/authentification-de-lacces-web-pour-les-apps\\\/\",\"name\":\"Authentification de l\u2019acc\u00e8s Web pour les Apps - Evidian\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/#website\"},\"datePublished\":\"2016-09-06T14:22:32+00:00\",\"dateModified\":\"2024-03-05T15:40:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/web-sso\\\/authentification-de-lacces-web-pour-les-apps\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/web-sso\\\/authentification-de-lacces-web-pour-les-apps\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/web-sso\\\/authentification-de-lacces-web-pour-les-apps\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Evidian\",\"item\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Produits\",\"item\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Web SSO, authentification multifacteur, f\u00e9d\u00e9ration d'identit\u00e9 avec Web Access Manager\",\"item\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/produits\\\/web-sso\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Authentification de l\u2019acc\u00e8s Web pour les Apps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/\",\"name\":\"Evidian\",\"description\":\"Set in menu above: SEO\\\/SEO Settings\\\/Title &amp; Metas\\\/Home\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/#organization\",\"name\":\"Evidian\",\"alternateName\":\"Evidian\",\"url\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.evidian.com\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/evidian-new-blue-1.png\",\"contentUrl\":\"https:\\\/\\\/www.evidian.com\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/evidian-new-blue-1.png\",\"width\":734,\"height\":200,\"caption\":\"Evidian\"},\"image\":{\"@id\":\"https:\\\/\\\/www.evidian.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/showcase\\\/eviden-cybersecurity\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCJKPuw2SDVNYUjZEJyLbIAA\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Authentification de l\u2019acc\u00e8s Web pour les Apps - Evidian","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/","og_locale":"fr_FR","og_type":"article","og_title":"Authentification de l\u2019acc\u00e8s Web pour les Apps","og_description":"F\u00e9d\u00e9ration des Identit\u00e9s et SSO Les pi\u00e8ges \u00e0 \u00e9viter durant le d\u00e9veloppement d\u2019une application Web : Toute erreur de conception dans la gestion de l\u2019authentification peut permettre de contourner le m\u00e9canisme d\u2019authentification. R\u00e9cemment, une application Web bien connue fut expos\u00e9e \u00e0 une faille de s\u00e9curit\u00e9. Elle \u00e9tait s\u00e9curis\u00e9e par une authentification forte \u00e0 deux facteurs. [&hellip;]","og_url":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/","og_site_name":"Evidian","article_modified_time":"2024-03-05T15:40:29+00:00","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/","url":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/","name":"Authentification de l\u2019acc\u00e8s Web pour les Apps - Evidian","isPartOf":{"@id":"https:\/\/www.evidian.com\/fr\/#website"},"datePublished":"2016-09-06T14:22:32+00:00","dateModified":"2024-03-05T15:40:29+00:00","breadcrumb":{"@id":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/authentification-de-lacces-web-pour-les-apps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Evidian","item":"https:\/\/www.evidian.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Produits","item":"https:\/\/www.evidian.com\/fr\/produits\/"},{"@type":"ListItem","position":3,"name":"Web SSO, authentification multifacteur, f\u00e9d\u00e9ration d'identit\u00e9 avec Web Access Manager","item":"https:\/\/www.evidian.com\/fr\/produits\/web-sso\/"},{"@type":"ListItem","position":4,"name":"Authentification de l\u2019acc\u00e8s Web pour les Apps"}]},{"@type":"WebSite","@id":"https:\/\/www.evidian.com\/fr\/#website","url":"https:\/\/www.evidian.com\/fr\/","name":"Evidian","description":"Set in menu above: SEO\/SEO Settings\/Title &amp; Metas\/Home","publisher":{"@id":"https:\/\/www.evidian.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evidian.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.evidian.com\/fr\/#organization","name":"Evidian","alternateName":"Evidian","url":"https:\/\/www.evidian.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.evidian.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.evidian.com\/wp-content\/uploads\/2024\/01\/evidian-new-blue-1.png","contentUrl":"https:\/\/www.evidian.com\/wp-content\/uploads\/2024\/01\/evidian-new-blue-1.png","width":734,"height":200,"caption":"Evidian"},"image":{"@id":"https:\/\/www.evidian.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/showcase\/eviden-cybersecurity\/","https:\/\/www.youtube.com\/channel\/UCJKPuw2SDVNYUjZEJyLbIAA"]}]}},"_links":{"self":[{"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/pages\/16547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/comments?post=16547"}],"version-history":[{"count":0,"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/pages\/16547\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/pages\/4312"}],"wp:attachment":[{"href":"https:\/\/www.evidian.com\/fr\/wp-json\/wp\/v2\/media?parent=16547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}