Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Azure ad b2c custom connector "ShowBlockPage" response is not working

Tags:

azure-ad-b2c

I am following the documentation here to return the blocking response https://learn.microsoft.com/en-us/azure/active-directory-b2c/add-api-connector?pivots=b2c-user-flow#example-of-a-blocking-response from api connector to azure ad b2c, however even after constructing the right response as shown in the documentation, I am still not able to show the blocking page for b2c user flow.

Note that this connector gets invoked at sign-in.

I have verified that the response from api which seems correct and looks like below

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "You must have a local account registered for Contoso."
}

With this, was hoping to see a blocking page as below (screenshot from docs) but b2c does not show it and goes straight to the connected application.

enter image description here

What did I miss? any pointers would be appreciated. TIA.
Here is my api connector's code

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    // Get the request body
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    
    // If input data is null, show block page
    if (data == null)
    {
        return (ActionResult)new OkObjectResult(new ResponseContent("ShowBlockPage", "There was a problem with your request."));
    }

    // Print out the request body
    log.LogInformation("Request body: " + requestBody);
    
    // check for issuer
    if(data.identities != null)
    {
        string issuer = data.identities[0].issuer;
        log.LogInformation("issuer detected: " + issuer);
        if(issuer == "github.com")
        {
            log.LogInformation("Returning an error!");
            //return (ActionResult)new BadRequestObjectResult(new ResponseContent("ValidationError", "Please provide a Display Name with at least five characters."));
            return (ActionResult)new OkObjectResult(new ResponseContent("ShowBlockPage", "You must have a local account registered for Contoso."));
        }
    }

    // Validation passed successfully, return `Allow` response.
    return (ActionResult)new OkObjectResult(new ResponseContent() 
    { 
        jobTitle = "This value return by the API Connector"//,
        // You can also return custom claims using extension properties.
        //extension_CustomClaim = "my custom claim response"
    });
}

and here is the ResponseContent class

public class ResponseContent
{
    public const string ApiVersion = "1.0.0";

    public ResponseContent()
    {
        this.version = ResponseContent.ApiVersion;
        this.action = "Continue";
    }

    public ResponseContent(string action, string userMessage)
    {
        this.version = ResponseContent.ApiVersion;
        this.action = action;
        this.userMessage = userMessage;
        if (action == "ValidationError")
        {
            this.status = "400";
        }
    }

    public string version { get; }
    public string action { get; set; }


    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string userMessage { get; set; }


    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string status { get; set; }


    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string jobTitle { get; set; }

}
like image 483
Bhushan Avatar asked Oct 23 '25 17:10

Bhushan


1 Answers

We ended up creating Microsoft support ticket for this and got response that this is by design. ShowBlockPage response works only with sign-up user flows and not with sign-in user flows.

like image 103
Bhushan Avatar answered Oct 27 '25 01:10

Bhushan