问题标签 [authorize-attribute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc-3 - 由`AuthorizeAttribute`重定向时在登录页面中显示自定义消息
我已经编写了一个自定义AuthorizeAttribute
以在登录页面中显示消息。这是代码。
在我的行动中,我会做
现在,我无法访问HttpContext.Current.Items["LoginFailMessage"]
我视图中的项目。我意识到问题是,该项目仅针对一个重定向调用存在,但授权失败会导致多个重定向。
那么,有什么办法可以解决这个问题吗?我应该从哪里传递消息?
编辑
我想要做的是,假设允许匿名用户查看某事的简短描述。
与描述,有一个edit
和一个detail
链接。两者都edit
需要detail
用户登录。因此,如果单击其中一个,用户将被重定向到登录页面。
如果用户点击edit
我将显示一条消息Please login to edit
,如果点击detail
可能please login to see detail
在登录页面中。
asp.net-mvc - MVC 自定义授权属性
我们在这里工作的 Web 应用程序上使用 Windows 身份验证。
我扩展了 MVC 的AuthorizeAttribute
,以便它从 web.config 文件中读取授权用户和角色。我覆盖AuthorizeCore()
以确保当前用户是配置文件中的一个。
我和我的同事在这里进行了一些辩论。他认为如果恶意个人获得对服务器的访问权,很容易将自己添加到 web.config 中,他认为应该使用硬编码的用户和角色的标准访问属性,因此必须有人重新编译以让自己访问...或拥有一个十六进制编辑器。
好奇我将授权角色放入 web.config 的方法是否被认为是不好的做法?SO社区的集体意见是什么。
.net - 如何拒绝仅访问.net MVC 中的一个区域?
我试图仅使用 .Net MVC 4 否认一个领域,但我没有得到结果。当我<authentication mode="Forms" />
输入 web.config 时会发生什么都被拒绝:所有网站都不是我想要的,我只想拒绝管理区域。
我把我AuthorizeAttribute
的BaseController
管理区域,仍然没有工作:
全球.asax:filters.Add(new AutenticarAdminAttribute());
如果我<authentication mode="Forms" />
从 web.config 中删除AuthorizeAttribute
不做的工作,IsAuthenticated
总是如此。
当我再次<authentication mode="Forms" />
放入 web.config 时,一切都被拒绝了。
我不能只限制一个区域,怎么办?
管理区域中的 BaseController:
管理区域中的 DefaultAdminController:
公共控制器:
asp.net-mvc-3 - 使用模型列表进行基于角色的授权
我有 3 个模型 [用户、角色和用户角色]
考虑一下,控制器上的基于角色的授权使用 [Authorize] 属性指定用户必须具有管理员角色才能访问类中的任何控制器操作
这很好,我需要的是,
有没有办法将我的角色集合分配给 [Authorize] 属性?例如
我将从登录用户中获取分配的角色并将其存储在列表中。是否可以将此列表分配给 [Authorize] 属性?如下所示:
asp.net-mvc - 具有自定义身份验证的自定义 AuthorizeAttribute
我正在使用 ASP.NET MVC 4 Web 应用程序作为某些 WCF 服务的前端。所有用户登录/注销和会话控制都在后端完成。MVC 应用程序应该只存储一个带有会话 ID 的 cookie。我的客户端不允许使用表单身份验证,一切都必须自定义。
我在 web.config 中设置了以下内容:
我还有一个全局过滤器:
在 Global.asax 中调用
我已经用 [AllowAnonymous] 标记了每个不需要授权的控制器和操作。
现在我必须实现 MyAuthorizeAttribute。我尝试了一些教程,但没有一个完全符合我的场景。
基本上,我必须为每个动作处理以下场景:
- 如果存在有效的 cookie,则应认为当前请求已授权(将不会检查任何角色,只有一种用户)。
- 如果没有 cookie,我应该覆盖默认的 MVC 处理程序(它尝试加载帐户/登录)并将用户重定向到主页/索引页面,并显示用户应该登录的消息。
- 如果 WCF 方法调用抛出 FaultException,而我们的自定义 SecurityFault 表示会话已过期(SecurityFault 有一个包含异常原因的自定义枚举字段),我应该销毁我的自定义会话 cookie 并再次将用户重定向到主页/索引页面用户应该登录的消息,因为他的最后一个会话已过期。对于所有其他 SecurityFaults,我可以让它们通过 - 我有一个全局错误处理程序。
据我了解,我需要重写 AuthorizeCore (检查我的 cookie 以查看会话是否存在并且仍然有效)和 HandleUnauthorizedRequest (将用户重定向到主页/索引而不是默认登录页面)。
对于重定向,我尝试过:
这似乎可以很好地处理第二种情况(不过,我不确定那个基本调用 - 需要吗?)。
对于第一种情况,我需要实现 AuthorizeCore。我不确定,如何正确地做到这一点。我已经看到 AuthorizeAttribute 有一些用于处理缓存情况的代码,也许还有更多隐藏的功能,我不想破坏它。
对于第三种情况,我不确定 MyAuthorizeAttribute 是否能够处理它。AuthorizeAttribute 能否捕获 Action 内部发生的异常,或者我必须在全局错误处理程序中处理 SecurityFault.SessionExpired 情况?
asp.net-mvc - MvcSiteMapProvider 导致 MVC4 网站出现授权问题
我正在尝试使用我的新 MVC4 网站实现 MvcSiteMapProvider,但我遇到了一些我似乎无法修复的问题。
我使用 Active Directory 设置授权(目前没有角色提供程序),并且一切正常。当您尝试访问登录页面以外的任何页面时,您将被重定向到登录页面。Account 控制器的操作方法具有 [allowAnonymous] 属性,以允许未经身份验证的用户访问它们,以便他们可以登录。
出于某种未知原因,将 MvcSiteMapProvider 添加到项目中会阻止此操作,现在未经身份验证的用户可以访问任何页面。MvcSiteMapProvider 创建的菜单正常工作,只有经过身份验证的用户才能看到它,但如果未经身份验证的用户在直接链接中键入,他们不会像以前那样重定向到登录页面。
我已经从项目中删除了 MvcSiteMapProvider 并且身份验证再次开始正常工作。我相信这与 MvcSiteMapProvider 以某种方式覆盖 authorizeAttribute 过滤器有关,但我不知道在哪里/如何。
我可以将 [Authorize] 放在控制器的顶部,并且重定向与 MvcSiteMapProvider 一起工作,但这与使用 MVC4 的全部原因背道而驰。
我感觉这个问题来自 MvcSiteMapProvider/External/AuthorizeAttributeBuilder.cs,但我没有足够的经验来解决这个问题。
更新:原来我刚刚错误地设置了我的全局过滤器。由于某种原因,RegisterGlobalFilters 方法在我的 global.asax 文件中,所以我的 FilterConfig.cs 文件没有以下行:
我从 global.asax 文件中删除了该方法,然后使用上述过滤器更新了 FilterConfig.cs 文件,现在一切都按预期工作。不知道我是如何陷入这种境地的,但我很高兴我弄明白了。
mvcSiteMapProvider GitHub 项目上有人提到他让 MVC4 和 mvcSiteMapProvider 无缝工作,所以我创建了一个新的 MVC4 应用程序并在进行任何更改之前添加了 mvcSiteMapProvider,然后添加了授权全局过滤器。一切都按预期工作,所以我比较了项目并发现了哪里出错了。希望此信息对某人有所帮助,但我对此表示怀疑,因为这是一个非常独特的案例。
asp.net-mvc-4 - Ninject Authorization vs Action Filter 绑定顺序
我有 2 个过滤器正在尝试使用 Ninject 的BindFilter<>
语法应用,并且它们的依赖注入成功地应用了它们。问题在于这样一个事实,即一个人会确定当前用户是谁并绑定该用户InRequestScope
,并且在检查维护授权时必须在第二个用户之前运行 - 否则它不知道您指的是哪个用户。
中的过滤器绑定NinjectWebCommon.cs
如下所示:
所以在维护控制器中,我希望第一个运行,然后是第二个;在其他所有内容中,只有第一个 - 这很有效,第二个仅在浏览我的维护控制器中的某些内容时使用。
2 个过滤器是这样声明的(不相关的细节除外)
我希望断点 1 被击中,然后是断点 2,但由于某种原因,它总是首先出现断点 2 - 因为此时它不知道用户,所以它告诉我我没有授权。
我尝试了许多不同的 FilterScope 排列和顺序设置,甚至以不同的顺序绑定它们,但没有任何效果......我做错了什么?
c# - 无法在 OnActionExecuting(ActionExecutingContext filterContext) 下访问 User.Identity
我不确定我错过了什么,但我真的无法
User.Identity
参考OnActionExecuting(ActionExecutingContext filterContext)
任何线索如何解决它?
asp.net-mvc-3 - 从 MVC 3 中的自定义 Authorize 属性访问操作方法参数
我正在编写一个 MVC 3 应用程序,用户可以在其中登录并管理他们的数据。我想防止用户查看或篡改其他用户的数据。我的第一直觉是在每个动作方法中验证对相关对象的访问,如下所示:
这很好用,但我认为将对象授权代码放入从 AuthorizeAttribute 派生的自定义 Authorize 属性中可能会更好,然后我可以将其应用于控制器。不幸的是,我无法从我的自定义 Authorize 属性中找到访问操作方法参数的方法。相反,我发现访问传入 objectId 的唯一方法是检查 httpContext.Request 或 filterContext.RequestContext.RouteData.Values:
我发现这种方法非常笨拙。我真的不想在 RouteData 或 Request 对象中闲逛;能够访问操作方法参数会更干净,因为模型绑定已经从 RouteData 和 Request 中提取了相关数据。
我知道我可以从自定义操作过滤器访问操作方法参数(详见此处),但数据授权代码不应该放在授权过滤器中吗?我看到的授权过滤器示例越多,我就越觉得它们仅用于处理角色。
我的主要问题是:如何从我的自定义授权属性访问操作方法参数?
c# - 在 ASP.NET MVC4 中,如何重定向到 {controller}/{id}?
我在 ASP.NET MVC4 项目中有以下路由配置:
现在,我想知道如何创建一个RedirectResult
orRedirectToRouteResult
来生成一个指向/Error/403
而不是/Error/Index/403
.
额外的信息
我正在尝试从其覆盖方法内部的自定义实现重定向未经授权的用户: .System.Web.Mvc.AuthorizeAttribute
HandleUnauthorizedRequest(AuthorizationContext)