B2C如何支持匿名用户?
How to support anonymous users in B2C?
我们需要有关设置的架构建议。
我们正在开发一款移动应用程序,它将:
- 使用B2C身份验证
- 支持匿名用户(允许用户跳过注册过程)
- 仍然对 using Azure access tokens 的 API 请求执行 身份验证 的形式(如果可能)
我们尝试实现的:
匿名客户端 - 当用户选择跳过注册时
进程:
- 通过MS Graph
向B2C触发静默注册请求
- 使用 后端生成的
deviceID
填充自定义字段,我们稍后可以使用它来识别用户。
- 使用以上信息生成令牌
用户不会有被注册的印象,也不会收集任何个人数据。
(完全)注册客户端 - 如果用户决定完成注册,
- 开始常规的 B2C 交互式注册过程并要求用户输入所有必需的信息。
- 在后台,通过将先前生成的
deviceId
发送到B2C并将其与用户输入的信息进行比较来检查用户是否存在。
- 如果用户确实存在
- 跳过一些进一步的注册步骤
- 使用我们的 API 以及
deviceID
和用户数据,通过 Graph 执行静默配置文件更新。
- 如果用户不存在(用户在安装应用程序后第一次完成注册)
- 继续正常的注册流程
这似乎可以使用 自定义策略 并使用包含 deviceId
并在入站 id_token_hint
中发送的 id_token_hint
来实现=19=] 从我们的API到B2C。在政策中,我们将 向用户旅程添加一个额外的编排步骤,以提取 deviceId
并 传递它 以供使用在验证编排步骤。
但是,这似乎太复杂了,到目前为止我们没有成功完成这项工作。因此,我们想请教一下征求您对此事的建议。
是否有涵盖这种情况的开箱即用的解决方案?
支持'temporary application users'概念的一些功能。
如果不是,完成这项工作所需的正确步骤大纲是什么?
您可以使用两个流程构建它。我假设 deviceId 是根据浏览器和其他信号在客户端生成的。
访客用户流量
比方说,此流程将允许用户“以访客身份结账”。当用户单击此按钮时,启动 来宾用户 B2C 策略。
- 您的应用应使用客户端生成设备 ID javascript
- 您的应用应将此数据作为查询参数发送到 Azure AD B2C 来宾用户 B2C 策略。
- 来宾用户 B2C 策略应该解析 deviceId 查询参数
- 访客用户 B2C 策略应该使用 claimsTransform 编写一个包含随机生成的电子邮件的帐户,并将 deviceId 写入 signInNames.deviceId 属性。这允许通过 deviceId
查找帐户
- 来宾用户 B2C 策略随后应为此用户帐户颁发令牌,并且还应将 deviceId 作为声明嵌入令牌中。
- 您的应用可能会使用 deviceId 设置持久性 cookie。这允许即使用户关闭浏览器或注销设备也能被识别。可选。
访客转化流量
稍后,用户虽然仍处于登录状态,但希望完成其帐户的设置。创建一个新的 B2C 策略,这次我们会将 deviceId 传递到查询参数中,如果应用程序有一个可用的(在令牌或应用程序 cookie 中)。
- 您的应用程序应检查令牌是否包含来宾用户和 deviceId。如果不是,请检查 cookie 是否与 deviceId 一起出现。
- 您的应用应向 AAD B2C 发出身份验证请求,并在查询参数中包含 deviceId
- B2C 策略应解析 deviceId 查询参数
- B2C 政策应通过 signInNames.deviceId 在目录中进行查找,并从查询参数
解析设备 ID
- 如果找到用户,则针对此objectId进行进一步操作
- 如果找不到用户,请执行正常的注册步骤
如果您愿意,以上所有内容都可以转换为使用 id_token_hint
,这意味着没有人可以弄乱发送到 AAD B2C 的 deviceId,因为它将成为一个有符号值。
您还需要考虑 deviceId 冲突。如果这是可能的,那么这将成为一个安全问题,因为两个不同的人可能会链接到同一个帐户。
我们需要有关设置的架构建议。
我们正在开发一款移动应用程序,它将:
- 使用B2C身份验证
- 支持匿名用户(允许用户跳过注册过程)
- 仍然对 using Azure access tokens 的 API 请求执行 身份验证 的形式(如果可能)
我们尝试实现的:
匿名客户端 - 当用户选择跳过注册时 进程:
- 通过MS Graph 向B2C触发静默注册请求
- 使用 后端生成的
deviceID
填充自定义字段,我们稍后可以使用它来识别用户。 - 使用以上信息生成令牌
用户不会有被注册的印象,也不会收集任何个人数据。
(完全)注册客户端 - 如果用户决定完成注册,
- 开始常规的 B2C 交互式注册过程并要求用户输入所有必需的信息。
- 在后台,通过将先前生成的
deviceId
发送到B2C并将其与用户输入的信息进行比较来检查用户是否存在。- 如果用户确实存在
- 跳过一些进一步的注册步骤
- 使用我们的 API 以及
deviceID
和用户数据,通过 Graph 执行静默配置文件更新。
- 如果用户不存在(用户在安装应用程序后第一次完成注册)
- 继续正常的注册流程
- 如果用户确实存在
这似乎可以使用 自定义策略 并使用包含 deviceId
并在入站 id_token_hint
中发送的 id_token_hint
来实现=19=] 从我们的API到B2C。在政策中,我们将 向用户旅程添加一个额外的编排步骤,以提取 deviceId
并 传递它 以供使用在验证编排步骤。
但是,这似乎太复杂了,到目前为止我们没有成功完成这项工作。因此,我们想请教一下征求您对此事的建议。
是否有涵盖这种情况的开箱即用的解决方案?
支持'temporary application users'概念的一些功能。
如果不是,完成这项工作所需的正确步骤大纲是什么?
您可以使用两个流程构建它。我假设 deviceId 是根据浏览器和其他信号在客户端生成的。
访客用户流量
比方说,此流程将允许用户“以访客身份结账”。当用户单击此按钮时,启动 来宾用户 B2C 策略。
- 您的应用应使用客户端生成设备 ID javascript
- 您的应用应将此数据作为查询参数发送到 Azure AD B2C 来宾用户 B2C 策略。
- 来宾用户 B2C 策略应该解析 deviceId 查询参数
- 访客用户 B2C 策略应该使用 claimsTransform 编写一个包含随机生成的电子邮件的帐户,并将 deviceId 写入 signInNames.deviceId 属性。这允许通过 deviceId 查找帐户
- 来宾用户 B2C 策略随后应为此用户帐户颁发令牌,并且还应将 deviceId 作为声明嵌入令牌中。
- 您的应用可能会使用 deviceId 设置持久性 cookie。这允许即使用户关闭浏览器或注销设备也能被识别。可选。
访客转化流量
稍后,用户虽然仍处于登录状态,但希望完成其帐户的设置。创建一个新的 B2C 策略,这次我们会将 deviceId 传递到查询参数中,如果应用程序有一个可用的(在令牌或应用程序 cookie 中)。
- 您的应用程序应检查令牌是否包含来宾用户和 deviceId。如果不是,请检查 cookie 是否与 deviceId 一起出现。
- 您的应用应向 AAD B2C 发出身份验证请求,并在查询参数中包含 deviceId
- B2C 策略应解析 deviceId 查询参数
- B2C 政策应通过 signInNames.deviceId 在目录中进行查找,并从查询参数 解析设备 ID
- 如果找到用户,则针对此objectId进行进一步操作
- 如果找不到用户,请执行正常的注册步骤
如果您愿意,以上所有内容都可以转换为使用 id_token_hint
,这意味着没有人可以弄乱发送到 AAD B2C 的 deviceId,因为它将成为一个有符号值。
您还需要考虑 deviceId 冲突。如果这是可能的,那么这将成为一个安全问题,因为两个不同的人可能会链接到同一个帐户。