ASP.NET Основные страницы Razor, интегрированные с сервером идентификации

#c# #asp.net #identityserver4

#c# #asp.net #identityserver4

Вопрос:

У меня есть проект с ASP.NET Ядро 3.1 и страницы Razor. Приложение чрезвычайно простое: одна страница приветствия для защиты статических файлов. Моя проблема началась, когда я захотел интегрировать свой небольшой веб-сайт с Identity Server 4.

Обычно, в моем другом проекте .NET Core, в Startup.cs я добавлял:

 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages(options => {
            options.Conventions.AuthorizePage("/Login");
        });

        services.Configure<IdentityServerConfiguration>(Configuration.GetSection("IdentityServerConfiguration"));

        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            options.Cookie.Name = ".cello.Session";
            options.IdleTimeout = TimeSpan.FromHours(12);
        });

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = "oidc";
        })
        .AddCookie(options =>
        {
            options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
            options.Cookie.Name = "cello.dashboard";
        })
        .AddOpenIdConnect("oidc", options =>
        {
            IdentityServerConfiguration idsrv = Configuration.GetSection("IdentityServerConfiguration").Get<IdentityServerConfiguration>();
            options.Authority = idsrv.Url;
            options.ClientId = idsrv.ClientId;
            options.ClientSecret = idsrv.ClientSecret;
 

#если
параметры ОТЛАДКИ.RequireHttpsMetadata = false;
#другие
варианты.RequireHttpsMetadata = true;
#конец

             options.ResponseType = "code";

            options.Scope.Clear();
            options.Scope.Add("openid");
            options.Scope.Add("profile");
            options.Scope.Add("email");
            options.Scope.Add("roles");
            options.Scope.Add("offline_access");

            options.ClaimActions.MapJsonKey("role", "role", "role");

            options.GetClaimsFromUserInfoEndpoint = true;
            options.SaveTokens = true;

            options.SignedOutRedirectUri = "/";

            options.TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = JwtClaimTypes.Name,
                RoleClaimType = JwtClaimTypes.Role,
            };
        });
    }
 

Когда я пытаюсь добавить Microsoft.AspNetCore.Authentication.OpenIdConnect , у меня возникает ошибка несовместимости.

введите описание изображения здесь

Я должен использовать версию 3.1.9 этой библиотеки, а не последнюю.

введите описание изображения здесь

Есть мысли?

Ответ №1:

В ноябре 2020 года Microsoft выпустила .NET 5 в качестве следующей версии .NET Core. На проекты, ориентированные на .NET 5, нельзя ссылаться из проектов, ориентированных на .NET Core 3.x.x. Последние версии ASP.NET Основные пакеты уже переключены на net5.0 (включая пакет OpenIdConnect).

Чтобы иметь возможность использовать последнюю версию Microsoft.AspNetCore.Authentication.OpenIdConnect , вам следует перенести свой проект на .NET 5.

Ответ №2:

В вашем случае можно использовать версию 3.1. * этой библиотеки. Майкрософт.AspNetCore.Аутентификация.OpenIdConnect / 3.1.10 является последней версией, совместимой с .NET Core 3.1. Если вы хотите использовать Microsoft.AspNetCore.Аутентификация.OpenIdConnect / 5.0.1 ваше приложение должно быть .NET 5.

Также я не уверен, есть ли какие-либо серьезные изменения в этом пакете для .NET 5, кроме совместимости с .NET 5.