将Asp.net Core身份添加到由Identity Server保护的API

时间:2019-08-02 03:58:28

标签: asp.net-core identityserver4 asp.net-core-2.2 asp.net-core-identity

我有一个ASP.NET Identity Server 4,该服务器配置为使用ASP.NET Core Identity(Auth Server)进行授权和身份验证。我还有一个单独的ASP.NET Core API(API),配置为使用Auth Server。通过控制台应用程序,我可以使用Auth Server来向GrantTypes.ClientCredentials进行身份验证,并使用访问令牌执行对API的请求。一切正常。

我想将此API用作身份管理API,以添加/编辑/删除用户,角色等,因此我使用ASP.NET Core Identity对其进行配置,但是现在当我从在控制台应用程序中,我得到了404,因为API重定向到了不存在的登录屏幕(毕竟是API)。这说明我没有使用当前的AccessToken和Identity Server身份验证。这意味着我的新配置似乎覆盖了Identity Server。

API Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        string connectionString = Configuration.GetConnectionString("IdentityContextConnection");

        //This was added for ASP.NET Identity
        services.AddDbContext<IdentityContext>(options =>
             options.UseSqlServer(connectionString));

        //This was added for ASP.NET Identity
        services.AddIdentity<IdentityUser, IdentityRole>()
               .AddEntityFrameworkStores<IdentityContext>()
               .AddDefaultTokenProviders();

        services.AddMvcCore()
            .AddAuthorization()
            .AddJsonFormatters();

        services.AddAuthentication("Bearer")
            .AddJwtBearer("Bearer", options =>
            {
                options.Authority = "http://localhost:5000";
                if (Environment.IsDevelopment())
                    options.RequireHttpsMetadata = false;
                options.Audience = "management-api";
            });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseAuthentication();
        app.UseMvc();
    }

如何让API对此Auth Server进行身份验证和授权,并同时使用ASP.NET Identity?

1 个答案:

答案 0 :(得分:0)

问题在于使用services.AddIdentity<IdentityUser>()。如本answer中所述,AddIdentityCore应该用于“添加用户管理操作所需的服务”,而AddIdentity会执行相同的操作以及所有身份验证,这将覆盖Identity Server身份验证。

最终配置:

services.AddIdentityCore<IdentityUser>()
            .AddRoles<IdentityRole>()
            .AddUserManager<UserManager<IdentityUser>>()
            .AddEntityFrameworkStores<IdentityContext>()
            .AddDefaultTokenProviders();