【发布时间】:2014-04-29 12:39:57
【问题描述】:
我正在为 Intranet 站点制作一个模拟 Roles 的开发人员工具,以允许开发人员根据需要快速充当任何 Role。定义的角色是Developer, Team Lead, Team Member, Engineering, Marketing, Guest 并且网页上的一个工具调用Web Api 以添加或删除Claim...我可以添加但似乎无法找出.RemoveClaim(claim) 或@ 的位置可以访问 987654327@ 以使其正常工作。我是否必须创建自定义索赔管理器才能获得此功能,还是我遗漏了什么?
我一直在查看 System.Security.Claims,几乎所有其他的东西似乎都非常简单,并且没有提到需要大量工作来做我需要的事情。
我在 .NET 4.5.1 中使用 VS 2013/Web Api2。
网站端只使用简单的 ajax 调用 PUT 和 DELETE 功能,直到我让它按我想要的方式工作。在Controller中,我的cs代码如下:
public void Put(int id, [FromBody]string role)
{
if (FindClaim(role) != null) return;
var user = HttpContext.Current.User as ClaimsPrincipal;
if (user == null) return;
var claimId = new ClaimsIdentity();
claimId.AddClaim(new Claim(ClaimTypes.Role, role));
user.AddIdentity(claimId);
}
// DELETE api/devroleadjuster/5
public void Delete(int id, [FromBody]string role)
{
var claim = FindClaim(role);
if (claim == null) return;
var user = HttpContext.Current.User as ClaimsPrincipal;
if (user == null) return;
// Why can't I do this????
user.RemoveClaim(claim);
}
private Claim FindClaim(string role)
{
try
{
var user = HttpContext.Current.User as ClaimsPrincipal;
var claim = (from c in user.Claims
where c.Value == role
select c).Single();
return claim;
}
catch (InvalidOperationException)
{
return null;
}
}
Put 工作得很好,问题出在我的代码的Delete 部分...我想使用user.RemoveClaim(claim); 代码或类似的东西...我不明白为什么我可以'不是根据 MSDN,我找不到任何删除声明的示例代码。
【问题讨论】:
标签: c# asp.net-web-api wif claims-based-identity