Как считывать параметр запроса в URL-адресе входа Azure B2C перед аутентификацией?

Вопрос или проблема

Я пытаюсь считать параметр запроса (appName) из URL входа в систему Azure B2C до аутентификации. У меня есть два приложения, использующих единый вход (SSO) с общими сессиями, и я хочу отобразить имя приложения на странице входа.

Я пытался добавить параметр с помощью OpenIdConnectEvents.OnRedirectToIdentityProvider и считать его с помощью JavaScript, но имя приложения не отображается на странице входа.

using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;

var builder = WebApplication.CreateBuilder(args);

// Добавить службы в контейнер.
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApp(options =>
    {
      builder.Configuration.GetSection("AzureAdB2C").Bind(options);
      options.Events ??= new OpenIdConnectEvents();

      options.Events.OnRedirectToIdentityProvider += context =>
          {
            var appName = "LicensePortal";
            context.ProtocolMessage.SetParameter("appName", appName);

            return Task.CompletedTask;
        };
    });

builder.Services.AddControllersWithViews(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});

builder.Services.AddRazorPages()
    .AddMicrosoftIdentityUI();

var app = builder.Build();

// Настроить конвейер HTTP-запросов.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.MapRazorPages();

app.Run();

Ответ или решение

Чтобы успешно считывать параметры запроса, такие как appName, из URL-адреса браузера при использовании аутентификации Azure B2C, вам необходимо ознакомиться с некоторыми ключевыми аспектами настройки вашего приложения. В этом ответе мы рассмотрим шаги, необходимые для корректного отображения имени приложения на странице входа в систему.

Шаг 1: Настройка параметров OpenID Connect

Вы уже начали эту настройку, добавив обработчик события OnRedirectToIdentityProvider. Это правильный шаг для передачи параметров в URL аутентификации. Важно убедиться, что параметр действительно добавляется к запросу.

options.Events.OnRedirectToIdentityProvider += context =>
{
    var appName = "LicensePortal"; // Название вашего приложения
    context.ProtocolMessage.SetParameter("appName", appName);
    return Task.CompletedTask;
};

Шаг 2: Передача параметра в URL

При использовании context.ProtocolMessage для добавления параметров необходимо удостовериться, что параметр корректно передается в окончательном URL. Azure B2C будет обрабатывать этот URL во время маршрутизации.

Шаг 3: Чтение параметра на стороне клиента

Чтобы получить доступ к переданному параметру на странице входа, вы можете использовать JavaScript в вашем HTML-шаблоне. Примерно так:

<script>
    document.addEventListener('DOMContentLoaded', function() {
        const urlParams = new URLSearchParams(window.location.search);
        const appName = urlParams.get('appName');

        if (appName) {
            document.getElementById('app-name-display').innerText = appName;
        }
    });
</script>
<div id="app-name-display"></div>

Шаг 4: Настройка страницы входа в Azure B2C

Если вы используете пользовательские страницы для входа в Azure B2C, вам важно убедиться, что JavaScript код выше включен на странице входа. Это необходимо, чтобы успешно отобразить переданное имя приложения.

Шаг 5: Проверьте настройки CORS и CSP

В некоторых случаях браузер может блокировать выполнение скриптов из-за настроек политики безопасности контента (CSP) или политик межсайтового ресурса (CORS). Проверьте, чтобы ваш Azure B2C разрешал выполнение необходимых скриптов.

Итог

Обобщая вышесказанное, для корректного отображения параметра appName на странице входа, вы должны убедиться, что:

  1. Параметр корректно передается через OpenIdConnectEvents.OnRedirectToIdentityProvider.
  2. JavaScript код для чтения параметра выполняется на странице входа.
  3. При необходимости, настроены соответствующие политики безопасности.

Соблюдая все эти шаги, вы сможете успешно отображать имя вашего приложения на странице входа в Azure B2C, улучшая пользовательский опыт и производительность вашего приложения.

Оцените материал
Добавить комментарий

Капча загружается...