我正在进行基于声明的用户角色身份验证。对于此身份验证,我测试了以下内容:
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, name),
new Claim(ClaimTypes.Email, email),
new Claim(ClaimTypes.StreetAddress, Address),
new Claim(ClaimTypes.Role, "Admin")
},
我的身份验证工作正常,但我意识到我应该实现某种安全性,以避免用户可以篡改设置角色。
因此我偶然发现了这一点,应该添加到Global.asax
:
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Email;
我似乎无法完全理解上面的代码是做什么的?我是对的,如果我说它给了用户持有的cookie,一个由email
制作的唯一令牌,然后用于验证系统对用户的合法性?
答案 0 :(得分:0)
我不太确定你的问题意味着什么,但让我试着清除一些事情。
首先,我们来谈谈您的AntiForgeryConfig
代码行。它的作用是配置AntiForgeryToken以使用Email
声明来标识请求(根据电子邮件创建令牌)。 AntiForgeryToken
允许您信任请求并阻止跨站点请求伪造(CSRF)。
它分为两部分实施。首先,您需要将AntiForgeryToken
添加到表单(@Html.AntiForgeryToken
)。其次,您需要在控制器的操作中验证令牌(ValidateAntiForgeryTokenAttribute
)。
Here is a link to explain what CSRF
Here is a link with up to date code how to implement it
作为旁注,你说... to avoid that the user can tamper the set role
。 AntiForgeryToken对篡改角色没有任何作用。篡改角色与您的身份验证过程更相关。