gpt4 book ai didi

c# - 如何从 ClaimsPrincipal 中删除现有声明?

转载 作者:IT王子 更新时间:2023-10-29 04:24:09 24 4
gpt4 key购买 nike

我正在制作一个开发人员工具,用于模拟内联网站点的角色,以允许开发人员根据需要快速充当任何角色。定义的角色是 Developer、Team Lead、Team Member、Engineering、Marketing、Guest,网页上的工具调用 Web Api 以添加或删除 Claim ...好吧,我可以添加,但似乎无法找到可以访问 .RemoveClaim(claim).TryRemoveClaim(claim) 以使其正常工作的位置。我是否必须创建自定义理赔管理器才能获得此功能,还是我遗漏了什么?

我一直在看System.Security.Claims几乎所有其他事情似乎都非常简单,并且没有提到需要大量工作才能完成我需要的事情。

我在 .NET 4.5.1 中使用 VS 2013/Web Api2。

网站端仅使用对 PUTDELETE 功能的简单 ajax 调用,直到我让它按我想要的方式工作。在 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,我不明白为什么我不能,而且我找不到任何用于删除声明的示例代码。

最佳答案

您应该使用身份来添加或删除声明。试试这个来添加声明。

var user = User as ClaimsPrincipal;
var identity = user.Identity as ClaimsIdentity;
identity.AddClaim(new Claim(ClaimTypes.Role, "somenewrole"));

要删除声明,

var user = User as ClaimsPrincipal;
var identity = user.Identity as ClaimsIdentity;
var claim = (from c in user.Claims
where c.Value == "somenewrole"
select c).Single();
identity.RemoveClaim(claim);

顺便说一句,最好使用 Controller 中的 User 而不是 HttpContext.Current.User

关于c# - 如何从 ClaimsPrincipal 中删除现有声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com