使用B2C自定义策略调用Azure功能时如何发送电子邮件?

时间:2020-10-16 05:11:00

标签: azure-functions azure-ad-b2c

创建用户或登录时,将调用一个函数。然后,该功能将触发 Logic App 。逻辑应用需要向新添加的用户发送电子邮件。

这里是捕获来自B2C的输入的模型。

public class InputClaimsDto
{
    public string oid { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string email { get; set; }
}

电子邮件外,所有字段均已填充。

这是完整的技术资料

<!-- Custom Restful service -->
    <TechnicalProfile Id="REST-API-SignUp">
      <InputClaims>            
        <InputClaim ClaimTypeReferenceId="objectid" PartnerClaimType="oid" />
        <InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
        <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />

        <!--I'm trying to return the email-->
        <InputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="email" />

      </InputClaims>
      <OutputClaims>
         //...
      </OutputClaims>
    </TechnicalProfile>

要退回电子邮件,我尝试使用emailsignInNames.emailAddressotherMails,但是它不起作用。

如何返回电子邮件或其他任何数据。

感谢您的帮助。

编辑

在TrustFrameworkBse.xml中,电子邮件被定义为Email address that can be used to contact you.

<ClaimType Id="email">
    <DisplayName>Email Address</DisplayName>
    <DataType>string</DataType>
    <DefaultPartnerClaimTypes>
      <Protocol Name="OpenIdConnect" PartnerClaimType="email" />
    </DefaultPartnerClaimTypes>
    <UserHelpText>Email address that can be used to contact you.</UserHelpText>
    <UserInputType>TextBox</UserInputType>
    <Restriction>
      <Pattern RegularExpression="^[a-zA-Z0-9.!#$%&amp;'^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" HelpText="Please enter a valid email address." />
    </Restriction>
  </ClaimType>

1 个答案:

答案 0 :(得分:1)

这里缺少的链接是,在到达您的REST API调用之前,我们不知道email是否是填充的声明。代码片段不足以说明问题。

在登录时引用AAD B2C入门包,该电子邮件包含在名为signInName的声明中。在“注册”时,电子邮件被捕获到名为email的声明中。

要标准化此情况,请在AAD-UserReadUsingObjectId步骤之后调用您的REST API技术资料。在AAD-UserReadUsingObjectId中,添加输出声明,如下所示:

<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />

这意味着无论登录还是注册,我们都会读取目录属性signInNames.emailAddress,并将其值插入到名为email的声明中。

现在,当您调用REST API时,email将始终具有一个值。您的REST API应该使用以下内容:

<InputClaim ClaimTypeReferenceId="email"/>