AzureADB2C.Пользовательский интерфейс — перенаправлять пользователя на страницу после входа

#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