将 Azure AD B2C 与 Azure 移动应用程序一起使用时,如何设置密码策略?

When using Azure AD B2C with Azure Mobile Apps, how is the password policy set?

在 Azure AD B2C 中,"Sign-up/Sign-in" 和 "Password reset" 有不同的策略。我复制 "Sign-up/Sign-in" 策略

的元数据端点

并将其粘贴到 Azure App Authentication

这基本上可以工作,但是没有地方可以放入具有密码重置模板的密码重置元数据。我认为因此,当您单击 "Forgot password" 时,您最终会得到

You do not have permission to view this directory or page.

at ~/.auth/login/aad/callback 当试图去 /xxx.onmicrosoft.com/B2C_1_b2c_sign_up_sign_in/api/CombinedSigninAndSignup/forgotPassword?csrf_token=xxx&p=B2C_1_b2c_sign_up_sign_in

为什么没有Sign-in/Sign-up/Password重置?

此外,另一个奇怪的事情是点击创建一个新帐户。

如果你按取消,它会再次进入回调需要权限的页面。

我下载了政策,密码重置有以下内容,这不在登录中

<UserJourneys>
    <UserJourney Id="B2CPasswordResetV1">
      <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="ClaimsProviderSelection" ContentDefinitionReferenceId="api.idpselections">
          <ClaimsProviderSelections>
            <ClaimsProviderSelection TargetClaimsExchangeId="PasswordResetUsingEmailAddressExchange" />
          </ClaimsProviderSelections>
        </OrchestrationStep>
      </OrchestrationSteps>
    </UserJourney>
  </UserJourneys>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="B2CPasswordResetV1" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
        <OutputClaim ClaimTypeReferenceId="emails" />
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="trustFrameworkPolicy" Required="true" DefaultValue="{policy}" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>

更新。我刚找到这个

When you create a sign-up or sign-in policy (with local accounts), the consumer will see a "Forgot password?" link on the first page of the experience. Clicking on this link doesn't automatically trigger a password reset policy. Instead a specific error code AADB2C90118 is returned back to your app. Your app needs to handle this and invoke a specific password reset policy. A sample that demonstrates this approach of linking together policies is here.

看起来它已发布到回调。所以似乎zumo回调无法处理错误。如果 zumo 回调得到 state/code/id_token,那么它就完成了。

遗憾的是,B2C 的集成应用服务支持不允许您的应用处理错误回调以重定向到您的重置密码策略。此时您的选择是:

  1. 使用自定义 CSS 或
  2. 删除重置密码 link
  3. 在 web.config 中配置一个自定义错误处理程序来处理错误并允许最终用户通过将他们重定向到 /.auth/login/aad?p=B2C_1_B2CPasswordResetV1.
  4. 来调用您的密码重置策略

我在此博客中写了一个 #2 的简单示例 post 评论:https://cgillum.tech/2016/08/10/app-service-auth-and-azure-ad-b2c-part-2/#comment-581

这是我分享的 web.config 片段,其中显示了如何处理此错误并重定向到移动后端上的静态页面:

<configuration>
  <system.webServer>
    <httpErrors defaultResponseMode="File" errorMode="Custom" >
      <clear />
      <error statusCode="401" subStatusCode="73" path="MyPage.html" />
    </httpErrors>
  <system.webServer>
</configuration>

还可以使用其他响应模式,包括ExecuteURLRedirect。其中之一可能比我使用 File 的示例更合适,具体取决于您的需要。有关 IIS 自定义错误的更多详细信息,请参见此处:https://www.iis.net/configreference/system.webserver/httperrors#005.