学习网站建设课程 - 无法理解一段代码
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 这样的授权提供商时,您可以要求具体的声明,并不是很多应用程序都需要生日才能运行,而其他一些应用程序可能需要它来验证用户是否合法年龄
我正在努力学习 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 这样的授权提供商时,您可以要求具体的声明,并不是很多应用程序都需要生日才能运行,而其他一些应用程序可能需要它来验证用户是否合法年龄