У меня есть вопрос об авторизации.
Скажите, что у меня есть конечная точка, такая как: / users / {id} / password
Скажите, что это почтовый запрос и вы можете изменитьпароль для конкретного пользователя.
Существует ли способ авторизовать / разрешить использование этой конечной точки только тем, кто в данный момент вошел в систему, или любому пользователю, который имеет определенную роль.(Эта информация доступна в требовании токена доступа)
Правильно ли это, может быть, в первую очередь может возникнуть вопрос ...
Если это так, то я понимаю, что есть обе базы ролейи авторизация на основе утверждений, поскольку они (из того, что я вижу) используют конкретные значения, которые они проверяют.Таким образом, это будет работать с ролями, но не с идентификатором пользователя, так как он динамический и не может записать все идентификаторы для проверки при создании, например, полоцитов.
Мне нужно проверить идентификатор пользователя запроса поидентификатор пользователя токена, чтобы проверить, авторизованы ли они для использования конечной точки.Если нет, то они админ?Если с ними все в порядке, они не являются целевым пользователем, они могут изменить его в любом случае.
Также я не могу найти какие-либо примеры двух разных наборов авторизации, используемых в одном или / или обстоятельствах (например, какздесь вы можете использовать его, если вы являетесь пользователем, на которого он нацелен, или администратором)
В настоящее время я решаю эту проблему в своей конечной точке, выбирая удостоверения и проверяя заявки вручную.
var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;
var userDataClaim = claims.Where(x => x.Type == ClaimTypes.UserData).FirstOrDefault();
var roleClaim = claims.Where(x => x.Type == ClaimTypes.Role).FirstOrDefault();
if(Convert.ToInt32(userDataClaim.Value) != id && roleClaim.Value != "1")
{
return Unauthorized();
}
Нет ли лучшего способа сделать это.Я не хотел бы связывать все мои функции конечной точки с такой проверкой.