我有一个MVC控制器基类,我在其上应用了Authorize属性,因为我希望几乎所有控制器(及其操作)都被授权.
但是我需要一个控制器和另一个控制器的动作未经授权.我希望能够用[Authorize(false)]或其他东西来装饰它们,但这是不可用的.
有任何想法吗?
我使用jquery ajax函数提交表单.用户必须登录,否则他们必须重定向到登录页面.我已经使用了Authorize()属性.
[Authorize]
public ActionResult Creat()
{
....
}
Run Code Online (Sandbox Code Playgroud)
如果用户没有登录操作返回登录页面到jquery的ajax函数,它会显示在同一页面上,但我想将用户重定向到登录页面.有什么解决方案吗?
在标准的ASP.Net MVC Identity 2.0 Owin实现中的几个地方,你会看到rememberBrowser,如:
await signInManager.SignInAsync(user, isPersistent: isPersistent, rememberBrowser: false);
Run Code Online (Sandbox Code Playgroud)
如果你将rememberBrowser设置为true,我注意到我可以杀死浏览器,杀死IIS Express,删除浏览器登录的用户,甚至重新启动我的机器,浏览器仍被视为已登录.不太好,考虑到被删除的用户被视为授权/登录将导致在该[Authorize]属性后面的代码中出现各种问题,这些问题需要有效的用户使用.
那么rememberBrowser究竟做了什么,是否有人冒险将cookiesBrowser伪造成绕过OWIN登录?似乎重点[Authorize]是保证没有人,但登录用户访问给定的控制器动作,并且rememberBrowser似乎是该保证中的漏洞.
奖金问题:有没有办法禁用rememberBrowser,这样即使伪造的cookie确实进来,它也会被拒绝?
假设一个高速开发人员的任务是构建一个可由许多不同的人访问的银行应用程序.每个人都希望访问他或她自己的帐户信息,但不希望其他人访问它.我想知道限制MVC应用程序访问的最佳实践,以便只有拥有该信息的用户(或管理员)才能访问它.
该Authorize属性允许我们按角色进行限制.虽然这是一个起点,但似乎任何经过身份验证的用户都可以访问任何其他用户的信息.
ActionFilters似乎提供了更精细控制的选项,可能可用于完成任务.但是,我不清楚它们是否是推荐的方法.
欢迎任何指导或想法.
我一直在努力思考这个问题,并且找不到如何正确执行此操作的良好解决方案.
我已阅读过这些文章:
http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/
http://geekswithblogs.net/brians/archive/ 2010/07/08/implementation-a-custom-asp.net-mvc-authorization-filter.aspx
ASP.NET MVC自定义授权
http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute .aspx
自定义授权属性附加Param?
思考也许最后一个是接近的.
场景:
所以在控制器中我怎么能说用户有权访问某个动作,因为我不知道用户管理员创建的角色是什么?
所以在逻辑中...假设我有一个带有"创建","详细信息"的任务控制器.该任务有一个"服装"部门.
管理员将添加一个名为"任务用户"的新角色并说这个角色可以"创建任务"
管理员还允许此角色"查看任务详细信息"
管理员将打开"部门级安全性"
创建:
当任务创建时在控制器上调用我需要确保用户处于允许"创建任务"的角色中.因此,默认情况下,我无法将允许的"角色"发送到授权属性,因为我不知道它们.我不知何故需要发送用户拥有的所有角色,并查看角色是否可以访问"创建任务"
使用部门安全性查看:
当另一个用户去查看此任务时,他们可以访问"查看任务详细信息"(我可以弄清楚但是我解决了第一个问题).但是,由于任务是针对他们所在的其他部门,我需要拒绝访问.如果任务是用户所属部门之一,则用户只能"查看任务详细信息".
这是我无法弄清楚的.如何正确扩展AuthorizeAttribute以便我可以通过GerRolesForUser发送角色列表,因为它只接受一个字符串,以及如何识别它的Action,然后通过检查Department ID来限制另一个级别的安全性.
部门ID不一定要缓存,所以也许我可以在控制器级别这样做.
我有一组控制器,每个控制器用于每种授权类型.例如,A类授权将拥有一组控制器,每个控制器都需要A类授权.有没有办法将一个[Authorize(Role="Class A")]属性放在某个适用于每个控制器的地方,而不必用相同的属性装饰每个控制器?
asp.net-mvc controller authorize authorize-attribute asp.net-mvc-3
我在ServiceStack上有一些服务,并在这个项目中使用SignalR.
现在,我想保护集线器连接(仅对经过身份验证的用户进行访问),但我使用ServiceStack框架身份验证..(不是asp.net身份验证)和ServiceStack的会话(写入AuthUserId ih此会话和身份验证标志).
因此,当用户尝试连接到集线器时 - 集线器必须检查身份验证...
(是的,我可以从Hub请求Cookie(例如,方法OnConnected),但是在Authorize Attribute中检查身份验证 - 我必须在此类中进行(不在集线器中)
(http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization)
所以,我创建了课程
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public class AuthorizeMyAttribute : AuthorizeAttribute
{
protected override bool UserAuthorized(System.Security.Principal.IPrincipal user)
{
//... how can i request Cookies? / or may be can access for ServiceStack session...
// and return true or false
}
}
Run Code Online (Sandbox Code Playgroud)
我能做些什么?谢谢!
在过去几周的某个地方,iOS中的授权Facebook调用失败了"找不到页面".对于尚未安装应用程序的任何用户,或者应用程序的权限已更改且用户必须批准其他权限,都会发生这种情况.无论Facebook应用程序处理用户身份验证还是Safari或弹出对话框,都会发生这种情况.全部重定向到"找不到页面"页面.
通过调试器,我发现登录屏幕的初始URL请求(app id替换"[app_id]"):
https://m.facebook.com/dialog/oauth?type=user_agent&display=touch&redirect_uri=fb[app_id]%3A%2F%2Fauthorize&sdk=2&scope=user_location%2Cuser_relationships%2Cemail%2Cpublish_stream%2Coffline_access&client_id=[app_id]
登录尝试正在寻找以下URL(我假设用户权限不足的URL):
http://www.facebook.com/dialog/permissions.request?_path=permissions.request&app_id=[appid]&redirect_uri=fb[appid]%3A%3F%3Fauthorize&sdk=2&display=touch&type=user_agent&fbconnect=1&perms=user_location%2Cuser_relationships% 2Cemail%2Cpublish_stream%2Coffline_access&SSO = iphone-狩猎&from_login = 1
我已经检查过Xcode中列出的Bundle ID与我在Facebook上的应用程序设置中列出的相同.
由于未显示权限页面,因此新用户无法添加应用程序.过去工作的我的应用程序的旧版本也以同样的方式失败.可能是什么问题呢?
我正在学习MVC4,我正在关注Pro ASP NET MVC4第4版的书,以创建一个体育商店项目.
我一直在webforms中开发,我试图弄清楚表单身份验证在MVC4中是如何工作的.
这是我取得的成就:
Web.Config中
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880"/> </authentication>
Run Code Online (Sandbox Code Playgroud)
AccountController登录动作:
[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (authProvider.Authenticate(model.UserName, model.Password))
{
return Redirect(returnUrl ?? Url.Action("Index", "Admin"));
}
else
{
ModelState.AddModelError("", "Incorrect username or password");
return View();
}
}
else
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
认证提供者:
public bool Authenticate(string username, string password) {
bool result = FormsAuthentication.Authenticate(username, password);
if (result)
{
FormsAuthentication.SetAuthCookie(username, false);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我正在设置AuthCookie,现在我想知道,如何保护AccountController之外的其他控制器和操作
该应用程序有一个名为AdminController的控制器,您可以在其中编辑
以下{controller/action}下的产品和产品列表
管理员/指标
所以,如果我不理解理论,如果用户没有登录AccountController,他们就不应该在声明中使用[Authorize]标签调用操作:
public …Run Code Online (Sandbox Code Playgroud) authorize ×10
asp.net-mvc ×7
c# ×2
security ×2
.net ×1
ajax ×1
asp.net ×1
controller ×1
facebook ×1
ios ×1
openid ×1
owin ×1
permissions ×1
roles ×1
servicestack ×1
signalr ×1
swagger ×1
swashbuckle ×1