Azure B2C 自定义重置密码策略

2023-12-19

我在 B2C 中有一些正在发挥作用的自定义策略,但我并没有尝试让重置密码发挥作用。我遇到的问题之一是,我调用 Restful API 来检查提供的电子邮件地址是否是本地用户,或者我们是否从 Microsoft AAD 登录它们。这工作正常,因此如果用户是 SSO 用户,则通过 Microsoft 组织身份登录,如果不是,则通过 B2C 在本地登录。

我的问题是我正在尝试使用重置密码执行类似的操作。我使用以下技术配置文件来获取电子邮件地址

<TechnicalProfile Id="SelfAsserted-Signin-Email">
    <DisplayName>Local Account Signin</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="DisplayName">Signin To Tax Systems</Item>
        <Item Key="setting.operatingMode">Email</Item>
        <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
    </Metadata>
    <IncludeInSso>false</IncludeInSso>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" />
    </InputClaims>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
    </OutputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

获得电子邮件地址后,我们调用 REST API 来检查电子邮件地址。此检查告诉我们该用户是联合用户还是本地用户。如果他们是联合用户,我想出错,因为他们无法通过 B2C 重置密码。

如果他们是本地用户,那么我们想要重置密码。这是通过以下技术简介完成的。问题是他们必须再次输入他们的电子邮件地址,我希望用之前获得的电子邮件地址预先填充该电子邮件地址。

<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
  <DisplayName>Reset password using email address</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
    <Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
    <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Your account has been locked. Contact your support person to unlock it, then try again.</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
  </CryptographicKeys>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
      <InputClaim ClaimTypeReferenceId="signInName" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" />

  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

知道我该怎么做吗?我似乎找不到太多细节api.localaccountpasswordreset关于元数据等。


由于您收到了索赔中的电子邮件signInName在步骤 1、步骤 2 中,您可以按如下方式预填充:

  <InputClaims>
      <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="email"/>
  </InputClaims>

要显示电子邮件验证按钮,您必须拥有email声明为只读。否则,AAD B2C 将预先填充该字段,假设其已验证,并且仅在电子邮件地址发生更改时才显示“验证”按钮。

所以真正的解决方案是:

    <ClaimsSchema>
      <!-- Sample: Read only email address to present to the user-->
      <ClaimType Id="readonlyEmail">
        <DisplayName>E-mail Address</DisplayName>
        <DataType>string</DataType>
        <UserInputType>Readonly</UserInputType>
      </ClaimType>
    </ClaimsSchema>
<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
  <DisplayName>Reset password using email address</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
    <Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
    <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Your account has been locked. Contact your support person to unlock it, then try again.</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
  </CryptographicKeys>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
      <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="readonlyEmail"/>
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="readonlyEmail" PartnerClaimType="Verified.Email" Required="true" />
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

你需要修改AAD-UserReadUsingEmailAddress使得它的输入声明是

<InputClaims>
  <InputClaim ClaimTypeReferenceId="readonlyEmail" PartnerClaimType="signInNames.emailAddress" Required="true" />
</InputClaims>

我将复制整个技术配置文件并为其提供一个经过上述修改的新 ID。

以及任何进一步的参考email在旅途中应该替换为readOnlyEmail以同样的方式。

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

