如何通过中间件更新.Net Core 3.x中的声明值

我有一些设计用来执行某些逻辑的中间件。该逻辑的一部分是在对用户进行身份验证后更新声明值。我想知道是否可以这样做?

public class MyMiddleware
{
    public async Task Invoke(HttpContext context)
    {
        //logic omitted
        var claims = new List<Claim> { new Claim("MyValue","test") }
        context.User.AddIdentity(new ClaimsIdentity(claims));
    }
}

到目前为止,我发现的唯一方法是上面的示例。但是,我不完全了解这种方法。上面的内容会否覆盖现有的任何声明,或者会有其他行为?

编辑:在我的测试中,以上代码无效。就像我在下一个请求中看到的那样,实际上并没有添加该声明。

我也尝试了以下方法,但效果相同,在下一个请求中声明不存在。

public class MyMiddleware
{
    public async Task Invoke(HttpContext context)
    {
        //logic omitted
        var claimsIdentity = (ClaimsIdentity) context.User.Identity;
        var identity = new ClaimsIdentity(claimsIdentity);
        var myClaim = identity.Claims.FirstOrDefault(x => x.Type.Equals(userExpirationName));

        if(myClaim != null) identity.Removeclaim(myClaimName);
        identity.AddClaim(new Claim(myClaimName,"test"));
        context.User.AddIdentity(identity);
    }
}
kaka29999 回答:如何通过中间件更新.Net Core 3.x中的声明值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3164652.html

大家都在问