在 B2C 自定义策略上启用 Javascript

Posted

技术标签:

【中文标题】在 B2C 自定义策略上启用 Javascript【英文标题】:Enable Javascript on B2C Custom Policy 【发布时间】:2019-12-07 04:01:56 【问题描述】:

javascript 在客户端被禁用,即使我已根据文档在下面添加。

<RelyingParty>
  <DefaultUserJourney ReferenceId="B2CSignUpOrSignInWithPassword" />
  <UserJourneyBehaviors>
   <ScriptExecution>Allow</ScriptExecution>
  </UserJourneyBehaviors>
  ...
</RelyingParty>

当我尝试上传自定义策略时,我收到一个错误 - “请在启用 JavaScript 时在内容定义中使用页面协定。”在文档中找不到与此错误相关的任何内容。

尝试使用 datauri 将元数据添加到内容定义中 -

<ContentDefinition Id="api.localaccountpasswordreset">  
  <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
 <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.1.0</DataUri>
  ...
 </ContentDefinition>

期望 javascript 在客户端登录页面上工作

【问题讨论】:

【参考方案1】:

本文介绍了端到端如何启用 javascript。 https://docs.microsoft.com/en-us/azure/active-directory-b2c/javascript-samples

【讨论】:

这仍然不起作用。我按照建议进行了更新,但 javascript 仍然被禁用 您如何确定这一点?您是否检查了浏览器中的页面?您能否分享指向用户流程的“立即运行”链接? 据我所知,lesandbox01.b2clogin.com/static/tenant/default/… 中有一个脚本标签。当我访问您的链接时,它就出现了。所以我没有看到任何问题。而且您的页面上有此脚本错误,这可能会影响其功能。 0: '$' 未定义 感谢您强调我们需要修改 所有 内容定义这一事实 - 我只是在更新那些我的政策正在利用的内容,并且当它不断拒绝时我失去了理智接受我更新的政策。进入并修改所有内容定义让我摆脱了痛苦。 @veejar 感谢您发布这个问题......我几分钟前就遇到了这个问题。我刚刚更新了我试图启用 JavaScript 的自定义策略的 dataUri。到了这里,然后从其他策略 .xml 文件中更改了所有旧的 dataUris。上传工作。 Jas Suri:感谢您澄清这一点。您已经通过 LinkedIn 聊天帮助我解决了与 B2C 相关的另一个问题。继续帮助我们。 :-) 顺便说一句:你知道是什么导致了这个问题吗? ***.com/q/58329792/114029【参考方案2】:

如果您仍然面临错误,请替换 DataUri 标记

&lt;DataUri&gt;urn:com:microsoft:aad:b2c:elements:idpselection:1.2.0&lt;/DataUri&gt;&lt;DataUri&gt;urn:com:microsoft:aad:b2c:elements:contract:providerselection:1.2.0&lt;/DataUri&gt;

对于ContentDefinition api.idpselectionsapi.idpselections.signup

【讨论】:

不只是您列出的 3 个 DataUri,它们都在使用中……例如我错过了一个:unifiedssp 并抛出了与 OP 提到的相同的错误【参考方案3】:

如果有人仍然面临错误,那么您应该将内容定义中的所有数据 URI 替换为以下 url 中定义的数据 URI:

https://docs.microsoft.com/en-us/azure/active-directory-b2c/contentdefinitions#migrating-to-page-layout

在您的策略中的任何地方都使用 新数据 URI 而不是 一个,这将解决问题。使用相同的方法修复了我的。不仅如此,Microsoft 文档还明确指出“如果您打算使用 JavaScript,您需要为自定义策略中的所有内容定义定义一个页面布局版本和页面合同版本”。

参考网址:https://docs.microsoft.com/en-us/azure/active-directory-b2c/javascript-samples

【讨论】:

【参考方案4】:

我遇到了同样的问题,为了更正,我按照以下步骤操作(对于自定义策略):

首先:在 _Base.Xml 中转到 ContentDefinitions 并找到 DataUri,将所有旧 uri 更改为新的,如此链接 https://docs.microsoft.com/en-us/azure/active-directory-b2c/contentdefinitions#migrating-to-page-layout

第二:确保您的元素和页面标识符之间有“合同”一词,例如:更改此 urn:com:microsoft:aad:b2c:elements:globalexception:1.2.0 为了这 urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.0

第三:在您的特定自定义策略中,找到 RelyingParty 并将 ScriptExecution 元素添加到 RelyingParty 的 UserJourneyBehaviors 元素中

这样的

<RelyingParty>
  <DefaultUserJourney ReferenceId="B2CSignUpOrSignInWithPassword" />
  <UserJourneyBehaviors>
    <ScriptExecution>Allow</ScriptExecution>
  </UserJourneyBehaviors>
  ...
</RelyingParty>

第四:上传base.xml,上传你自定义的policy.xml,尽情享受吧!

来自巴西的问候。

【讨论】:

这对我有帮助,同时也在考虑这个页面:azure.microsoft.com/en-us/updates/…【参考方案5】:

只有当我用 contract 更新所有 ContentDefinition 时才对我有用,就像,这需要我的时间

SignUpOrSignin.xml

<UserJourneyBehaviors>
  ...
  <ScriptExecution>Allow</ScriptExecution>
</UserJourneyBehaviors>

TrustFrameworkExtensions.xml / TrustFrameworkBase.xml

<ContentDefinition Id="api.selfasserted.appfactor.registration">
    <LoadUri>https://raw.githubusercontent.com/mdzzaman/dev-info/master/az/selfasserted-appfactor-registration.html</LoadUri>
    <RecoveryUri>https://raw.githubusercontent.com/mdzzaman/dev-info/master/az/selfasserted-appfactor-registration.html</RecoveryUri>
    <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.6</DataUri>
    <Metadata>
      <Item Key="DisplayName">App Factor</Item>
    </Metadata>
  </ContentDefinition>


 <ContentDefinition Id="api.error">
    <LoadUri>~/tenant/templates/AzureBlue/exception.cshtml</LoadUri>
    <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
    <DataUri>urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.1</DataUri>
    <Metadata>
      <Item Key="DisplayName">Error page</Item>
    </Metadata>
  </ContentDefinition>

  <ContentDefinition Id="api.signuporsignin">
    <LoadUri>~/tenant/templates/AzureBlue/unified.cshtml</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>

... 全部

【讨论】:

以上是关于在 B2C 自定义策略上启用 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

自定义策略中的 ClaimsTransformation 错误

Azure B2C 如何传递文化

Azure AD B2C 自定义策略

为 Azure AD B2C 自定义策略调用 New-CpimCertificate 时出现问题

Azure AD B2C 自定义密码重置策略不会使用 + char\sign 验证电子邮件

在 Azure B2C 的自定义策略中找不到声明 - Saml