针对 CDN 的 B2C 自定义策略 LoadUri 无法加载登录表单

B2C Custom Policy LoadUri against a CDN fails to load signin form

我们有一个 B2C,带有用于注册、登录和社交登录的自定义策略,基本页面布局是从 CDN (base.html) 加载的,我们的自定义页面布局就这么简单:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Login</title>
        <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet" />
    </head>
    <body>
        <div class="container">
            <div class="d-flex justify-content-center h-100">
                <div class="card">
                    <div id="api"></div>
                </div>
            </div>
        </div>
        <script crossorigin="anonymous" src="https://code.jquery.com/jquery-3.4.1.min.js" type="text/javascript"></script>
        <script crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" type="text/javascript"></script>
    </body>
</html>

在我们的自定义策略中,我们使用这样的 ContentDefinition:

       <ContentDefinition Id="api.signuporsignin">
        <LoadUri>https://XXXXX.z16.web.core.windows.net/{OIDC:ClientId}/base.html</LoadUri>
        <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
        <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.4</DataUri>
        <Metadata>
          <Item Key="DisplayName">Signin and Signup</Item>
        </Metadata>
      </ContentDefinition>

这很好用,因为是从静态网站 (STA) 检索 base.html,而不是通过 blob STA 配置的 Azure CDN。 如果我们将指向 https://xxx.azureedge.net/{OIDC:ClientId}/base.html 的 LoadUri 更改为 CDN 端点 B2C returns,则会出现错误,指出在页面上加载脚本时出现问题,并且不会呈现登录表单。

在任何浏览器中同时使用来自静态网站和 CDN 的 URL 可以正确呈现页面,该页面是白色的,只有一个登录标题。

当 B2C 尝试从 CDN 请求此页面时,我认为是 CORS 问题。 我已经在我的 STA 中配置了 CORS,如下图所示添加了我的 B2C 租户,但根本没有工作:

请问有什么关于针对 CDN 配置 B2C 的帮助吗?

如果此处存在 CORS 问题,则可能在 CDN 中:https://docs.microsoft.com/en-us/azure/cdn/cdn-cors

根据文档,您可以创建一个规则来设置正确的响应 header: