密码重置子旅程后Azure B2C强制登录

2024-06-21

我们正在使用密码重置子旅程,如此处所述(https://learn.microsoft.com/en-us/azure/active-directory-b2c/add-password-reset-policy?pivots=b2c-custom-policy#self-service-password-reset-recommended https://learn.microsoft.com/en-us/azure/active-directory-b2c/add-password-reset-policy?pivots=b2c-custom-policy#self-service-password-reset-recommended).

使用此功能时,用户会自动登录成功的密码重置流程。我们希望阻止这种情况,并在密码重置成功后将用户重定向到登录页面。

我们如何才能实现这一目标,主要旅程如下:

    <UserJourney Id="SignIn">
          <OrchestrationSteps>
            <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signin">
              <ClaimsProviderSelections>
                <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
                <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
              </ClaimsProviderSelections>
              <ClaimsExchanges>
                <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="2" Type="ClaimsExchange">
              <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                  <Value>objectId</Value>
                  <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
              </Preconditions>
              <ClaimsExchanges>
                <ClaimsExchange Id="ForgotPasswordExchange" TechnicalProfileReferenceId="ForgotPassword" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="3" Type="InvokeSubJourney">
              <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
                  <Value>isForgotPassword</Value>
                  <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
              </Preconditions>
              <JourneyList>
                <Candidate SubJourneyReferenceId="PasswordReset" />
              </JourneyList>
            </OrchestrationStep>
            <OrchestrationStep Order="4" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
              </ClaimsExchanges>
            </OrchestrationStep>.....
------------------------------------------------------
    <SubJourney Id="PasswordReset" Type="Call">
          <OrchestrationSteps>
            <OrchestrationStep Order="1" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingLogonName" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <!-- This step reads any user attributes that we may not have received when in the token. -->
            <OrchestrationStep Order="2" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="3" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="VerifyEmail" TechnicalProfileReferenceId="VerifyEmail" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="4" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
              </ClaimsExchanges>
            </OrchestrationStep>
          </OrchestrationSteps>

Option 1

一个简单的解决方案(可能并不理想)是阻止用户使用没有取消/继续按钮的自断言页面作为密码重置子旅程的最后一步。这样用户永远不会获得 jwt 令牌。
您可以在自断言页面中包含一些文本,例如“您的密码已成功重置”。请重新登录。您还可以在同一页面中提供登录 URL,以便用户可以导航到它或使用 JavaScript 在延迟后重定向。

Example:

 <TechnicalProfile Id="SelfAsserted-PasswordResetBlockPage">
    <DisplayName>Show Block message</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
        <Item Key="AllowGenerationOfClaimsWithNullValues">true</Item>
        <Item Key="setting.showContinueButton">false</Item>
        <Item Key="setting.showCancelButton">false</Item>
    </Metadata>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="responseMsg" DefaultValue="Your password has been reset successfully. Please login again with your new credentials." AlwaysUseDefaultValue="true"/>
    </InputClaims>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="responseMsg" />
    </OutputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
<ClaimType Id="responseMsg">
    <DisplayName>Information</DisplayName>
    <DataType>string</DataType>
    <AdminHelpText>A claim responsible for holding response messages to send to the relying party</AdminHelpText>
    <UserHelpText>A claim responsible for holding response messages to send to the relying party</UserHelpText>
    <UserInputType>Paragraph</UserInputType>
</ClaimType>

Option 2
具有在密码重置后再次登录的编排步骤。如果尚未完成密码重置,请跳过它。

Note:确保进行广泛的测试,尤其是 SSO 流程,以确保一切按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

密码重置子旅程后Azure B2C强制登录 的相关文章

随机推荐

  • Azure 可以运行 WPF 吗?

    我想编写一个在 Windows Azure 上运行的 ASP Net MVC 应用程序 该应用程序将使用 WPF 创建图像 在我开始写之前 这会起作用吗 Azure 是否具有渲染 WPF 所需的 DLL 包括 DirectX 和图形功能 我
  • HTTP 状态码 302

    我正在用 Ruby 开发 Rails 后端 并且想将数据发布到该服务器 但如果我用 PAW 发出后请求 我就会被重定向 我是 Http 请求的新手 有人可以向我解释一下功能以及如何使用 http post 请求吗 我想在我的服务器数据库 s
  • 调整图像大小以适合画布 - Gimp

    我目前正在使用 Gimp 调整一些图像的大小 我是一名 Web 开发人员 但我不太使用图像处理软件 因为大多数图像都是由设计师提供的 所以 Gimp 工具对我来说非常陌生 我已经浏览了 Gimp 网站上的所有教程和帮助指南 但我找不到最简单
  • WHERE 值不在(子查询)

    我一直在努力解决这个问题 我有两张桌子 一张带有优惠券和发票号码的 一张带有发票号码和客户姓名的 我需要找到尚未使用优惠券的顾客 以下是表格 促销表 Promotions Invoice Coupon 1 couponA 2 couponB
  • 使用时间戳查询 Firebase 数据

    这是我当前在 Firebase 上的数据设计 数据只是 事件 参考中的 json 列表 时间戳 操作和持续时间字段是固定的 以后可能会添加更多可选字段 backend 7f34e events KQ30Lc6lasdfasdfAi1URf
  • API 端点的 Django 子域配置

    我已经建立了一个 Django 项目 它使用django rest framework提供一些 ReST 功能 网站和其他功能都运行良好 然而有一个小问题 我需要我的 API 端点指向一个不同的子域 例如 当用户访问该网站时 他 她可以根据
  • id不存在时查找标签文本

    我正在使用 selenium Web 驱动程序在以下 html 标签中查找标签文本 tr style display inline padding left 10px padding right 10px td table width 77
  • 使用 JPA/ORM 生成数据库模式是一个坏主意吗?

    Salve Part of 另一个问题 答案 https stackoverflow com questions 7595578关于 SO 以及其他声称相同的声明 如果您通过 JPA 更新数据库架构 但通常不是一个好的做法 您是否真的不应该
  • Listbox手动DrawItem大字体

    我正在尝试绘制末端是一个的项目 红色字符 并将其删除 字符 并用黑色绘制其他项目 这是我的代码 private void listBox1 DrawItem object sender DrawItemEventArgs e e DrawB
  • 是否可以模拟 Python 3.6 中的内置 len() 函数?

    是否可以模拟内置len Python 3 6 中的函数 我有一个类定义了一个简单的方法 该方法依赖于len 函数如下 class MyLenFunc object def is longer than three characters se
  • Glassfish 应用服务器中的 JDBC 和连接池

    我想在 EAR 部署上设置连接池和 JDBC 连接 这样我就不必在手动部署到的每个应用程序服务器上进行设置 我需要做什么 是否有一个 xml 文件可以将这些信息放入其中 如果您使用单个 GlassFish 管理控制台来管理整个环境中的多个应
  • 为什么“扔”和“扔前”在这种情况下有相同的行为?

    我惊呆了 我一直以为throw单独在 catch 块中会抛出手头的异常而不改变堆栈跟踪 但是throw ex在 catch 块中将更改堆栈跟踪以显示源自语句位置的异常 采取以下两个代码块 我希望输出会略有不同 因为使用throw和其他用途t
  • AngularJS 使用 $apply 而不使用 $scope

    我开始使用 AngularJS 并且接受了用它来编写控制器的约定 而不是用 scope 所以我的控制器看起来像这样 myApp controller SomeController function this myModel id 1 nam
  • 泛型和实现 IComparable

    我对泛型非常陌生 我正在尝试编写一个简单的类 它将是泛型的 但也允许对字符串成员变量的一些描述进行排序 目前我有一个基本类 但是当我尝试实现接口成员 CompareTo 时 我在顶部收到一个错误 告诉我它尚未实现 这里有什么问题呢 usin
  • php 注意到 $GLOBALS['HTTP_SERVER_VARS']['HTTP_HOST'] 中未定义索引 http_host

    突然 在最近的 php 版本更新后 我从 php 收到了此通知 它在多个地方使用 特别是我的 htmlMimeMail 类 代码是 mail gt setSMTPParams mail xxxx xxx 26 GLOBALS HTTP SE
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • Twitter 集成期间获取访问令牌函数行为不当

    我只是想使用 twitter4j 从我的 Android 应用程序向 Twitter 分享文本 首先 我尝试的是我创建了一个新项目 并且这个特定的代码运行成功 然后我在我的应用程序中混合了该特定代码 登录 Twitter 成功完成 之后我发
  • 如果我们的应用程序位于反向代理后面,如何获取访问者的真实 IP?

    我正在使用 Siteground 的基于 nginx 的动态缓存反向代理 它使用它来服务请求和静态文件 我想获取访问者的 IP 地址 但我无法获取任何内容 甚至没有显示任何内容print r SERVER 这是我尝试过的 hostname
  • Objective c RSA 与 OAEP 填充 sha256 之前的 ios 10

    我正在研究一种在iPhone中使用RSA加密方法的加密方法 到目前为止我可以用这种方法实现获取加密字符串 该字符串被服务器成功解密 SecKeyRef keyRef self addPublicKey pubKey SecKeyAlgori
  • 密码重置子旅程后Azure B2C强制登录

    我们正在使用密码重置子旅程 如此处所述 https learn microsoft com en us azure active directory b2c add password reset policy pivots b2c cust