Использование Open ID Connect с серверной частью Blazor - PullRequest
4 голосов
/ 13 июня 2019

Я бы хотел использовать 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();

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

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

Ответы [ 2 ]

1 голос
/ 14 июня 2019

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

services.AddMvcCore(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});
0 голосов
/ 13 июня 2019

Следующий фрагмент кода демонстрирует, как вы можете аннотировать контроллер данных в вашем веб-API с помощью атрибута Authorize, чтобы перенаправить неаутентифицированного пользователя для входа (возможно, Identity Server).

[Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)] 
[Route("api/[controller]")]
    public class SampleDataController : Controller
    {
    // ..
    }

Примечание: соответствующая конфигурация необходима в классе запуска

Примечание. Если вы используете Сервис вместо Web API, я бы посоветовал вам отказаться от первого и использовать второе.

Примечание: я не знал о директиве @attribute, но почему бы вам не попробовать и не сказать нам, работает ли она для вас ...

@attribute [Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)] 

Я постараюсь добавить больше информации позже, но запустите ваше приложение и задайте вопросы о проблемах, с которыми вы столкнулись ...

Надеюсь, это поможет ...

...