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