Почему мой поставщик OAuth работает неправильно, когда я добавляю идентификацию в проект? - PullRequest
1 голос
/ 13 мая 2019

У меня есть код, который аутентифицирует пользователя с помощью OAuth.Вот этот код: ссылка Github
Я использую этот код в методе ConfigureServices() класса Startup:

public void ConfigureServices(IServiceCollection services)
{     
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options=>
        {
            options.LoginPath = new PathString("/Account/Login");
            options.LogoutPath = new PathString("/Account/Logout");
            options.AccessDeniedPath = new PathString("/Account/Forbidden");
        })
        .AddVkontakte(options =>    // here
        {
            options.ApiVersion = "5.95";
            options.ClientId = Configuration["VKontakte:ClientId"];
            options.ClientSecret = Configuration["VKontakte:ClientSecret"];
        });

    services.AddDefaultIdentity<User>(options =>
    {
        options.Password.RequireNonAlphanumeric = false;
        options.Password.RequireUppercase = false;
    })
    .AddEntityFrameworkStores<ApplicationContext>()
    .AddDefaultTokenProviders();

    services.AddMvc();
}

Но когда я пытаюсь аутентифицироваться, используя его, ничегослучается.Он работает так, как я хочу, только когда я удаляю эти штрихи

...
services.AddDefaultIdentity<User>(options =>
{
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireUppercase = false;
})
.AddEntityFrameworkStores<ApplicationContext>()
.AddDefaultTokenProviders();

В обоих случаях код, стоящий за .AddVkontakte(...), работает правильно, я проверил его в сетевом инспекторе браузера.Мой код отправляет запросы поставщику OAuth (vk.com) и успешно получает ответы.Но я не понимаю, почему AddDefaultIdentity<User>(...) не позволяет .AddVkontakte(...) аутентифицировать пользователя.

Что вы думаете об этом?

1 Ответ

0 голосов
/ 13 мая 2019

Хорошо, я посмотрел на этот вопрос ( Asp Core 2.1 Jwt + Identity. Хранилище userManager не реализует IUserRoleStore ), и попытался немного изменить параметры, переданные в AddAuthentication, и это сработало!

Вот окончательный код:

public void ConfigureServices(IServiceCollection services)
{     
    services.AddAuthentication(options=>   // defined some options
        {
            options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
            options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
            options.DefaultSignInScheme = IdentityConstants.ApplicationScheme;
        })
        .AddCookie(options=>
        {
            options.LoginPath = new PathString("/Account/Login");
            options.LogoutPath = new PathString("/Account/Logout");
            options.AccessDeniedPath = new PathString("/Account/Forbidden");
        })
        .AddVkontakte(options =>
        {
            options.ApiVersion = "5.95";
            options.ClientId = Configuration["VKontakte:ClientId"];
            options.ClientSecret = Configuration["VKontakte:ClientSecret"];
        });

    services.AddDefaultIdentity<User>(options =>
    {
        options.Password.RequireNonAlphanumeric = false;
        options.Password.RequireUppercase = false;
    })
    .AddEntityFrameworkStores<ApplicationContext>()
    .AddDefaultTokenProviders();

    services.AddMvc();
}

Я не знаю, что это значит, но это работает! Подожди и посмотри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...