使用 azure b2c 进行 SSO 时,为什么 api 连接器未返回电子邮件?

2023-12-20

我有一个带有 API 连接器的用户流。我正在使用“发送令牌之前” https://learn.microsoft.com/en-us/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-user-flow#before-sending-the-token-previewapi 连接器来检索我的数据库中的用户角色,然后将其作为 extension_Role 在令牌中发送回。

当我进行正常流程时,一切正常,对我来说是:

  • Sign-up
  • 断开
  • Sign-in

这工作正常,因为在注册时我手动输入电子邮件,在登录时我也手动输入电子邮件。在这两种情况下,我的 C# 后端 api 连接器都会收到电子邮件声明。

当我使用相同的用户流程但激活了 SSO 访问另一个网站时,问题就变得棘手了。这意味着它不会触发我再次输入我的凭据,但它会尝试让我在后台登录。当它这样做时,我仍然调用我的 C# 后端,但这次没有电子邮件。这是收到的 JSON:

{
    "step":"PreTokenIssuance",
    "client_id":"HIDDEN FOR SECURITY",
    "ui_locales":"en-US",
    "objectId":"HIDDEN FOR SECURITY",
    "surname":"HIDDEN FOR SECURITY",
    "displayName":"HIDDEN FOR SECURITY",
    "givenName":"HIDDEN FOR SECURITY"
}

我想知道为什么我没有电子邮件。

There are the application claims and user claims on my user flow: App claims User attribute

如果此问题没有真正的解决方案,则可以创建一个名为“AutomaticEmail”的新自定义字段,并在注册时使用用户电子邮件填充此字段。这会起作用,但我认为这是一个愚蠢的解决方案,因为已经有用于此目的的现场电子邮件,如果用户出于某种原因更改电子邮件,将会出现很多问题。


• 这是因为当您登录另一个网站时,该网站是不受信任的域,即使通过 SSO 进行身份验证后后端 C# json 文件中的声明被隐藏,收到的令牌中的声明输出也会​​被加密,而电子邮件声明属性会被加密。省略,而其他声明属性仍然存在于接收到的令牌中,即使被隐藏/加密。

• 因此,电子邮件声明属性可能会在json 文件中返回null,因为该属性在列中的值可能丢失或未知。因此,当元素为 null 时,将省略与电子邮件属性相关的键值对并返回与 Azure AD B2C 声明数据类型相对应的值。因此,由于电子邮件声明属性是字符串类型,因此它返回空字符串“”,就像在收到的身份验证令牌中看不到电子邮件属性一样。

• 另外,将以下声明添加到自定义策略输出声明中,以便您能够将电子邮件作为响应令牌中的属性获取,因为您的自定义策略可能允许您通过多个属性声明类型进行注册/登录,并且您可能使用电子邮件以外的其他索赔类型时,不会收到电子邮件索赔。

    <!-- This was already here -->
   <OutputClaim ClaimTypeReferenceId="email" />
   <!-- Added claim -->
   <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" 
    PartnerClaimType="email" />

请找到下面的链接,其中解释了用于扩展和自定义用户注册流程的 API 连接器以及返回空值的处理:-

https://learn.microsoft.com/en-us/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-custom-policy https://learn.microsoft.com/en-us/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-custom-policy

https://learn.microsoft.com/en-us/answers/questions/406952/email-claim-sometimes-missing-in-b2c-tokens.html https://learn.microsoft.com/en-us/answers/questions/406952/email-claim-sometimes-missing-in-b2c-tokens.html

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

使用 azure b2c 进行 SSO 时,为什么 api 连接器未返回电子邮件? 的相关文章

