После курса по созданию веб-сайта - не могу понять блок кода

Я пытаюсь изучить ASP.NET.

Есть курс, которому я следую, и я не могу понять несколько вещей.

Вот код в контроллере:

[HttpPost("login")]
        public async Task<IActionResult> Login(UserForLoginDto userForLoginDto)
        {
            var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password);
            if (userFromRepo == null)
            {
                return Unauthorized();
            }

            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
                new Claim(ClaimTypes.Name, userFromRepo.Username)
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSetings:Token").Value));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);
v
            var tokenDescriptor = new SecurityTokenDescriptor{
                Subject = new ClaimsIdentity(claims),
                Expires = DateTime.Now.AddDays(1),
                SigningCredentials = creds
            };

            var tokenHandler = new JwtSecurityTokenHandler();
            var token = tokenHandler.CreateToken(tokenDescriptor);
            
            return Ok(new {
                token = tokenHandler.WriteToken(token)
            });
        }

Я не могу понять массив утверждений. Я искал в Интернете некоторое время, и я не понимаю. Зачем мне это нужно и как это работает?

Я нашел это весьма полезным, но я до сих пор не

Что такое утверждения в ASP .NET Identity

полностью понять это.

Может ли кто-нибудь помочь мне получить эту концепцию? Зачем нам это нужно и как это работает?

Спасибо.


person Octavian Niculescu    schedule 01.08.2020    source источник


Ответы (2)


Что такое претензии?
Предположим, вы являетесь сотрудником погранперехода и ваша работа заключается в выдаче разрешений на иммиграцию иммигрантам. Прежде чем выдать разрешение кому-либо, человек должен быть в состоянии идентифицировать себя, что он действительно принадлежит к стране, из которой он утверждает, что приехал. Это лицо может принести свидетельство о рождении, национальное удостоверение личности, визу или любые разрешенные средства идентификации. Эти вещи называются претензиями. Человек должен показать вам что-то, что он должен доказать вам, что он действительно из этой страны. Иногда достаточно одного предъявленного требования. В другой стране они могут сказать, что вы предоставляете как минимум три заявления (то есть средства идентификации), прежде чем они выдадут вам это разрешение, просто чтобы усложнить задачу для стран с более высокими проблемами безопасности.

Этот массив может просто содержать только одно утверждение внутри, вы можете поместить столько утверждений, сколько пожелаете, и установить другие внутренние правила, чтобы сделать вашу систему более жесткой и безопасной. Тебе решать.

person Tavershima    schedule 01.08.2020
comment
Спасибо за ваше время. Ваш ответ мне очень помог. - person Octavian Niculescu; 03.08.2020

Лучший пример — водительское удостоверение. Водительское удостоверение может иметь следующие претензии

  • Имя
  • День рождения
  • Разрешено водить машину
  • Разрешено водить мотоцикл
  • Разрешено нырять в грузовик
  • Разрешено нырять в автобус
  • ...

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

То же самое относится и к авторизации на основе требований. Конкретный пользователь может иметь разные претензии, которые могут предоставить ему доступ к различным функциям.

Когда вы подключаете провайдера авторизации, такого как Facebook или Google, вы можете запросить конкретные претензии, не очень приложениям нужна дата рождения для работы, в то время как некоторым другим она может понадобиться для проверки того, является ли пользователь совершеннолетним.

person Preben Huybrechts    schedule 01.08.2020
comment
Думаю, теперь я понимаю. И в чем разница между проверкой подлинности на основе утверждений и проверкой подлинности на основе ролей? - person Octavian Niculescu; 03.08.2020
comment
см. этот ответ «Управление доступом на основе ролей rbac против управления доступом на основе утверждений cbac в asp n»> stackoverflow.com/questions/22814023/ - person Preben Huybrechts; 03.08.2020