Проблемы OpenIddict

Я только что вернулся к проекту после долгого перерыва (возможно, более года), и после обновления VS2017 до версии 15.7.5 я столкнулся с рядом проблем, когда попытался перестроить проект. Первая проблема заключалась в том, что зависимости nuget жаловались, что для сборок OpenIddict запрошено «1.0.0 .- *», но получено «1.0.0-rtm-1063». Эти ошибки не имеют для меня никакого смысла, но я изменил свой файл .csproj, как показано ниже:

<!-- OpenIdDict -->
<!-- 1.0.0.-* changed to 1.0.0.-rtm-1063 -->
<PackageReference Include="AspNet.Security.OAuth.Validation" Version="1.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.1" />
<PackageReference Include="OpenIddict" Version="1.0.0-rtm-1063" />
<PackageReference Include="OpenIddict.EntityFrameworkCore" Version="1.0.0-rtm-1063" />
<PackageReference Include="OpenIddict.Mvc" Version="1.0.0-rtm-1063" />

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

using OpenIddict.Models;

с участием

using OpenIddict.EntityFrameworkCore.Models;

В результате у меня остались две проблемы, решения которых я не могу найти.

services.AddOpenIddict().AddEntityFrameworkCoreStores<ApplicationDbContext>()

не определено.

Вызов метода Configure () к app.UseOpenIddict (); жалуется, что UseOpenIddict не определен.

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

Кроме того, в этом проекте используется .NET Core 1.1, который, насколько я понимаю, был заменен .NET Core 2.1. Мне не ясно, как я обновляю проект для использования .NET Core 2.1. Выпадающий список в графическом интерфейсе VS2017 содержит только версии 1.0 и 1.1 и «Установить другие фреймворки ...». Но даже после установки последней версии 2.1 SDK и среды выполнения в раскрывающемся списке по-прежнему нет опции для .NET Core 2.1. Что я делаю неправильно?


person Martin Horton    schedule 28.07.2018    source источник
comment
См. Это для ядра .Net в VS2017: stackoverflow.com/questions/48384288/   -  person Subbu    schedule 29.07.2018
comment
Примеры OpenIddict для ASP.NET Core 1.x можно найти здесь: github.com / openiddict / openiddict-core / tree / release / samples. Примеры для 2.x находятся в ветке dev: github.com/openiddict/ openiddict-core / tree / dev / samples   -  person Kévin Chalet    schedule 31.07.2018


Ответы (1)


Вам следует удалить <PackageReference Include="AspNet.Security.OAuth.Validation" Version="1.0.0" />, поскольку теперь на него транзитивно ссылается метапакет OpenIddict.

В RC3 синтаксис немного изменился, поэтому services.AddOpenIddict().AddEntityFrameworkCoreStores<ApplicationDbContext>() теперь более действителен:

// In OpenIddict RC2, all the options used to be grouped.
services.AddOpenIddict(options =>
{
    options.AddEntityFrameworkCoreStores<ApplicationDbContext>();

    options.AddMvcBinders();

    options.EnableAuthorizationEndpoint("/connect/authorize")
           .EnableLogoutEndpoint("/connect/logout")
           .EnableTokenEndpoint("/connect/token")
           .EnableUserinfoEndpoint("/api/userinfo");

    options.AllowAuthorizationCodeFlow()
           .AllowPasswordFlow()
           .AllowRefreshTokenFlow();

    options.RegisterScopes(OpenIdConnectConstants.Scopes.Email,
                           OpenIdConnectConstants.Scopes.Profile,
                           OpenIddictConstants.Scopes.Roles);

    options.RequireClientIdentification();

    options.EnableRequestCaching();

    options.EnableScopeValidation();

    options.DisableHttpsRequirement();
});

// In OpenIddict RC3, the options are now split into 3 categories:
// the core services, the server services and the validation services.
services.AddOpenIddict()
    .AddCore(options =>
    {
        // AddEntityFrameworkCoreStores() is now UseEntityFrameworkCore().
        options.UseEntityFrameworkCore()
               .UseDbContext<ApplicationDbContext>();
    })

    .AddServer(options =>
    {
        // AddMvcBinders() is now UseMvc().
        options.UseMvc();

        options.EnableAuthorizationEndpoint("/connect/authorize")
               .EnableLogoutEndpoint("/connect/logout")
               .EnableTokenEndpoint("/connect/token")
               .EnableUserinfoEndpoint("/api/userinfo");

        options.AllowAuthorizationCodeFlow()
               .AllowPasswordFlow()
               .AllowRefreshTokenFlow();

        options.RegisterScopes(OpenIdConnectConstants.Scopes.Email,
                               OpenIdConnectConstants.Scopes.Profile,
                               OpenIddictConstants.Scopes.Roles);

        // This API was removed as client identification is now
        // required by default. You can remove or comment this line.
        //
        // options.RequireClientIdentification();

        options.EnableRequestCaching();

        // This API was removed as scope validation is now enforced
        // by default. You can safely remove or comment this line.
        //
        // options.EnableScopeValidation();

        options.DisableHttpsRequirement();
    });
person Kévin Chalet    schedule 31.07.2018
comment
Большое спасибо за этот вклад. Все так сильно изменилось с тех пор, как я в последний раз смотрел это. - person Martin Horton; 05.08.2018