Использование Open ID Connect с серверным Blazor

Я хотел бы использовать Open ID Connect с Identity Server 4 для авторизации в моем серверном приложении Blazor. У меня такая же настройка, работающая в приложении MVC.

В новейшей версии .NET Core 3.0 Preview 6 можно добавить на сайт атрибут ´ @ attribute [Authorize] ´. Но если я не авторизован, меня не перенаправляют на Identity Server для входа в систему, поскольку меня используют мои приложения MVC. Вместо этого на сайте отображается только сообщение «Не авторизован».

В Startup.cs у меня следующая настройка:

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = "Cookies";
            options.DefaultChallengeScheme = "oidc";
        })
        .AddCookie("Cookies")
        .AddOpenIdConnect("oidc", options =>
        {
            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;

            options.ClientId = "myClient";
            options.SaveTokens = true;
        });

а также

        app.UseAuthentication();

Как сообщить приложению, что я хочу, чтобы меня перенаправили на сервер идентификации, если я не вошел в систему?

РЕДАКТИРОВАТЬ: ответ Codevisions работает как обходной путь. Я обнаружил нерешенные проблемы с github здесь и здесь, запланированный для .NET Core 3.0 Preview 7, который, возможно, официально рассмотрит эту проблему.


person Pascal R.    schedule 13.06.2019    source источник


Ответы (1)


Добавьте в ConfigureServices код ниже.

services.AddMvcCore(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});
person codevision    schedule 13.06.2019
comment
Серверная сторона Blazor, также известная как компоненты Razor, не требует контроллеров, потому что клиент и сервер обмениваются данными через SignalR. Для этого мне пришлось бы создать фиктивный контроллер. - person Pascal R.; 14.06.2019
comment
Я согласен. Это кажется неочевидным, но никаких реальных контроллеров не требуется. Мне удалось упростить это, просто добавив AddMvcCore вместо AddcontrollersWithView. Я основываю свой ответ на образце, созданном MS, и он действительно работает. - person codevision; 14.06.2019
comment
Вы правы, в конце концов у меня так получилось. Мне все еще не нравится тот факт, что я должен включать MVC, но я думаю, что это единственный способ, пока они не предоставят официальную версию. Спасибо за помощь! - person Pascal R.; 17.06.2019