使用身份服务器 4, .NetCore2.0 和具有隐式流/授权类型的 MS 身份;
我不清楚以下职责,因为每个都具体涉及验证/授权持有者令牌。
我有以下启动:
public void ConfigureServices(IServiceCollection services) {
...
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = GetAuthentication().ApiURL;
options.RequireHttpsMetadata = false;
options.ApiName = "afapps";
});
// Below needed to inject UserManager<ApplicationUser> userManager
// elsewhere in app as this happens to be the authORization server
// as opposed to authENtication server.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<AuthDbContext>()
.AddDefaultTokenProviders();
}
public void Configure(IApplicationBuilder app) {
app.UseAuthentication();
app.UseMvc();
}
如果我在启动中省略services.AddIdentity<ApplicationUser, IdentityRole>()...
。 在控制器中,我可以成功使用 [授权],我的其他自定义ActionFilters
HttpContext.User.Identity.IsAuthenticated
显示为== true
。
但是,在添加services.AddIdentity<ApplicationUser, IdentityRole>()...
以启用身份UserManager<ApplicationUser>
的使用后; 我现在必须另外向每个控制器添加[Authorize(AuthenticationSchemes = "Bearer")]
。
有没有办法组合或排列services.AddAuthentication()
和services.AddIdentity()
,这样我就不必指定[Authorize(AuthenticationSchemes = "Bearer")]
?
在AddIdentity()
后使用 AddAuthentication(Action<AuthenticationOptions> configureOptions)
覆盖手动设置选项,如下所示:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Bearer";
options.DefaultAuthenticateScheme = "Bearer";
options.DefaultChallengeScheme = "Bearer";
options.DefaultSignInScheme = "Bearer";
});
您必须这样做,因为字符串覆盖仅设置DefaultScheme
,而AddIdentity()
设置更具体的选项。 根据文档,DefaultScheme
仅用作所有其他选项的回退。