随机推荐

  • 调用 MS Access 查询,该查询从 Delphi ADO 组件调用模块中的 VBA 函数

    我在 MS Access 模块中创建了一个函数 比方说Calculate A B 我还在 MS Access 中创建了一个查询来使用此函数 比方说 UPDATE aTable SET aField Calculate bField cFie
  • 如何停止忽略子树子目录中的文件模式?

    我正在将 Git 用于我自己的 Unity 项目 我是唯一的开发人员 所以我可以使用破坏性命令 Unity 开发人员可能知道 Unity 为 Assets 文件夹 项目的主文件夹 下的所有内容创建 meta 文件 这些文件 必须 与原始文件
  • 如何在 Asana 中按用户获取任务

    我刚刚开始使用 Asana API 让自己成为一个小工具来概览分配给我的所有任务 我可以做各种各样的事情 比如获取所有工作组 项目 用户 项目任务等 但不知何故 我找不到如何获取每个用户的所有任务 当您登录 Asana 时 您可以概览分配给
  • 释放内存时堆损坏

    我有一堂课如下 struct CliHandler CliHandler int argc char argv CliHandler int doWork int argc char argv private CliHandler cons
  • 在jupyterlab中使用plot.ly - 图形不显示

    我想用 pylot 绘制 3D PCA 散点3d 但是图形没有显示在朱皮特拉实验室只有在jupyter笔记本 我已经安装了 jupyterlab plotly 包 并且能够创建 jupyterlab plotly Plotly 对象 但我无
  • Spring Batch - 远程分区

    目前 我们正在将批处理作业从 java 迁移到 Spring Batch 该批处理作业从数据库和 Web 服务获取输入 我们需要在四台服务器上运行此作业以提高性能 因为此作业正在处理大量数据 上述场景可以通过Spring Batch中的远程
  • 打开辅助窗口后,Windows.Current.Content 的值应该是多少?

    这是 Template10 文章中 App 类中的建议代码实施外壳 https github com Windows XAML Template10 wiki Controls implementing a shell public ove
  • 查找多个数组中最常见的元素组合

    我有几个数组 例如 var arr1 new A B C D var arr2 new A D var arr3 new A B var arr4 new C D var arr5 new B C D var arr6 new B A et
  • 类似于 $.datepicker.formatDate 的函数用于格式化时间?

    With datepicker formatDate我只能格式化日期 这意味着如果我传入一个 Date 对象 我只能格式化它的日期部分 而不能格式化时间部分 是否有任何等效的函数允许时间部分也被格式化 解析 最好使用相同的语法 我正在使用以
  • C# XPath 帮助 - 表达式不起作用

    下面是一个示例 XML 文档 与我从中获取信息的文档相匹配
  • 在 data.table R 中使用 lapply .SD

    我不太清楚使用 SD and by 例如 下面的代码片段是否意味着 更改中的所有列 DT分解除A and B 它还说在data table手动的 SD指的是子集data table对于每个组 不包括分组列 所以列A and B被排除在外 D
  • 从 Java 运行 TypeScript 编译器

    我正在尝试从我的 Java 应用程序运行 TypeScript 编译器 首先 我试图弄清楚是否可以在没有 Node js 的情况下从命令行运行编译器 jsc tsc js 但这样我就不会收到任何错误 也不会提供帮助 jsc tsc js m
  • 避免简单增量器中的状态

    我正在尝试使用 JavaScript 函数式编程技术来避免状态 我牢牢掌握了许多基本的 FP 技术 例如闭包 柯里化等等 但我无法全神贯注于处理状态 我想知道创建功能程序的人如何实现以下非常简单的应用程序 用户单击浏览器中的按钮 jQuer
  • 如何使用 shell 脚本从文件中获取变量的值?

    有一个文件post check ini我需要为以下设置的值 Max value 2 我如何获得价值2 from Max value try grep Po lt Max value post check ini
  • Fresco 在大图像 (>2048px) 上的自动调整大小功能可以禁用/调整吗?

    在长尺寸 gt 2048px 的图像上 Fresco自动应用调整大小 https frescolib org docs troubleshooting html Android 无法显示任一维度长度超过 2048 像素的图像 这超出了Ope
  • Leaflet Control Search:打开弹出窗口搜索结果

    我正在使用很棒的插件传单 控制 搜索 http labs easyblog it maps leaflet search 为了在我的地图上搜索标记 来自 geoJson 标记组 效果很好 我现在只有一个简单的问题 如何打开搜索结果标记的弹出
  • Google 在 SingleChildScrollView 中的表单内绘制地图

    我有一个google map inside column inside SingleChildScrollView 我可以水平平移地图 但是垂直平移时SingleChildScrollView捕获事件并自行滚动 我如何在收到任何事件时平移地
  • QGraphicsView fitInView 边距

    为什么这个 graphics view gt fitInView scene gt sceneRect Qt KeepAspectRatio 没有按预期工作 它没有正确适合场景矩形 显示其周围的边距 原因是这样的 https bugrepo
  • for 循环中的分号单个表达式

    为什么最后有一个分号Proc num stack slots i lt 0在下面的代码中 我认为分号是 OCaml 中的分隔符 我们是否可以始终为块的最后一个表达式添加一个可选的分号 for i 0 to Proc num register
  • 使用 azure b2c 进行 SSO 时,为什么 api 连接器未返回电子邮件?

    我有一个带有 API 连接器的用户流 我正在使用 发送令牌之前 https learn microsoft com en us azure active directory b2c api connectors overview pivot