#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-адреса службы приложений все работает без проблем / может выполнять аутентификацию.
Проблема: проблема возникает, когда я предоставляю внутренний пул для указания на службу приложений, которую я только что создал. Шаги, которые я выполнил, следующие:
- В шлюзе приложений нажмите «внутренние пулы», чтобы создать новый с «целевым типом» как «служба приложений» и «целевой» как служба приложений, которую я создал.
- В блейде шлюза приложений нажал на «Правила», обновил одно из существующих правил «на основе путей» (мы настроили прослушиватель с определенным URL-адресом https://ourdomain.com ) чтобы включить правило, основанное на пути, для серверного пула (того, который я создал).
- Затем я снова обновил регистрацию приложения 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. В этой статье более подробно объясняется проблема и предоставляется ссылка на решение. Кроме того, это также ссылка . В конечном итоге мне пришлось перейти по ссылке на эту статью. Еще раз благодарю вас за всю вашу помощь и за то, что вы нашли время ответить мне.