标签: authorize-attribute

Asp.net MVC4:授权控制器和动作

如果我在控制器和动作上都有Authorize属性,哪一个会起作用?或者都会生效?

asp.net-mvc authorize-attribute

71
推荐指数
2
解决办法
7万
查看次数

处理ajax调用中的会话超时

我正在使用jquery对asp.net mvc控制器动作进行ajax调用:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult GetWeek(string startDay)
        {
            var daysOfWeek = CompanyUtility.GetWeek(User.Company.Id, startDay);
            return Json(daysOfWeek);
        }
Run Code Online (Sandbox Code Playgroud)

当会话超时时,此调用将失败,因为User对象存储在会话中.我创建了一个自定义authorize属性,以检查会话是否丢失并重定向到登录页面.这适用于页面请求,但它不适用于ajax请求,因为您无法从ajax请求重定向:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AuthorizeUserAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!httpContext.Request.IsAjaxRequest())
            {//validate http request.
                if (!httpContext.Request.IsAuthenticated
                    || httpContext.Session["User"] == null)
                {
                    FormsAuthentication.SignOut();
                    httpContext.Response.Redirect("~/?returnurl=" + httpContext.Request.Url.ToString());
                    return false;
                }
            }
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在另一个线程上读到,当用户未经过身份验证并且你发出ajax请求时,你应该将状态代码设置为401(未授权),然后在js中检查它并将它们重定向到登录页面.但是,我不能让这个工作:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (Request.IsAjaxRequest() && (!Request.IsAuthenticated || User == null))
            {
                filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
            }
            else
            {
                base.OnActionExecuting(filterContext);
            } …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery authorize-attribute asp.net-mvc-3

56
推荐指数
4
解决办法
7万
查看次数

MVC核心如何强制/设置所有操作的全局授权?

如何强制/设置MVC Core中所有操作的全局授权?

我知道如何注册全局过滤器 - 例如我有:

Setup.cs

