为Okta安全性启用了CORS的多个域

时间:2016-11-18 03:56:41

标签: cors okta okta-api

我正在尝试将Okta小部件用于我的应用程序登录页面,该页面成功地将域名添加到security / api / cors下的安全组中。但是,我有一个服务器主机多个应用程序具有相同的登录页面。我添加到启用的CORS列表中的最佳方法是什么,我不想将100个域添加到列表中并尝试使用通配符(*),但它不起作用。

1 个答案:

答案 0 :(得分:0)

如果您有多个应用和一个服务器以及每个应用,则登录小部件网址将如下所示:

<Server_Url>/app1/path1/sign-in-widget.html
<Server_Url>/app2/path2/sign-in-widget.html
<Server_Url>/appN/pathN/sign-in-widget.html

在这种情况下,您只需要将Server_Url添加到Okta中的CORS列表中。将此URL添加到CORS列表将适用于所有应用程序。如果您为每个应用程序添加了不同的小部件登录,这将是合适的。

但是,如果您为所有应用程序使用相同的登录窗口小部件,并且您将其用作每个应用程序的自定义登录页面。您可以将登录小组件放在服务器上,例如<Server_Url>/sign-in-widget.html。稍后在sign-in-widget.html内部,当呈现窗口小部件时,您可以使用url使用下面的代码获取加载了哪个应用程序登录窗口小部件。

oktaSignIn.renderEl(
      { el: '#okta-login-container' },
      function (res) {
        if (res.status === 'SUCCESS') {

          var appUrls = {"springsecuritysaml_app":"http://localhost/spring-security-saml2-sample","simplesamlphpexample_app":"http://localhost/simplesamlphp-example/",}

          var url = String(window.location.href);

          var appUrlInOKta = String(url.split("?")[1]).split("=")[1];

          var decodedUrl = decodeURIComponent(appUrlInOKta);

          var appName = decodedUrl.split("/")[4];

          var appUrl = appUrls[appName];

          res.session.setCookieAndRedirect(appUrl);

        }
      } 
);

在上面的代码中,我正在维护应用程序名称到应用程序URL&#34;的字典。应用名称显示在应用的SSO网址中的位置,例如SSO网址为:

https://org-name.okta.com/app/simplesamlphpexample_app/exy5xxxxVq70x7/sso/saml

因此,您将simplesamlphpexample_app从网址映射到应用的应用或应用嵌入链接的网址。

这样,无论哪个应用加载相同的登录窗口小部件,窗口小部件都会重定向到该应用。