当我向项目添加身份时,为什么我的OAuth提供程序无法正常工作?

时间:2019-05-13 12:17:49

标签: asp.net-core asp.net-core-mvc

我有使用OAuth验证用户身份的代码。这是这段代码:Github link
我在Startup类的ConfigureServices()方法中使用以下代码:

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 :(得分:0)

好的,我查看了这个问题(Asp Core 2.1 Jwt + Identity. userManager store does not implement 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();
}

我不知道这是什么意思,但是它有效!等一下。