Tag: authorize attribute

从AuthorizeAttributeinheritance的属性不起作用

我目前正在尝试基于用户角色在新的ASP MVC 5应用程序中实现安全性。 目标是防止用户访问某些控制器或控制器方法,如果他们没有某个角色(或更高)。 基于我到目前为止所读到的问题,我创建了一个inheritanceAuthorizeAttribute的属性,它看起来像这样(MyAppRole是枚举,顺便说一句): [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class AuthorizeRoleOrSuperiorAttribute : AuthorizeAttribute { private MyAppRole _authorizedRole; public AuthorizeRoleOrSuperiorAttribute(MyAppRole authorizedRole) { //Breakpoint here _authorizedRole = authorizedRole; } public override void OnAuthorization(HttpActionContext actionContext) { //Breakpoint here base.OnAuthorization(actionContext); if (!UserInfo.GetUserRoles().Any(r => (int)r >= (int)_authorizedRole)) throw new UnauthorizedAccessException(ErrorsModule.RoleMissing); } } 我在方法和/或控制器上这样称呼它: […]

多个彼此了解的授权属性

我有一个非常简单的场景。 我想用自定义授权属性装饰我的控制器/操作。 如果任何属性有效,则应授予授权。 例如, [MyAuth(1)] [MyAuth(2)] public class MyController : Controller { … } 我无法将参数组合到单个授权属性中。 以上示例仅是一个简化示例。 如果任一属性授权用户,我希望用户被授权。 我假设ActionFilterAttribute或AuthorizeAttribute可以看到其他filter已被执行并等待执行,但没有这样的运气。 我怎么能做到这一点? 由于属性似乎没有任何意识,可能是一个HttpModule ? 自定义ControllerActionInvoker ?

ASP.Net Core 2.0混合身份validationJWT和Windows身份validation不接受凭据

我在asp.net core 2.0中创建了API,我正在使用混合模式身份validation。 对于某些控制器JWT和一些使用Windows身份validation。 我对使用JWT授权的控制器没有任何问题。 但对于我想要使用Windows身份validation的控制器,我无限期地提示使用chrome的用户名和密码对话框。 这里是我的示例控制器代码,我想使用Windows身份validation而不是JWT。 [Route(“api/[controller]”)] [Authorize(AuthenticationSchemes = “Windows”)] public class TestController : Controller { [HttpPost(“processUpload”)] public async Task ProcessUploadAsync(UploadFileModel uploadFileModel) { } } 我的配置服务代码 public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(options => { options.DefaultAuthenticateScheme = IISDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(“Bearer”, options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false, ValidateIssuer = […]

开发期间绕过或关闭?

构建MVC3应用程序,TPTB希望我们使用他们的自定义授权提供程序。 但是,在开发过程中,这个身份validation提供程序很麻烦,因为它会在关闭/重新启动浏览器时发出错误,或者需要您在每次编译时重新记录o。 现在,我刚刚将到web.config中,这可以正常工作,直到遇到使用[Authorize(Roles = “Admin”)]filter的操作或控制器(它可以是任何角色,而不仅仅是Admin)。 当它击中其中一个时,它只会呈现一个空白页面。 全球有没有办法暂时关闭这些filter? 或者只是在我开发过程中为用户提供所有角色? 编辑 让我澄清一下 – 我实际上正在将一个大型应用程序从MVC2移植到MVC3。 它有很多[Authorize(Roles=”Admin”)]和[Authorize(Roles=”Admin,Editor”)] 。 如果可能的话,我宁愿不改变所有这些。 我应该创建一个自动提供所有角色的小型自定义角色提供程序吗?

使用集成测试Web Api

所以我发现在[Authorize]标签上有些东西让我有所启发,但没有什么可以解决我的问题。 我的场景是我有Web Api方法,我希望使用RestSharp进行集成测试。 但是,RestSharp正在获取我的登录页面,而不是调用的结果。 [Authorize] public Item GetItem([FromBody] int id) { return service.GetItem(id); } 该产品使用自定义登录系统,我真正想要的是一种只为集成测试禁用[授权]徽章的方法。 但是我读到你可以允许匿名用户,它会“禁用”徽章,所以在解决方案中,我有一个集成测试项目,在那个项目中我有一个App.config文件。 在那个文件中,我把: 但这似乎也不起作用。 任何有关正在发生的事情的解释,为什么它不起作用以及如何才能使这项工作将不胜感激。 我试图设置一个Thread.CurrentPrincipal但是没有用(也许我做错了 – 你能在代码中设置“任何”授权吗?)。 如果有帮助,则在httpmodule中处理身份validation。

如何使用C#中的Reflection使用属性查找控制器? (或如何构建动态Site.Master菜单?)

也许在进入标题问题之前我应该​​备份并扩大范围…… 我目前正在ASP.NET MVC 1.0中编写一个Web应用程序(虽然我的PC上安装了MVC 2.0,所以我并不完全限于1.0) – 我已经开始使用标准的MVC项目了基本的“欢迎使用ASP.NET MVC”,并在右上角显示[Home]选项卡和[About]选项卡。 很标准,对吗? 我添加了4个新的Controller类,我们称之为“天文学家”,“生物学家”,“化学家”和“物理学家”。 附加到每个新控制器类的是[Authorize]属性。 例如,对于BiologistController.cs [Authorize(Roles = “Biologist,Admin”)] public class BiologistController : Controller { public ActionResult Index() { return View(); } } 这些[Authorize]标签自然限制哪些用户可以根据角色访问不同的控制器,但我想根据用户所属的角色在Site.Master页面的网站顶部动态构建一个菜单。 例如,如果“JoeUser”是角色“天文学家”和“物理学家”的成员,导航菜单会说: [主页] [天文学家] [物理学家] [关于] 当然,它不会列出“生物学家”或“化学家”控制器索引页面的链接。 或者,如果“JohnAdmin”是角色“Admin”的成员,则指向所有4个控制器的链接将显示在导航栏中。 好吧,你们大家都有了想法…现在回答真正的问题…… 从StackOverflow主题关于ASP.NET中动态菜单构建的答案开始,我试图理解如何完全实现它。 答案建议扩展Controller类(称之为“ExtController”),然后让每个新的WhateverControllerinheritance自ExtController。 我的结论是,我需要在这个ExtController构造函数中使用Reflection来确定哪些类和方法附加了[Authorize]属性来确定角色。 然后使用静态字典,将角色和控制器/方法存储在键值对中。 我想象它是这样的: public class ExtController : Controller { protected static Dictionary<Type,List> ControllerRolesDictionary; protected override […]

是否可以覆盖ASP.NET MVC中的默认行为?

我想知道是否/如何覆盖ASP.NET MVC中的默认[Authorize]行为。 我知道我可以创建一个新的Action Filter,创建自己的属性等等; 我只是感兴趣,如果我可以简单地更改[授权]行为并用我自己的代码替换它的工作? 编辑 :男孩和女孩。 感谢您的意见,但正如我所写,我不打算引入新的[XYZAuthorize]属性。 我知道怎么做。 我想保留[授权]符号,但只是改变它的工作原理。

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

我需要启用我的管理员用户即时更改用户的访问权限,以便他们可以创建新角色并为这些角色添加权限。 我希望能够创建一个Authorize属性来粘贴在我可以从数据库添加角色的控制器类之上,这样我就不必在开发过程中“设置”角色,如[Authorize(Roles=”Role1, Role2″)]等 所以像[Authorize(Roles = GetListOfRoles()] 我发现了这个问题 – ASP.NET MVC授权用户有许多角色 ,它们做了类似的事情,但也许有办法改变它,以便从数据库中获取权限/角色列表?

有人可以向我解释这个ASP.NET MVC代码块吗?

这是ASP.NET MVC2(RTM) System.Web.Mvc.AuthorizeAttribute类中的当前代码: – public virtual void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException(“filterContext”); } if (this.AuthorizeCore(filterContext.HttpContext)) { HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; cache.SetProxyMaxAge(new TimeSpan(0L)); cache.AddValidationCallback( new HttpCacheValidateHandler(this.CacheValidateHandler), null); } else { filterContext.Result = new HttpUnauthorizedResult(); } } 因此,如果我’授权’然后做一些缓存的东西,否则抛出401 Unauthorized响应。 问题: 这3条缓存线有什么作用? 欢呼:)