【问题标题】:How to send email when using B2C Custom Policies to call Azure Function?使用 B2C 自定义策略调用 Azure Function 时如何发送电子邮件?
【发布时间】:2021-01-30 15:00:15
【问题描述】:

当一个用户被创建或登录时,一个函数被调用。然后,该函数将触发 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 定义为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>

【问题讨论】:

    标签: azure-functions azure-ad-b2c


    【解决方案1】:

    这里缺少的链接是,我们不知道 email 是否是一个填充声明,当我们到达您的 REST API 调用时。代码 sn -p 不足以说明。

    在登录时引用 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"/>
    

    【讨论】:

    • AAD-UserReadUsingObjectId 仅在 TrustFrameworkBase.xml 中。我的理解是我们不应该碰那个文件。
    • 顺便说一句,我按照你的建议使用&lt;InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="email" /&gt;,它正在工作。
    • 可能在注册时不起作用,因为 signInName 不存在。您可以在扩展中覆盖 AAD-UserReadUsingObjectId,而不是直接在基础文件中更改它。这就是完整的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2020-02-26
    • 2023-03-10
    相关资源
    最近更新 更多