学习网站建设课程 - 无法理解一段代码

Following a course on building website - can't understand a block of code

我正在努力学习 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)
            });
        }

我无法理解声明数组。我在网上查了好久,没找到。我为什么需要它,它是如何工作的?

我发现这很有用,但我还是没有

What is the claims in ASP .NET Identity

完全理解。

任何人都可以帮助我理解这个概念吗?我们为什么需要它,它是如何工作的?

谢谢。

什么是声明?
假设你是边境官员,你的工作是签发移民许可证 给移民。在您向任何人颁发许可证之前,此人必须能够 证明他自己确实属于他声称拥有的国家 从......来。那个人可能会带来他的出生证明,国民身份证 卡、Visa 或任何授权的身份证明方式。那些东西叫做 索赔。这个人必须向你展示他必须向你证明的东西 他真的来自那个国家。有时,提出一项主张就足够了。 在另一个国家,他们可能会说您至少提供了三项声明 (即身份证明)在他们发给你这个许可证之前只是为了 对于安全问题较高的国家来说,这很难。

那个数组里面可以只有一个claim,你可以选择放 尽可能多的索赔,并在内部制定其他规则以使您的 系统更加坚固和安全。由你决定。

最好的例子就是驾照。 驾驶执照可以有以下声明

  • 姓名
  • 生日
  • 可以开车
  • 允许驾驶摩托车
  • 允许驾驶卡车
  • 允许潜水巴士
  • ...

当警察拦住你的车时,它会验证你是否有权驾驶特定车辆,以及发行人是否值得信任,然后才能让你继续你的旅程。要获取更多信息,您可以阅读 this article.

同样的概念也适用于基于声明的授权。特定用户可以有不同的声明,这些声明可以授予他访问不同功能的权限。

当您连接像 Facebook 或 Google 这样的授权提供商时,您可以要求具体的声明,并不是很多应用程序都需要生日才能运行,而其他一些应用程序可能需要它来验证用户是否合法年龄