0

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

4

1 回答 1

0

如果您有多个应用程序和一台服务器,并且对于每个应用程序,登录小部件 URL 将如下所示:

<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”的字典。其中应用名称是显示在您应用的 SSO URL 中的名称,例如 SSO URL 是:

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

因此,您从 URL 映射simplesamlphpexample_app到应用程序的 URL 或应用程序的应用程序嵌入链接。

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

于 2016-11-19T01:29:15.987 回答