Azure ad b2c Azure AD B2C-查找值回退值

Azure ad b2c Azure AD B2C-查找值回退值,azure-ad-b2c,azure-ad-b2c-custom-policy,Azure Ad B2c,Azure Ad B2c Custom Policy,我目前正在修改人力资源开发政策,以满足我们的需要。我有一个声明“domainParameter”,其中包含用户登录的电子邮件域部分。我正在使用LookupValue的转换来映射不同的域。我们有多个组将使用我们的策略,其中一些组的用户可以注册多个域。因此,我们的查找显示如下内容: <ClaimTransformation Id="GroupLookup" TransformationMethod="LookupValue"> <In

我目前正在修改人力资源开发政策,以满足我们的需要。我有一个声明“domainParameter”,其中包含用户登录的电子邮件域部分。我正在使用LookupValue的转换来映射不同的域。我们有多个组将使用我们的策略,其中一些组的用户可以注册多个域。因此,我们的查找显示如下内容:

<ClaimTransformation Id="GroupLookup" TransformationMethod="LookupValue">
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="domainParameter" TransformationClaimType="inputParameterId" />
    </InputClaims>
    <InputParameters>
        <InputParameter Id="company1.domain1" DataType="string" Value="company1" />
        <InputParameter Id="company1.domain2" DataType="string" Value="company1" />
        <InputParameter Id="company2.domain1" DataType="string" Value="company2" />
        <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="false" />
    </InputParameters>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="domainGroup" TransformationClaimType="outputClaim" />
    </OutputClaims>
</ClaimsTransformation>

当域是列出的域之一时,这显然非常有效,但是我们也希望允许本地帐户注册/登录,并将它们分组到名为“local”的组中,尽管名称并不重要。从我所能找到的情况来看,我无法找到任何方法将声明分配给特定的值,如果它未能通过查找。我可以通过更改该参数使其在查找时出错,但让它指定一个值,我认为没有办法这样做。我在“domainGroup”上尝试了作为InputClaim和OutputClaim的DefaultValue属性,但都不起作用。我在LookupValue中也没有看到通配符选择器的选项


有人知道怎么做吗?我已经浏览了几天文档,还没有找到任何有价值的东西。

当查找失败时,您的声明转换的输出为空。否不能直接设置为其他内容,但可以间接设置为:

我在示例中解释了当claimstrasform的输出为null时,我们如何进行布尔比较,并且isKnownCustomer的最终值为FALSE。将用户发送到本地帐户登录页面

这里定义了转换的功能

该示例详细解释了我如何让它执行您要求的逻辑。“如果查找失败,我们还希望允许本地帐户注册/登录…”

“用户旅程的第一步是显示一个页面来收集用户的电子邮件地址。该页面使用输入验证来提供有效的电子邮件

旅程的下一步是运行多个输出声明转换,以检查域是否已知

首先,一个名为
ParseDomain
的输出声明转换提取所提供电子邮件地址的电子邮件域名,并将其复制到
domainParameter
声明中

使用
DomainLookup
输出声明转换,根据已知域名列表查找
domainParameter
。如果域名匹配,
DomainLookup
将输出声明
knownDomain
=
True
,否则将为
null

要返回域是否已知的最终
True
False
值,调用
CheckDomainParameterValue
输出声明转换,将
knownDomain
dummyTrue
进行比较(其中包含一个真值)。最后,我们获得一个声明
isKnownCustomer
,该声明为
True
False
。这可以防止在
knownDomain
的情况下出现空值


第3步和第4步处理未知域的情况,并模仿通过本地帐户登录的步骤。”

我想你误解了我的意思。当人们进入一个找不到的域时,他们已经被正确地发送到本地注册页面。人力资源部本身运作良好。我们正在向令牌中添加一个名为“组”的附加声明。由于我们有多个合作伙伴,这些合作伙伴的帐户在我们的应用程序上需要不同的权限,与来自更广泛世界的注册用户相比。我们需要填充声明“domainGroup”,因为我们随后将声明的值添加到字符串列表中,类似于将域添加到提供者列表中的方式。在我看来,在查找失败时分配值的能力应该是任何此类系统的基本要求。忽略HRD方面,因为这已经在起作用了。我们需要的是说“如果索赔与这些项目匹配,则将索赔的值设置为这些值,否则将其设置为该值”。如果您像大多数编程语言一样考虑它,那么我们需要的类似于带有default子句的switch语句。如果类似的内容在策略中不可用,对我来说,这是功能上的严重失误。为什么不使用电子邮件中的默认值在本地帐户身份验证点初始化
域组
<代码>。此技术配置文件仅在domainGroup为null时执行。我曾考虑过这一点,很可能我最终会这样做,但如果我这样做,我需要移动通过AddItemToStringCollection转换将组添加到列表中的转换,直到之后在提供的帐户和本地帐户上运行的某个步骤。这就是我现在想要弄明白的。好吧,我最后只是在用户旅程中添加了一个新的编排步骤。将任何OutputClaimsTransformation放在电子邮件中的自断言LocalAccountsing上会导致内部服务器错误,因此我必须将其添加到单独的编排步骤中。