Как обновить значение претензии в .Net Core 3.x через промежуточное ПО - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть промежуточное программное обеспечение, предназначенное для выполнения некоторой логики. Частью этой логики является обновление значения заявки после аутентификации пользователя. Мне интересно, возможно ли это сделать?

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);
    }
}
...