Asp.net核心MVC授权属性不阻塞

时间:2017-05-26 21:11:30

标签: asp.net-core

授权属性不起作用。我没有登录,它允许我访问此功能。

我玩过底部附带的Startup.cs。请帮我开始吧。我已经在以前版本的MVC上成功使用了这些方法,但是我还没有成功使用MVC核心。

在此之后,我希望添加角色。从哪里开始的任何方向将不胜感激。 感谢

public class SecurityAccessController : Controller
{
    private SecurityAccessDbContext SecurityAccessDbContext { get; set; }

    public SecurityAccessController([FromServices] SecurityAccessDbContext SecurityAccessDbContext)
    {
        this.SecurityAccessDbContext = SecurityAccessDbContext;
    }

    // GET: /<controller>/
    [Authorize]
    public IActionResult Index()
    {
        return View();
    }
}

这是我的Start Up.cs 根据以下评论推荐更新

 public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMemoryCache();
        services.AddSession();

        //Added
        services.AddBootstrapPagerGenerator(options => {options.ConfigureDefault();});

        //Database services
        services.AddEntityFrameworkSqlServer().AddDbContext<SecurityAccessDbContext>(options => { options.UseSqlServer(Configuration["ConnectionStrings:Accumatica"]); });
        services.AddEntityFrameworkSqlServer().AddDbContext<AcumaticaDbContext>(options => { options.UseSqlServer(Configuration["ConnectionStrings:Accumatica"]); });
        services.AddEntityFrameworkSqlServer().AddDbContext<RMADbContext>(options => { options.UseSqlServer(Configuration["ConnectionStrings:Accumatica"]); });
        services.AddEntityFrameworkSqlServer().AddDbContext<WarrantyDbContext>(options => { options.UseSqlServer(Configuration["ConnectionStrings:Accumatica"]); });
        services.AddEntityFrameworkSqlServer().AddDbContext<GenericDbContext>(options => { options.UseSqlServer(Configuration["ConnectionStrings:Accumatica"]); });
        services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationIdentityDbContext>(options => { options.UseSqlServer(Configuration["ConnectionStrings:Accumatica"]); });

        services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
        {
            options.Cookies.ApplicationCookie.LoginPath = "/Account/Login";
            options.Cookies.ApplicationCookie.AccessDeniedPath = "/Home/AccessDenied";
        })
        .AddEntityFrameworkStores<ApplicationIdentityDbContext>()
        .AddDefaultTokenProviders();

        services.AddMvc();

        services.AddTransient<IEmailSender, AuthMessageSender>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseSession();

        app.UseIdentity();

        app.UseMvcWithDefaultRoute();
    }

3 个答案:

答案 0 :(得分:3)

在添加Identity之前添加Mvc。此外,您无需添加Authorization,因为在Identity添加CookieAuthenticationOptions时已经完成了Identity。您还可以配置身份选项,例如登录路径,而无需配置// Remove me // services.AddAuthorization(); // Remove me too // services.Configure<CookieAuthenticationOptions>(options => // .... services.AddIdentity<ApplicationUser, IdentityRole>(options => { options.Cookies.ApplicationCookie.LoginPath = "/Account/Login"; options.Cookies.ApplicationCookie.AccessDeniedPath = "/Home/AccessDenied"; options.Cookies.ApplicationCookie.AutomaticChallenge = true; options.Cookies.ApplicationCookie.AutomaticAuthenticate = true; }) .AddEntityFrameworkStores<ApplicationIdentityDbContext>() .AddDefaultTokenProviders(); services.AddMvc(); 。相反,您可以在添加{{1}}时配置它。

以下是代码的外观片段。

{{1}}

答案 1 :(得分:0)

我发现了问题

文件launchsettings.json有

 "iisSettings": {
    "windowsAuthentication": true,

我改为

  "iisSettings": {
    "windowsAuthentication": false,

答案 2 :(得分:0)

上面的答案也对我有帮助,但是我可以补充一点,如果您想使[AllowAnonymous]属性起作用,则还需要将anonymousAuthentication更改为true:

  "iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,