#azure #asp.net-core #.net-core #azure-ad-b2c
#azure #asp.net-ядро #.net-ядро #azure-ad-b2c #asp.net-core
Вопрос:
Я использую AzureADB2C.Пользовательский интерфейс в веб-приложении .NET Core, но я не уверен, как я могу перенаправить пользователя на пользовательскую страницу ej /Customers/Index
после того, как он войдет в систему.
Это в основном то, что у меня было ранее при использовании SessionController
, но у меня больше нет контроллера, поскольку я использую AzureADB2C.UI.
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items[AzureAdB2COptions.PolicyAuthenticationProperty] = AzureAdB2COptions.SignUpPolicy;
return Challenge(properties, OpenIdConnectDefaults.AuthenticationScheme);
Это то, что у меня есть на startup.cs
services.AddAuthentication(o => o.DefaultAuthenticateScheme = AzureADB2CDefaults.CookieScheme)
.AddAzureADB2C(options => Configuration.Bind("AzureADB2C", options))
.OnLogin(principal =>
{
services.BuildServiceProvider().GetRequiredService<LoginCommand>()
.Execute(principal, principal.AzureID(), principal.Email(), principal.DisplayName());
});
appsettings.json:
"AzureADB2C": {
"Instance": "https://login.microsoftonline.com/tfp/",
"ClientId": "............", // prod
"CallbackPath": "/signin-oidc",
"Domain": "something.onmicrosoft.com",
"SignUpSignInPolicyId": "B2C_1_SiUpOrIn",
"ResetPasswordPolicyId": "B2C_1_SSPR",
"EditProfilePolicyId": "B2C_1_SiPe"
}
Кто-нибудь знает, как перенаправить пользователя после того, как он войдет в систему, используя AzureADB2C.UI?
Комментарии:
1. Вы пытались задать путь обратного вызова к странице, которую хотите отобразить после входа в систему? Вам также необходимо сделать то же самое в настройках приложения ADB2C
2. Как я вижу, вашего пути обратного вызова там нет /customer/index
3. Та же проблема. Есть какой-нибудь способ справиться с этим? Я пробую это с проектом Razor pages и не вижу никаких четких инструкций о том, как работать с этим или с «областью» учетной записи, которую он настраивает
Ответ №1:
Проверьте источник по адресу:https://github.com/dotnet/aspnetcore/blob/master/src/Azure/AzureAD/Authentication .AzureADB2C.UI/src/Areas/AzureADB2C/Controllers/AccountController.cs
Их реализация по умолчанию
[HttpGet("{scheme?}")]
public IActionResult SignIn([FromRoute] string scheme)
{
scheme = scheme ?? AzureADB2CDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
return Challenge(
new AuthenticationProperties { RedirectUri = redirectUrl },
scheme);
}
Вы можете видеть, как они жестко кодируют URL перенаправления в корень вашего сайта. Реализуйте свой собственный метод контроллера, который принимает путь перенаправления, и используйте свой новый контроллер поверх встроенного контроллера.
Наивная реализация, поддерживающая переданное перенаправление
[HttpGet("login")]
public IActionResult Login([FromQuery] string dest)
{
var scheme = "AzureADB2C";
var redirectUrl = string.IsNullOrWhiteSpace(dest) ? Url.Content("~/") : Url.Content("~" dest);
return Challenge(
new AuthenticationProperties { RedirectUri = redirectUrl },
scheme);
}
Ответ №2:
Путь обратного вызова должен совпадать с путем обратного вызова, указанным в настройках приложения AD, на который попадает ваш пользователь после входа в систему.
Теперь я никогда не пытался использовать относительные пути, как в вашем случае / customer / index. Я всегда использовал полный путь, как объяснялось ранее, и это работало.
Комментарии:
1. Спасибо за помощь, но это не сработало. Я установил путь обратного вызова в Azure и в моем приложении — Сначала я попытался установить полный путь для обоих, но я получил следующую ошибку: i.ibb.co/tx7BFmH/123123.png — Затем я попытался установить полный путь в Azure и относительный путь / CreditApplication / Index в appsettings.json, аутентификация сработала, но она не перенаправила — она отправилась прямо на home, он же localhost: 44312 .
2. Свойство экземпляра, пожалуйста, попробуйте установить: TenantName.b2clogin.com вместо login.microsoft, поскольку это будет устаревшим: blogs.msdn.microsoft.com/azureadb2c/2018/10/05 /…
3. Кстати, также, пожалуйста, проверьте это исключение, которое у вас есть на скриншоте. Это исключение относится к другой проблеме и не связано с b2c в соответствии со stackoverflow.
4. Исключение происходит только тогда, когда я переключаю обратный путь из /CreditApplication / Index в localhost:44312/CreditApplication /Index — Есть идеи? Не могли бы вы, возможно, поделиться своим appsettings.json?
5. У меня нет кода, поскольку он принадлежит клиенту, но я помню, что использовал это репозиторий в качестве ссылки, поэтому, пожалуйста, взгляните на этот пример: github.com/Azure-Samples/active-directory-b2c-dotnetcore-webapp И экземпляр не был login.microsoft, это был tenant.b2clogin.com/tfp