大家好我有一个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本身来实现我在做什么?
答案 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
和可选的FindUsersInRole
,GetAllRoles
,GetUsersInRole
以反映您的图钉管理逻辑。
完成后,通过web.config注册自定义角色。
关于自定义角色提供程序(http://bojanskr.blogspot.com.au/2011/12/custom-role-provider.html)
的好文章