标签: authorize-attribute

如何授权一组控制器而不在每个控制器上放置注释?

我有一组控制器,每个控制器用于每种授权类型.例如,A类授权将拥有一组控制器,每个控制器都需要A类授权.有没有办法将一个[Authorize(Role="Class A")]属性放在某个适用于每个控制器的地方,而不必用相同的属性装饰每个控制器?

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

8
推荐指数
1
解决办法
6414
查看次数

从Owin WebApi2返回描述性401消息

我有一个使用owin运行的asp.net 4.5 web api.无论何时发出未经授权的请求,它都会按预期返回401以及以下响应:

{"Message":"Authorization has been denied for this request."}
Run Code Online (Sandbox Code Playgroud)

我想在此响应中添加其他详细信息(过期令牌,无效角色等等),并[AuthorizeAttribute]根据此SO帖子实施自定义.

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
    {
        var response = actionContext.Request.CreateResponse<MyError>
            (new MyError() { Description = "This is why you're unauthorized" });
        response.StatusCode = HttpStatusCode.Unauthorized;
        actionContext.Response = response;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器上使用它,如下所示:

[MyAuthorizeAttribute(Roles = "Foo")]
public class MyController : ApiController
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

返回401,并按预期返回以下响应:

{"Description": "This is why you're unauthorized"}
Run Code Online (Sandbox Code Playgroud)

不过,我看不出如何确定请求来自于未授权的原因HttpActionContext传递给MyAuthorizeAttribute.HandleUnauthorizedRequest.例如,当我在本地进行调试并使用过期令牌发出请求时,它会抛出一个SecurityTokenExpiredException解释IDX10223: Lifetime validation …

asp.net authorize-attribute asp.net-web-api owin asp.net-web-api2

8
推荐指数
1
解决办法
605
查看次数

是否有一个授权属性相当于.net的标准Web表单(而不是MVC)

我正在开发一个将使用Windows角色提供程序的项目,我想限制某些AD组的功能.

使用MVC,我可以使用AuthorizeAttribute上面的操作方法并相应地重定向.对于不使用MVC的标准Web表单应用程序(.NET 3.5),我能做些类似的事情吗?

.net webforms roleprovider authorize-attribute

7
推荐指数
1
解决办法
7959
查看次数

有没有办法让AuthorizeAttribute响应状态代码403 Forbidden而不是重定向?

如果用户未登录并且他们请求标记的操作[Authorize],则响应是重定向到Account/LogOn操作(状态代码302 Found).

有没有办法让响应成为状态代码403 Forbidden?

c# authorize-attribute http-status-code-403 asp.net-mvc-2

7
推荐指数
1
解决办法
4327
查看次数

ASP.Net MVC 3:反向授权属性

我有一个简单的ASP.Net MVC 3应用程序,它有一些控制器和一些很好的操作.

现在,由于这是基于用户的应用程序,因此大多数控制器操作都需要对用户进行身份验证.MVC使用内置的Authorize属性处理这个问题,您可以使用该属性单独装饰控制器和/或操作.

最棒的是你可以将属性应用于控制器,并且给定控制器的所有操作也将应用它 - 保存了大量的输入;)

但我有一个控制器,比方说,10个动作.但我希望其中一个操作没有应用Authorize属性.

是的,我可以将该属性应用于其他9并将其从控制器中删除,这将完全符合我的需要.但有没有办法让它应用于控制器,只是选择排除其中一个动作?

实际上,会想要......

[!Authorize] 要么 [NotAuthorize]

我知道我可以创建一个可以完成这项工作的自定义工具,但我想知道的是,是否有内置方法可以做到这一点?或者我是否必须将该属性应用于所有其他9个其他操作?

authentication asp.net-mvc attributes authorize-attribute

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

检测是否手动调用AuthorizationAttribute

AuthorizeAttribute在遗留MVC5项目中有一个自定义:

public class AuthorizeWithLoggingAttribute : AuthorizeAttribute
{
     public override void OnAuthorization(AuthorizationContext filterContext)
     {
         if (!base.AuthorizeCore(httpContext)) {Log(FilterContext);}
     }
 }
Run Code Online (Sandbox Code Playgroud)

