如何通知Azure AD B2C新用户注册或登录到使用Azure函数HTTP触发器注册的应用程序?

yuvru6vn  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(106)

系统应该实现一个生产者,当新客户注册或登录时,该生产者向代理发送消息。该消息应包含有关客户旅程的相关信息(例如,他们访问了哪个登陆页面,他们是否注册或登录,等等)。为此,我需要实现Azure Function HTTP触发器,其中我需要通知新的Azure AD B2C用户注册或登录到注册的应用程序(登录页)。
在这里,我添加了我的函数URL到注册的应用程序,但我不确定这应该如何工作,目的是当用户登录在这个登陆页面,例如,接收像我之前解释的一些关于用户的数据在我的azure函数中的事件,创建我将发送的消息(这一部分涵盖)

我已经做了一个Azure功能的一般实现,主要情况是如何获取有关用户登录或注册的数据,之后我可以管理与下一个实现和如何访问数据,现在我不能从注册的应用程序(登录页)获得任何东西。我在本地运行这个登陆页面,所以我可以自己登录尝试,如果我得到一些数据,但仍然没有来。下面是Azure函数的实现:

public class MessageBrokerProducerFunction
{
    private readonly IPublishEndpoint _publishEndpoint;

    public MessageBrokerProducerFunction(IPublishEndpoint publishEndpoint)
    {
        _publishEndpoint = publishEndpoint;
    }

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

        var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);

        //Access token
        //string accessToken = data.access_token;

        var responseMessage = string.IsNullOrEmpty(data)
            ? "This HTTP triggered function executed with empty response."
            : $"This is the data from the request: {data}. This HTTP triggered function executed successfully.";

        //Set the message according to the data from request
        var message = new MessageCustomer(Guid.NewGuid(), data, data, data, data);

        return new OkObjectResult(responseMessage);
    }

    private async Task PublishMessageToServiceBus(object message, ILogger logger, string sessionId)
    {
        try
        {
            await _publishEndpoint.Publish(message, context => context.SetSessionId(sessionId));
            logger.LogInformation($"Message successfully published: {message}");
        }
        catch (Exception ex)
        {
            logger.LogError(ex, "Error occurred while publishing message to the Service Bus. Retrying after a delay.");
            await Task.Delay(TimeSpan.FromSeconds(10));
            await PublishMessageToServiceBus(message, logger, sessionId);
        }
    }
}

字符串

ldfqzlk8

ldfqzlk81#

您可以在注册或登录期间use Custom Policies to call a REST API,这可能是HTTP触发的Azure函数。
您还可以考虑通过在令牌发出之前挂钩到流中来使用API连接器,但请注意,这当前处于预览状态。

相关问题