Azure B2C 自定义重置密码策略 的相关文章

  • Swagger 无法向 Azure AD B2C 进行身份验证

    我有一个带有 Swagger 的 Web API 和一个 Azure AD B2C 租户 React 应用程序能够从 B2C 获取令牌 例如 msalInstance loginRedirect scopes openid offline
  • Azure AD B2C:允许访问自定义策略 HTML 模板的策略 IP 地址

    我们正在使用 Azure AD B2C 仍处于预览版 对我们的应用程序的客户进行身份验证 我们将使用自定义 html 模板来实现登录体验和注册 使我们能够更强大地控制 MS 内容之外的格式和链接 由于我们的开发环境位于受限网络上 系统工程师
  • 将自定义声明添加到 azure b2c 客户端凭据流

    我已将 b2c 配置为客户端凭据流的授权服务器 我想向令牌添加声明 以便我可以使用策略将其发送到 APIM 中的后端服务 但我找不到一种方法来将这个额外的声明添加到令牌中 以便我可以在 APIM 上使用它 注意 可以使用授权代码流 但使用客
  • 自定义 Azure AD B2C 自定义策略中的消息/错误文本

    我想在 Azure AD B2C 自定义策略中自定义消息 错误文本 但没有找到正确的方法来执行此操作 有人在其 B2C 自定义策略中这样做过吗 我想定制验证是必要的 请点击发送按钮 测试位于 版本介绍消息 ID 我将以下内容添加到 Buil
  • Azure B2C。使用 Azure 门户编辑自定义属性

    我已在 Azure 门户中创建了 Azure B2C 应用程序 我只需要为此应用程序使用登录策略 无需注册 我需要创建两种用户 Simple User and Admin 为此 我创建了自定义字符串属性 Role 它通过令牌作为登录策略的声
  • Azure Active Directory B2C 自定义邀请策略 - 在步骤之间传递自定义声明

    我通过此示例实施了邀请策略 通过向用户发送电子邮件链接来邀请用户访问该网站 https github com azure ad b2c samples tree master policies invite https github com
  • 我可以使用 ADConnect 将用户迁移到 Azure B2C

    Azure Active Directory B2C 的文档指出 ADConnect 不能用于迁移用户 我相信这是指本地商店 不 Azure AD Connect 不适用于 Azure AD B2C https learn microsof
  • 在没有 Azure Front Door 的情况下使用 Azure AD B2C 自定义域

    我想将自定义域与 Azure AD B2C 结合使用 正如 Microsoft 文档中所述 需要使用 Azure Front Door 来执行此操作 为了避免为此服务付费 我想使用我自己的网络服务器 反向代理 Nginx 来执行此操作 我不
  • 刷新 Azure AD B2C 中的令牌撤销

    在我的 AD B2C 应用程序中 我需要撤销 AD B2C 为用户提供的所有刷新令牌 当用户帐户登录多个应用程序并且在一个应用程序中用户更改了密码时 这是一项需要实施的要求 更改密码后 我已撤销给予其他应用程序的所有刷新令牌 怎么做 Upd
  • 如何让用户在 Azure AD B2C 中注册后返回登录页面?

    当用户在系统中注册时 他会自动重定向到我们的应用程序作为登录用户 我希望在注册后 他会被重定向到签名页面 我想要这种行为 因为用户在访问系统之前需要得到管理员的批准 我使用自定义策略 我尝试使用 SM Noop 会话管理器 但它不起作用 有
  • 尝试实施 Azure Active Directory B2C 时出现 404 错误

    我正在尝试在我正在开发的新页面中实现 Azure Active Directory B2C 但我得到了这个404 File or directory not found尝试从我的页面登录时出错 我创建了租户 注册了我的应用程序 创建了我的政
  • 如何使用 MSAL 对 AAD B2C 进行身份验证?

    我有一个使用 ADAL 的客户端 服务器身份验证的工作版本 但是 当您想要使用本地帐户 即 仅使用用户名或仅使用 AAD 之外没有支持身份验证器的电子邮件地址 时 B2C AAD 似乎无法与 ADAL 很好地配合 看来我们应该用于本地帐户的
  • 具有多重身份的B2C用户

    在 Azure B2C 中 有多个身份提供商 在本示例中 我将使用本地帐户和 Google 帐户 新用户使用电子邮件地址注册本地帐户 电子邮件受保护 cdn cgi l email protection 他们使用该网站 下次返回时 他们决定
  • B2C 和 Azure 应用服务的 CORS 问题

    我通过在控制器中使用 AddCors 和 EnableCors 在我的 ASP NET Angular 应用程序中启用了 CORS 我的应用程序正在与 AD B2C 页面进行通信 构建后 我在控制台中出现此错误 访问 XMLHttpRequ
  • 使用 MSAL 与 Angular 进行重定向_uri_mismatch Azure AD B2C

    使用时loginRedirect or acquireTokenRedirect 我收到以下错误 redirect uri mismatch AADB2C90006 3a 请求中提供的重定向 URI http 3a 2f 2flocalho
  • 使用 Xamarin 和 Azure AD B2C 设置自定义选项卡的样式

    我效仿了验证示例 https developer xamarin com samples xamarin forms WebServices TodoAzureAuthADB2CClientFlow 将自定义 Chrome 选项卡与 Azu
  • 使用 Azure AD B2C 登录 Xamarin Android 应用

    经过一周的研究可与 Azure AD B2C 一起使用 Xamarin 以 Android 平台 而不是 Xamarin Forms 为目标的身份验证原理后 我终于寻求一些建议 我有一个带有 登录 按钮的活动 我想通过按钮的触摸事件登录到
  • microsoft graph rest api beta:由azure ad b2c中的api创建的应用程序无效

    我正在尝试按照以下文档使用 beta api 创建广告应用程序 可以在 Azure AD B2C 中成功创建应用程序 notAzure Active Directory 符合预期 问题是当我尝试从门户打开此应用程序时 页面只是不断加载 而应
  • 受 Azure AD B2C 保护的自动化端点测试

    我有一个 WebAPI 应用程序 它使用用户通过凭据登录获得的 Azure B2C 令牌对用户进行身份验证 我现在需要针对我的 WebAPI 编写一些测试 但考虑到我需要登录 我不确定如何自动获取令牌https login microsof
  • 由于 Azure ADB2C,Blazor 服务器 SignalR 集线器在 StartAsync 上失败

    我创建了一个 Blazor 服务器应用程序 以开始学习 Blazor 和一些更新的技术 我遵循了 Microsoft 提供的集线器聊天教程 事情进展顺利 然后我添加了一些基本的 cookie 身份验证 事情仍然在进展中 然后 我按照 Car