我们在查看日志时注意到,除了要应用于控制器之外[AuthorizeWithLogging],它还在代码中的其他位置显式调用,生成虚假日志:

var filters = new FilterInfo(FilterProviders.Providers.GetFilters(controllerContext, actionDescriptor));
foreach (var authFilter in filters.AuthorizationFilters)
{
    authFilter.OnAuthorization(authContext);
    if (authContext.Result != null) {return false;}
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉(通过StackTrace什么)OnAuthorization方法是显式调用,还是从属性调用?我目前最好的是 Environment.StackTrace.Contains("at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters").

c# custom-attributes authorize-attribute asp.net-mvc-5

7
推荐指数
1
解决办法
195
查看次数

AuthorizeAttribute对象的生命周期是什么?是每个请求或瞬态网络?

我只想知道AuthorizeAttribute的生命周期,并开始调试AuthorizeAttribute的默认构造函数,但无法获得任何命中.

这是自定义授权过滤器的代码.

 public class CustomAuthorizeAttribute :  AuthorizeAttribute
 {
    public CustomAuthorizeAttribute() : base()
    {
        string test = string.Empty;
    }
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        //Some code
    }
}
Run Code Online (Sandbox Code Playgroud)

有人请帮我理解这个AuthorizeAttribute的生命周期吗?

谢谢

iis asp.net-mvc request authorize-attribute web-performance

7
推荐指数
1
解决办法
729
查看次数

ASP.NET MVC AuthorizeAttribute将值传递给ActionMethod?

我只是ASP.NET MVC的新手,我不确定如何以"正确的方式"完成某项任务.

本质上,我将登录的userId存储在HttpContext.User.Identity中,并编写了一个EnhancedAuthorizeAttribute来执行一些自定义授权.

在overriden OnAuthorization方法中,我的域模型命中数据库以确保当前用户id可以访问传入的routeValue"BatchCode".原型是:

ReviewGroup GetReviewGroupFromBatchCode(string batchCode);
Run Code Online (Sandbox Code Playgroud)

如果用户无法访问ReviewGroup,则它将返回null,然后OnAuthorization拒绝访问.

现在,我知道装饰动作方法只有在OnAuthorization通过时才会执行,但我不想再次访问数据库以再次获取ReviewGroup.

我正在考虑将ReviewGroup存储在控制器中HttpContext.Items["reviewGroup"]并从控制器访问它.

这是一个可行的解决方案,还是我走错了路?

谢谢!

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

6
推荐指数
1
解决办法
1333
查看次数

基于角色的模型列表授权

我有3个型号[用户,角色和用户角色]

Use {ID [PK], Name, Email, Password, .....}
Role {ID [PK], Name, Description, .......}
UserRole {UserID [FK], RoleID [FK]}

考虑使用[Authorize]属性在控制器上进行基于角色的授权,指定用户必须具有管理员角色才能访问类中的任何控制器操作

[Authorize(Roles = "Administrator")]
public class PageController : Controller
{
    // Controller code here
}
Run Code Online (Sandbox Code Playgroud)

这很好,我需要的是,

有没有办法将我的角色集分配给[授权]属性?例如

我将从登录用户中获取已分配的角色并将其存储在列表中.是否可以将此列表分配给[授权]属性?如下所示:

[Authorize(Roles = MyDynamicallyLoadedList)]
public class PageController : Controller
{
    // Controller code here
}
Run Code Online (Sandbox Code Playgroud)

authorization role-based authorize-attribute asp.net-mvc-3

6
推荐指数
1
解决办法
835
查看次数

MVC5身份验证:在每个控制器或基本控制器上授权属性

我一直在研究保护MVC 5应用程序的最佳方法.

我们有一个带有许多WebAPI控制器的Web.csproj以及一个有两个区域的MVC站点 - 一个用于Admin,然后用于面向公众的网站.

阅读本文说明基本控制器是最好的方法,我决定采用这种方法.

但是,我个人对使用基本控制器并不行(对于我的一些推理,请参阅此stackoverflow答案).

因此,鉴于我正在使用MVC 5(ASP.Net身份和OWIN身份验证) - 任何人都可以了解每种方法的优缺点吗?

authorize-attribute owin asp.net-mvc-5 asp.net-identity

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