Làm cách nào để buộc người dùng xác thực lại trước khi thực hiện Hành động trong MVC?Xác thực lại người dùng trong ứng dụng MVC cho hành động
Chúng tôi đang sử dụng xác thực Windows. Có một số hành động mà chúng tôi muốn đảm bảo đang được người dùng thực hiện (và ngăn người dùng khác thực hiện các hành động đó nếu người dùng quên khóa máy trạm của họ).
Lý tưởng nhất là tôi chỉ muốn có thể viết một thuộc tính mà kéo dài Authorize
:
namespace AuthTest.Controllers
{
[Authorize(Roles="MyApp")]
public class HomeController : Controller
{
public ActionResult Index()
{
// A regular action
return View();
}
[ReAuthenticate]
public ActionResult CriticalAction()
{
// Do something important
return View();
}
}
}
Dường như tôi có thể buộc người dùng phải nhập lại thông tin của họ bằng cách phong tục ReAuthenticate
thuộc tính cấp một phản ứng HTTP 401
trong phương thức AuthorizeCore
. Tuy nhiên, điều này yêu cầu một số thủ thuật kể từ khi Html.ActionLink
gửi hai yêu cầu:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool ok = base.AuthorizeCore(httpContext);
if (!ok) return false;
if (httpContext.Session["ReAuthCnt"] == null)
{
httpContext.Session["ReAuthCnt"] = 1;
return false;
}
else if ((int) httpContext.Session["ReAuthCnt"] < 2)
{
httpContext.Session["ReAuthCnt"] = (int)httpContext.Session["ReAuthCnt"] + 1;
return false;
}
else
{
httpContext.Session["ReAuthCnt"] = 0;
return true;
}
}
Có cách nào tốt hơn để thực hiện ủy quyền lại không?
gì bạn có nghĩa là bởi reauthenticate? –
Tại sao bạn muốn? Nếu người dùng được xác thực thì họ là, tốt, xác thực. Bạn có thể xem xét OAuth nếu bạn không thể duy trì xác thực. Có lẽ nếu bạn mô tả vấn đề của mình nhiều hơn một chút, chúng tôi có thể đề xuất việc cần làm. – griegs
Tôi đã cập nhật câu hỏi với nhiều chi tiết hơn về kịch bản và những gì tôi đã thử. – user2813199