アプリのログイン ページに Okta ウィジェットを使用しようとしていますが、これは security/api/cors の下のセキュリティ グループにドメイン名を追加することで正常に機能します。ただし、1 つのサーバーで複数のアプリを同じログイン ページでホストしています。有効な CORS リストに追加する最善の方法は何ですか。リストに 100 個のドメインを追加したくなくて、ワイルドカード (*) を使用しようとしてもうまくいきません。
1 に答える
複数のアプリと 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
したがってsimplesamlphpexample_app
、URL からアプリの URL またはアプリの埋め込みリンクにマップします。
このようにして、どのアプリが同じログイン ウィジェットをロードしても、ウィジェットはそのアプリにリダイレクトされます。