services.AddMvc(options =>
{
    options.Filters.Add(new RequireHttpsAttribute());
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我无法为授权添加相同的内容:

options.Filters.Add(new AuthorizeAttribute());

我有错误:

Cannot convert from 'Microsoft.AspNet.Authorization.AuthorizeAttribute()' to 'System.Type'

(方法.Add()需要IFilterMetadata类型)


我知道 - 从类似的问题 - 这适用于MVC4-5 ......所以必须在MVC Core上改变...

有人有什么想法吗?

authorize-attribute asp.net-authorization asp.net-core-mvc

55
推荐指数
2
解决办法
1万
查看次数

获取ActionName,ControllerName和AreaName,并在ActionFilter Attribute中传递它

我使用自定义AuthorizationFilter,如下所示:

public class ActionAuthorizeAttribute : AuthorizeAttribute {

protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {

        if(!httpContext.User.Identity.IsAuthenticated)
            return false;

        if(IsUserExcluded())
            return false;
        else
            return IsRoleAuthorize(httpContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在每个操作的顶部使用此过滤器,并且要检查是否已授权,需要操作名称,控制器名称和区域名称.那么有没有办法在AuthorizeCore()使用方法中获得这些名称System.Web.HttpContextBase?如果答案是否,那么我怎么能得到这个名字并将其传递给属性,显然我不想手工添加每个名字,实际上就像ViewContext.RouteData.Values["Controller"]在控制器中一样:

[ActionAuthorize(actionName=Action, controller=ControllerName, area=AreaName)]
public ActionResult Index() {
    return View();
}
Run Code Online (Sandbox Code Playgroud)

有人对此有任何想法吗?

asp.net-mvc authorization authorize-attribute action-filter asp.net-mvc-3

35
推荐指数
1
解决办法
3万
查看次数

动态添加角色以授权控制器的属性

我需要启用我的管理员用户即时更改用户的访问权限,以便他们可以创建新角色并为这些角色添加权限.

我希望能够创建一个Authorize属性,以便在我的控制器类之上,我可以从数据库添加角色,这样我就不必在开发过程中"设置"角色,如[Authorize(Roles="Role1, Role2")]等.

所以像 [Authorize(Roles = GetListOfRoles()]

我发现了这个问题 - ASP.NET MVC授权用户有很多角色,它做了类似的事情,但也许有一种方法可以改变它,以便从数据库中获取权限/角色列表?

c# asp.net asp.net-mvc authorize-attribute asp.net-identity

22
推荐指数
2
解决办法
2万
查看次数

返回部分视图的控制器操作会在授权失败时插入登录页面

我有一个视图,使用jQuery从控制器操作加载部分视图.控制器操作使用Authorize属性进行修饰,如果用户在调用该操作被重定向到正确的LogOn页面时超时,则LogOn页面将插入到部分视图已经消失的视图中.

还有另一篇文章在这里描述使用jQuery但遗憾的是它不包含任何代码示例这正是我需要的,因为我不是很熟悉的jQuery(和新的Web开发)的解决方案,我需要得到这个问题的解决我会尽快.

我想要做的就是将用户重定向到正确的LogOn页面,这对我来说非常直接,但到目前为止它似乎并非如此.如果jQuery是要走的路,有人可以发一个代码示例,这真的会帮助我.

谢谢.

authentication asp.net-mvc jquery partial-views authorize-attribute

21
推荐指数
1
解决办法
5033
查看次数

操作过滤器执行顺序

我创建了两个实现的类AuthorizeAttribute.

一个是全局使用的,我将它设置在Global.asax.cs上:

filters.Add(new FirstAuthorizeAttribute() { Order = 0 });
Run Code Online (Sandbox Code Playgroud)

另一个被调用SecondAuthorizeAttribute,它只在一些动作方法中使用,我在我想要的方法中使用它作为属性.

    [HttpGet]
    [SecondAuthorize]
    public ActionResult LogOut()
    {
        FormsAuthentication.SignOut();
        Session.Clear();
        Session.Abandon();
        return Redirect(Url.Content("~/"));
    }
Run Code Online (Sandbox Code Playgroud)

问题是SecondAuthorizeAttribute始终执行之前FirstAuthorizeAttribute,我需要先执行此操作.订单没有帮助,我怎么能这样做?

asp.net-mvc authorize-attribute action-filter asp.net-mvc-3

19
推荐指数
2
解决办法
2万
查看次数

为什么我在使用Azure缓存(.NET MVC3应用程序)时无法组合[Authorize]和[OutputCache]属性?

使用Windows Azure Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider作为MVC3应用程序的outputCache提供程序.以下是相关的操作方法:

[ActionName("sample-cached-page")]
[OutputCache(Duration = 300, VaryByCustom = "User", 
    Location = OutputCacheLocation.Server)]
[Authorize(Users = "me@mydomain.tld,another@otherdomain.tld")]
public virtual ActionResult SampleCachedPage()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

从Web浏览器加载此视图时出现以下异常:

System.Configuration.Provider.ProviderException: When using a custom output cache provider like 'DistributedCache', only the following expiration policies and cache features are supported: file dependencies, absolute expirations, static validation callbacks and static substitution callbacks.

System.Configuration.Provider.ProviderException: When using a custom output cache provider like 'DistributedCache', only the following expiration policies and cache features are supported:  file dependencies, absolute …
Run Code Online (Sandbox Code Playgroud)

outputcache azure authorize-attribute asp.net-mvc-3

19
推荐指数
2
解决办法
6074
查看次数

开发期间绕过或关闭[授权(角色="")]?

构建MVC3应用程序,TPTB希望我们使用他们的自定义授权提供程序.但是,在开发过程中,这个身份验证提供程序很麻烦,因为它会在您关闭/重新启动浏览器时发出错误,或者需要您在每次编译时重新记录o.

现在,我刚刚添加<authentication mode="None"/>到web.config,它可以正常工作,直到遇到使用[Authorize(Roles = "Admin")]过滤器的操作或控制器(它可以是任何角色,而不仅仅是Admin).当它击中其中一个时,它只会呈现一个空白页面.

全球有没有办法暂时关闭这些过滤器?或者只是在我开发时为用户提供所有角色?

编辑

让我澄清一下 - 我实际上正在将一个大型应用程序从MVC2移植到MVC3.它有很多,[Authorize(Roles="Admin")][Authorize(Roles="Admin,Editor")]贯穿始终.如果可能的话,我宁愿不改变所有这些.

我应该创建一个自动提供所有角色的小型自定义角色提供程序吗?

c# asp.net-mvc authorization authorize-attribute asp.net-mvc-3

19
推荐指数
3
解决办法
7320
查看次数

如果在WebAPI中授权失败,如何返回自定义消息

在我的WebAPI项目中,我有许多用[Authorize]属性修饰的api .

[Authorize]
public HttpResponseMessage GetCustomers()
{
   //my api
}
Run Code Online (Sandbox Code Playgroud)

如果用户没有正确的令牌,则会向用户返回访问被拒绝的异常.

但我需要的是,在任何这种情况下,我需要返回自定义响应消息.

{
  "StatusCode" : 403,
  "message": "You donot have sufficient permission"
}
Run Code Online (Sandbox Code Playgroud)

如果授权失败,如何返回此自定义消息.

请注意:

  • 我正在使用Owin - 基于令牌的身份验证.
  • 没有将访问令牌存储在我的数据库或其他任何地方.

c# authorize-attribute asp.net-web-api owin

19
推荐指数
1
解决办法
1万
查看次数