我正在尝试将 Okta 小部件用于我的应用程序登录页面,该页面成功地将域名添加到 security/api/cors 下的安全组中。但是,我有一台服务器托管多个具有相同登录页面的应用程序。我添加到启用的 CORS 列表中的最佳方法是什么,我不想将 100 个域添加到列表中并尝试使用通配符 (*) 并且它不起作用。
1 回答
如果您有多个应用程序和一台服务器,并且对于每个应用程序,登录小部件 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 或应用程序的应用程序嵌入链接。
这样,无论哪个应用程序加载相同的登录小部件,该小部件都会重定向到该应用程序。