我有一个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?
答案 0 :(得分:0)
问题在于使用services.AddIdentity<IdentityUser>()
。如本answer中所述,AddIdentityCore
应该用于“添加用户管理操作所需的服务”,而AddIdentity
会执行相同的操作以及所有身份验证,这将覆盖Identity Server身份验证。
最终配置:
services.AddIdentityCore<IdentityUser>()
.AddRoles<IdentityRole>()
.AddUserManager<UserManager<IdentityUser>>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();