Azure B2C 将额外的用户数据存储在自定义声明或数据库中并在登录时强制执行是否更好?

问题描述 投票:0回答:1

我想创建一组使用 Auzre B2C 作为 SSO 的应用程序。 应用程序应允许用户登录,如果某些预期数据丢失,用户将能够输入丢失的数据。 在完美的情况下,该解决方案应该适用于任何登录系统,以便我稍后能够切换到另一个登录系统(可能是自托管)。

这些应用程序共享大部分用户数据,但每个应用程序也有特定的数据。

我的应用程序的声明示例是

App A: given name, sure name, email, display name
App B: given name, sure name, email, display name, billing address
App C: given name, sure name, email, display name, t-shirt size
App D: given name, sure name, email, display name, billing address, t-shirt size

我的第一个想法是将用户数据存储在 SSO 解决方案中,并在成功登录后返回声明中的数据。

虽然一般来说,在 Azure B2C 管理页面上设置完所有内容后,添加自定义声明并将其存储在 AD 中就可以正常工作,但我遇到了一些缺点。 我为每个应用程序创建了一个默认的登录用户流程,并设置了需要收集并作为声明返回的属性。

  1. 自定义声明(即使设置为非可选)仅在注册时强制执行。即使缺少非可选声明,每个用户都可以使用用户流程登录。我本以为会出现登录错误或重定向到个人资料页面以添加丢失的数据之类的情况。这可能吗?
  2. 以这种方式添加自定义声明时,我必须使用 azure b2c 管理网页添加自定义声明。应用程序本身是否可以定义自定义声明并将其添加到用户数据中?如果我没记错的话,几年前实现 SAML 应用程序时,我确实在应用程序级别定义了预期声明,但是我在 VS2022 的 Blazor WebAssembly 应用程序模板中找不到类似的内容。

所以我想到了2个解决方案,但我不知道它们是否可行。

  1. 在 AD 中存储日期

    a.自定义声明可以存储并与不同的用户流程共享

    b.如果缺少应用程序的强制声明,用户将被重定向到登录系统的页面,他们可以在其中输入缺少的数据。

    c.一切都由登录系统处理。应用程序仅在成功登录后获取声明(如果声明丢失,则可能会重定向),并且不知道如何收集数据。

  2. 将数据存储在DB中

    a.自定义声明存储在数据库中,并通过 API 连接器添加到令牌中 (https://learn.microsoft.com/en-us/azure/active-directory-b2c/add-api-connector-token-enrichment ?pivots=b2c-用户流)

    b.如果索赔丢失,应用程序将让用户输入丢失的数据。由于此页面位于应用程序内部,因此必须在每个应用程序中实现。

    c.保护数据库内的数据。充其量只有用户自己能够解密数据。我正在考虑生成一个密码,该密码将与应用程序可以用来解密数据的声明一起返回。因此,只要应用程序不泄露密码,即使来自管理员,数据也会保存。

解决方案 2 更有可能发挥作用并且成为通用方法。还存在最终的后备选项,即不在声明内返回这些数据,而是从每个应用程序访问数据库来存储和修改数据,仅依赖声明提供解密所需的密码。至少我找到了一些关于这种方法的信息。

另一方面,解决方案 1 接近我多年前想象的设置,其中用户登录数据存储在 LDAP 数据库中,并且应用程序根据需要添加自定义数据。这样,有关用户的所有信息都存储在一个安全的地方。如果我在这一处删除用户,一切都会消失,可能的信息片段仍然存在。

设置这样的环境的最佳方法是什么?

azure oauth-2.0 single-sign-on azure-ad-b2c claims-based-identity
1个回答
0
投票

执行此操作的方法是使用自定义策略。

登录时,您可以检查可选声明,并向用户旅程添加“个人资料编辑”屏幕以强制输入它们。

在应用程序上。另一方面,您可以通过 Graph API 添加自定义(扩展)属性。

© www.soinside.com 2019 - 2024. All rights reserved.