Azure B2C с шлюзом приложений Azure и внутренними пулами на основе путей

#azure #asp.net-core #azure-ad-b2c #azure-application-gateway

#azure #asp.net-ядро #azure-ad-b2c #azure-application-gateway

Вопрос:

Я не могу понять, как настроить аутентификацию Azure AD B2C в приложении .Net Core 3.1 MVC, которое было настроено за шлюзом приложений Azure с использованием внутреннего пула и сопоставления URL-адресов на основе пути.

У меня есть приложение .Net Core MVC (3.1), которое использует пакет Nuget (Microsoft.AspNetCore.Аутентификация.AzureADB2C.Пользовательский интерфейс — v3.1.5).

Файл appsettings.json содержит:

 "AzureAdB2C": {
    "Instance": "...://foo.com/tfp/",
    "ClientId": "guid",
    "CallbackPath": "/Home/Index",
    "Domain": "foo.onmicrosoft.com",
    "SignUpSignInPolicyId": "do",
    "ResetPasswordPolicyId": "re",
    "EditProfilePolicyId": "mi"
  }
 

startup.cs (в методе ConfigureServices) имеет:

 services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme).AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
 

Регистрация приложения Azure:
Я создал регистрацию приложения с перенаправлением URI:

 https://localhost:5555/Home/Index
 

При локальной работе с приложением все работает без проблем / может выполнять аутентификацию.

Я развернул приложение в службе приложений Azure. После этого я снова обновил регистрацию приложения, на этот раз включив URI (предоставленный по умолчанию) службы приложений:

 https://myapp.azurewebsites.net/Home/Index
 

При работе с приложением с использованием URL-адреса службы приложений все работает без проблем / может выполнять аутентификацию.

Проблема: проблема возникает, когда я предоставляю внутренний пул для указания на службу приложений, которую я только что создал. Шаги, которые я выполнил, следующие:

  1. В шлюзе приложений нажмите «внутренние пулы», чтобы создать новый с «целевым типом» как «служба приложений» и «целевой» как служба приложений, которую я создал.
  2. В блейде шлюза приложений нажал на «Правила», обновил одно из существующих правил «на основе путей» (мы настроили прослушиватель с определенным URL-адресом https://ourdomain.com ) чтобы включить правило, основанное на пути, для серверного пула (того, который я создал).
  3. Затем я снова обновил регистрацию приложения Azure, на этот раз включив URL-адрес на основе пути к внутреннему пулу ourdomain.com/myapp/Home/Index

При просмотре https://ourdomain.com/myapp , путь разрешается, и все работает нормально; однако аутентификация нарушена и не работает.

После проверки я заметил, что при входе в систему с использованием URL-адреса службы приложений по умолчанию вызов:

 ....://foo.com/foo.onmicrosoft.com/b2c_1a_signup_signin_loa0/oauth2/v2.0/authorize?client_id=guidamp;redirect_uri=https://myapp.azurewebsites.net/Home/Indexamp;response_type=id_tokenamp;scope=openid profileamp;response_mode=form_post....
 

Параметр «Перенаправить URI» устанавливается как myapp.azurewebsites.net

Однако, когда я «вхожу в систему», используя путь к внутреннему пулу (ourdomain.com/myapp ), используется тот же самый URI перенаправления?

Конечно, URI перенаправления должен был указывать путь к пулу серверной части ourdomain.com/myapp

Почему URI перенаправления (при регистрации приложения) не работает для пути на основе пула на основе сервера, несмотря на добавление? Есть ли что-то еще, что мне нужно настроить (в Azure / Code). Не могли бы вы указать мне правильное направление.

Заранее благодарю вас.

Ответ №1:

Сначала пояснение — список URI перенаправления при регистрации приложения — это список URI, которые вы разрешаете использовать при регистрации этого приложения. Они будут работать нормально, когда поток пользователей (в вашем случае — b2c_1a_signup_signin_loa0) будет открыт с использованием любого значения из этого списка для параметра redirect_uri.

Теперь предложение, которое вы могли бы попробовать, только, пожалуйста, имейте в виду, что я никогда не использовал имеющуюся у вас комбинацию, поэтому у меня нет опыта 1: 1. Тем не менее, я предполагаю, что ваше приложение все еще «думает», что это myapp.azurewebsites.net (независимо от того, используете ли вы ourdomain.com ) потому что именно так он попадает под удар Azure Application Gateway. Перенаправление URI в этом случае обрабатывается промежуточным программным обеспечением, и вы можете изменить путь только с помощью опции CallbackPath. Что вы можете сделать, так это настроить App Gateway для доступа к вашей серверной части с использованием определенного заголовка узла. Таким образом, надлежащий хост будет распространяться от шлюза приложений до вашего серверной части и, надеюсь, также до redirect_uri.

Вот ссылка на документы: https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-web-app-overview#override-host-header-in-the-request

Комментарии:

1. Благодарю вас за ваш ответ и приношу извинения за задержку с ответом. Вы правы, именно «обратный путь» определял URI перенаправления в запросе. Я пытался обновить ‘CallbackPath’ в appsettings.json до (ourdomain.com/app ) но, к сожалению, это тоже не сработало. Предложенная вами статья; в частности, ваше предложение о том, чтобы как-то использовать «конкретный заголовок хоста», привело меня к этой ссылке . В конечном итоге мне пришлось добавить правила перезаписи (в App Gateway), чтобы все это работало. Спасибо.

2. В этой статье более подробно объясняется проблема и предоставляется ссылка на решение. Кроме того, это также ссылка . В конечном итоге мне пришлось перейти по ссылке на эту статью. Еще раз благодарю вас за всю вашу помощь и за то, что вы нашли время ответить мне.