使用身份配置身份服务器 4,合并服务.AddAuthentication() 和服务.AddIdentity()



使用身份服务器 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仅用作所有其他选项的回退。

相关内容

  • 没有找到相关文章

最新更新