安全性检查用户是否为访问控制器操作

时间:2014-03-18 12:51:14

标签: asp.net-mvc cookies asp.net-mvc-5

大家好我有一个MVC操作,它们设置了Authorize属性。对于这些操作中的每一个,都有一个密码/安全别针,仅对该操作有效。

public ActionResult Action_1()// generic pin 1
{
Return RedirectToAction("PinCheck", new { returnUrl = "Action_1" });
...
}
[Authorize]
public ActionResult Action_2()// generic pin 2
{
...
}

[Authorize]
public ActionResult PinCheck(string returnUrl)// generic pin 1
{
// request three characters of the pin in random.
...
}
[Authorize]
[HttpPost]
public ActionResult PinCheck(string a, string b, string c, string returnUrl)// generic pin 1
{
// check the three chars.
...
// How do I store pin check for the controller was a success and don't ask the user unless he closes browser or logout
}

我的行动计划是检查管理员为数据库中特定操作的特定用户存储的针脚。到目前为止,我已经实现了检查PinCheck()例程,但我遇到的问题是用户每次请求特定操作时都必须输入引脚。我通过在PinCheck成功时保存加密的cookie来解决这个问题。但有没有办法修改Authorize属性和身份验证cookie本身来实现我在做什么?

2 个答案:

答案 0 :(得分:1)

您还可以将每个已经过验证的Pin表示为存储为Cookie中的ClaimsIdentity的一部分,这样您就可以查询用户在每个操作中寻找相应PinClaim的声明。如果您使用的是ASP.NET标识,那么在验证引脚时可以执行类似的操作:

await manager.AddClaimAsync(User.Identity.GetUserId(), new Claim("<mypinclaim>", "<value>"))
await SignInAsync() // And then resign the user in to regenerate the cookie with the claim

答案 1 :(得分:0)

执行此操作的一种方法是创建自定义角色提供程序。您可以通过继承RoleProvider来创建一个。然后覆盖IsUserInRole和可选的FindUsersInRoleGetAllRolesGetUsersInRole以反映您的图钉管理逻辑。 完成后,通过web.config注册自定义角色。

关于自定义角色提供程序(http://bojanskr.blogspot.com.au/2011/12/custom-role-provider.html

的好文章