Перенаправление Blazor обратно на локальный URL с внешнего URL

#c# #asp.net #blazor

#c# #asp.net #blazor

Вопрос:

У меня есть приложение Blazor, в котором пользователь должен выполнить вход на внешней странице входа (в интрасети), и после входа в систему я хочу перенаправить обратно на главную страницу приложений (панель мониторинга). Итак, что я хочу, в основном, пользователь открывает приложение и нажимает кнопку входа в систему, затем приложение переходит на внешнюю страницу входа, пользователь вводит свое имя пользователя и пароль, после того, как пользователь вошел в систему, панель мониторинга (главная) из моего приложения загружается и отображается.

Итак, у меня есть кнопка входа, и когда пользователь нажимает на нее, он будет перенаправлен на «login.razor». В «login.razor» у меня есть следующий код:

 @page "/login"
@inject NavigationManager NavManager

@code {
    protected override async Task OnInitializedAsync()
    {
        string homeUrl = "/";

        //First attempt:
        // This doesn't work
        //NavManager.NavigateTo($"http://external.login.page?redirectUrl={homeUrl}", forceLoad: true);

        // Second attempt: (doesn't work either)
        // Navigate to external login
        NavManager.NavigateTo($"http://external.login.page", forceLoad: true);

        // Navigate to Home of blazor app (this is suppose to be executed after the user has submitted the above login form)
        NavManager.NavigateTo($"{homeUrl}", forceLoad: true);
    }
}
  

Первая попытка не работает, поскольку ответ сервера является ошибкой.
Вторая попытка не работает, поскольку приложение почти мгновенно перенаправляется на «home» после загрузки страницы входа в систему.

У кого-нибудь есть идея, как это решить?

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

1. Ваша концепция внешнего входа в систему неверна, когда вы переходите к внешнему входу, внешний вход должен возвращать пользователя на ваш сайт blazor. Вам не нужно вызывать homeUrl сразу после внешнего входа в систему, это никогда не сработает таким образом, поэтому вы видите, что homeUrl пользователь сразу переходит на страницу входа.

2. После внешнего входа сервер автоматически перенаправляет на свой собственный домашний адрес… но я не хочу отображать его home. Логин не возвращает пользователя. После входа в систему я могу получить userinfo вручную. Все, что я хочу, это просто позволить пользователю ввести регистрационную информацию во внешней форме входа. После этого я бы извлек данные пользователя вручную с сервера. Основываясь на этом ответе, я могу определить, что это за пользователь и был ли вход в систему успешным. Единственная проблема заключается в том, что логин перенаправляется на домашний сервер, а не на домашнюю страницу моей страницы blazor.

3. Получили ли вы ответ на этот вопрос через два года? для меня это работает только в первый раз, и я думаю, что это проблема с кэшированием

Ответ №1:

Я понимаю вашу точку зрения, это что-то вроде Azure Active Directory или входа в систему с любым внешним провайдером, в основном процесс перенаправления на панель мониторинга или нужную вам страницу должен происходить на уровне страницы входа не из вашего приложения, я имею в виду, что страница входа в другое приложение должна получать параметр, вызываемый, например, redirect_uri, поэтому код будет выглядеть следующим образом

 // Navigate to external login
NavManager.NavigateTo($"http://external.login.page?redirect_url={home_uri}", forceLoad: true);
  

И на уровне приложения для входа в систему, если попытка входа в систему проходит успешно, тогда получите значение этого параметра и перенаправьте пользователя на него.

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

1. Я тоже так думал, но я получаю ошибку 405.

2. 405? Облако, вы объясняете, когда получаете эту ошибку? При отправке формы входа?

3. Да, когда я отправляю форму входа.

4. Итак, в этом случае это может быть из-за глагола, обязательно укажите тип действия, например, украсить действие входа с помощью [HttpPost]

5. Где я должен его украсить? Не могли бы вы отредактировать свой пример выше, чтобы я понял, что вы имеете в виду?