我尝试过创建ASP.NET Core MVC应用程序,其中我想保护表单模型,尤其是ID。
我发现了使用方法-Protect
和Unprotect
字符串的DataProtection。
我已经使用了此实现:
public class HomeController : Controller
{
readonly IDataProtector _protector;
private readonly IUserRepository _userRepository;
public HomeController(IDataProtectionProvider provider, IUserRepository userRepository)
{
_protector = provider.CreateProtector("DataProtectionDemo.Controllers.HomeController");
_userRepository = userRepository;
}
[HttpGet]
public async Task<IActionResult> Index(int id)
{
var user = await _userRepository.GetUserDetail(id);
user.Id = _protector.Protect(user.Id);
return View(user);
}
[HttpPost]
public async Task<IActionResult> Index(UserViewModel model)
{
try
{
model.Id = _protector.Unprotect(model.Id);
await _userRepository.SaveUser(model);
return RedirectToAction(nameof(Index));
}
catch (Exception e)
{
model.Error = e.Message;
return View(model);
}
}
在这种情况下,我想用加密的字符串保护隐藏字段中的用户ID,但是我不知道使用DataProtection是否正确。我知道有关授权策略的提议,这可能是下一步检查用户的许可,但我想知道这种额外的方式是创建更好的保护。
是保护形式模型的好方法吗?
我在 DataProtection
中的github上打开了此问题:
https://github.com/aspnet/dataprotection/issues/278
答案是该解决方案应该可以正常工作。