随机推荐

  • MediaPlayer - java.io.FileNotFoundException:没有内容提供程序

    我写一个 mp3 播放器已经有一段时间了 但由于某种原因出现了这个异常 W MediaPlayer 无法打开 存储 模拟 0 音乐 通用音乐 file mp3 java io FileNotFoundException 没有内容提供程序 s
  • 如何在 Visual Studio 2008 中集成 C++ 编译器

    有人可以帮我解决这个问题吗 我目前正在研究荣誉学位最后一年的项目 我们正在开发一个应用程序来评估学生的编程作业 针对一年级学生水平 我只是想知道如何使用C 代码集成C 编译器来编译C 代码 在我们的例子中 我们将学生 C 代码加载到文本区域
  • 有没有更好的方法来等待排队线程?

    在执行另一个进程之前是否有更好的方法来等待排队的线程 目前我正在做 this workerLocker new object Global variable this RunningWorkers arrayStrings Length G
  • 将特定值制成表格并返回计数的函数

    想象你有一个向量x x lt c C A B B A D B B A A A A A D C A C A A C A A D A D A D A A D D B B A A C A A B B B B B B B A C A C B 您可以
  • 在 API Gateway 或 lambda 中将一些信息保存为会话

    我将在网站上设计一个单点登录 并在我的项目的一个组件中使用 API Gateway API网关负责根据用户状态将其定向到适当的服务 因此如果用户有效 用户发送的令牌未过期 则将提供用于获取他请求的内容的相关服务 并且如果从UI 已过期 那么
  • SwiftUI 连接多行可点击文本

    我应该通过一个动作从一组文本创建一个文本 一个例子 Text Lorem ipsum dolor sit amet consectetur adipiscing elit Donec metus urna mollis sit amet t
  • Angular 8:将 Mat-form-field 中的高度更改为特定像素数

    我怎样才能改变高度mat form field with appearance outline 到特定的高度像素数 40px 或用户体验团队将来所需的任何数字 我需要减少 mat form field 如何才能做到这一点 等式是什么 或者可
  • 如何在 MYSQL 中运行查询而不将其写入二进制日志

    我想将一个大文件导入 MySQL 但是 我不希望将其写入二进制日志 因为导入将花费很长时间 并导致从站远远落后 我宁愿在事后在从站上单独运行它 因为它在系统上会容易得多 有问题的表是一个新表 因此我真的不必担心它不同步 因为主表和所有从表最
  • 如何显示 DOMElement?

    我在用着可读性 http bazaar launchpad net keyvan k1m fivefilters content only annotate head readability php的代码从网页中提取 HTML 如何将其显示
  • str.split() 的分割顺序有任何保证吗?

    根据Python 2 7 文档 https docs python org 2 7 library stdtypes html str split using str split with maxsplit指定将字符串拆分为maxsplit
  • 删除所有 PostgreSQL 视图

    如何使用查询从 PostgreSQL 删除所有用户定义的视图 就像我们可以使用查询删除所有函数 SELECT DROP FUNCTION ns nspname proname oidvectortypes proargtypes FROM
  • 在 C# 中将 XML 字符串解析为类? [复制]

    这个问题在这里已经有答案了 可能的重复 如何反序列化 XML 文档 https stackoverflow com questions 364253 how to deserialize xml document 假设我有一个在 C 中定义
  • 以编程方式更改数据后重新渲染 ng2-google-chart

    我在用ng2 google chart而且效果很好 现在我想使用一些复选框来选择图表中显示哪些数据 我的图已连接到数组chartData 选择后更新正确 但图表没有改变 这是我的图表 div div 有没有办法在数据更改后重新渲染它 同时我
  • 设置在 Spring MVC 中不起作用

    PROBLEM 我想向用户显示自定义错误页面 简而言之
  • 如何访问 Knockout 组件中的自定义元素?

    看看这个场景 ko components register hello viewModel function template h1 hello wrold h1 如果我使用
  • 卡夫卡生产者批量大小

    我有一个相关问题batch size生产者配置 当发生什么batch size已经达到并且生产者应用程序线程发送更多数据 线程是否会阻塞 直到包含批处理的缓冲区中的空间可用为止 batch size以总字节数而不是消息数来衡量批量大小 它控
  • 如何使用 RSpec 在 Rails 测试环境中加载 Seed.rb?

    我有以下 seeds rb 文件 State create name gt Alabama abbreviation gt AL name gt Alaska abbreviation gt AK name gt Arizona abbre
  • CSS ::before ::after 类的伪元素不起作用

    我正在尝试添加一个 before and after菜单标题的伪元素 伪元素对于菜单外的常规链接效果很好 但是 当我尝试将它们应用到菜单项时 background属性已设置 但 before and after属性不是 这是相关的CSS c
  • Rails 资产用于开发而非生产

    古老的 我不懂链轮 问题 我在 app assets javascript jquery fancybox js 中有一个资产 我使用 来访问 加载它 这在开发中有效 但在生产中无效 我正在查看日志 但那里肯定发生了一些事情 因为我看不到它
  • Azure B2C 自定义重置密码策略

    我在 B2C 中有一些正在发挥作用的自定义策略 但我并没有尝试让重置密码发挥作用 我遇到的问题之一是 我调用 Restful API 来检查提供的电子邮件地址是否是本地用户 或者我们是否从 Microsoft AAD 登录它们 这工作正常