无法通过天蓝色函数填充自定义天蓝色B2C属性

时间:2020-01-02 02:13:50

标签: azure azure-active-directory

我一直在尝试创建一个自定义策略,该策略在登录时会调用azure函数,然后填充一个自定义属性。

我一直在遵循本指南https://daniel-krzyczkowski.github.io/Azure-AD-B2C-Series-External-Service-Call/

这是我的trustframeworkextension.xml

  <ClaimsProvider>
  <DisplayName>Azure-Functions-Get-External-System-Id-On-Registration</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Azure-Functions-Get-External-System-Id-On-Registration">
      <DisplayName>Get external system ID for the user on registration</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">
        https://azureb2ccreatecrmcontact.azurewebsites.net/api/CreateCrmContact?code=app-function-code
        </Item>
        <Item Key="AuthenticationType">None</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AllowInsecureAuthInProduction">true</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
        <InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
        <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" />
      </InputClaims>
     <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="extension_external_system_id" PartnerClaimType="external_system_id" />
      </OutputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
    </TechnicalProfile>
    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
      <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="Azure-Functions-Get-External-System-Id-On-Registration" />
      </ValidationTechnicalProfiles>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

这是我函数的返回值。我可以通过监视器确认它在注册过程中被触发,但是没有填充自定义属性。 这是我的功能根据监视器日志返回的内容

 {"extension_external_system_id":"c87f6324-012d-ea11-a810-000d3a7940d5"}

我只能在我的jwt响应令牌中看到填充的默认值

"extension_external_system_id": "external_system_id_1234"

任何朝正确方向的推动都是一种祝福。谢谢。

我的功能代码

public static class Function1
{
    [FunctionName("CreateCrmContact")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        var email = data?.email;
        var firstName = data?.given_name;
        var lastName = data?.family_name;
        Guid contactId = new Guid();
        if (email == null || email == String.Empty)
        {
            new BadRequestObjectResult("Please pass user email in the request body");
        }
        log.LogInformation($"Email : {email}");
        log.LogInformation($"Firstname : {firstName}");
        log.LogInformation($"Surname : {lastName}");
        using (var client = new HttpClient())
        {
            var dict = new Dictionary<string, string>();
            dict.Add("FirstName", (string)firstName);
            dict.Add("LastName", (string)lastName);
            dict.Add("Email", (string)email);
            var formEncoded = new FormUrlEncodedContent(dict);

            var response = await client.PostAsync(String.Format("apiuri"), formEncoded);
            var result = await response.Content.ReadAsStringAsync();
            var deserializedResponse = JsonConvert.DeserializeObject<APIResponse<MemberCreateResponse>>(result);
            log.LogInformation($"Contact created with id: {deserializedResponse.ResponseData.ContactId}");
            contactId = deserializedResponse.ResponseData.ContactId;
        }
        var sysInfo = new ExternalSystemInfo
        {
            external_system_id = contactId.ToString()
        };
        var serializedObj = JsonConvert.SerializeObject(sysInfo);
        log.LogInformation($"GetExternalSystemIdOnRegistration got external system id for user: {serializedObj}");
        return new OkObjectResult(sysInfo);
    }
}
class ExternalSystemInfo
{
    [JsonProperty("external_system_id")]
    public string external_system_id { get; set; }
}

0 个答案:

没有答案