.NET 5.0 应用程序中的 JWT 身份验证
介绍
本文将给出 JSON Web Tokens 的定义,并展示它们如何在 .Net 应用程序中使用。本文将参考文章 使用 .NET 5.0 Web API 和 Microsoft SQL Server 构建待办事项列表应用程序 ,其中我展示了如何使用 .NET 5.0 Web API 构建待办事项列表的后端。本文将描述 JWT 的结构,并解释如何在 .NET 应用程序中生成 JWT。
目录
- 工具
- JWT 定义
- JWT结构
- 在 .NET 应用程序中生成 JWT
- 结论
工具
- Visual Studio 2019
JWT 定义
JSON Web Token (JWT) 是一种开放标准,可在空间受限的环境中安全传输声明。这允许 JWT 通过 URL、POST 方法或 HTTP 标头传输。在本文中,我们将通过 POST 方法发送 JWT。
JWT 是一个标准,因为 2011 年成立的 JSON 对象签名和加密组 (JOSE) “标准化了完整性保护(签名和 MAC)和加密的机制以及密钥和算法标识符的格式,以支持使用 JSON 的协议的安全服务”。JOSE 小组建立了以 JSON 格式作为数字签名令牌安全传输声明的规范。
声明是关于对象的断言语句。在本文中,我将展示名为“name”的声明断言登录用户是“Sakhile-admin”。在这种情况下,我们的对象是用户。共有三种类型的索赔:注册索赔、公共索赔和私人索赔。在待办事项应用程序中,我们使用了注册声明和我定义的两个私有声明。
JWT结构
JWT 具有三个不同的部分,即标头、有效负载和签名。标头通常包含两个声明,用于对令牌进行签名的算法和令牌的类型。但是,只有算法声明是强制性的。有不同类型的算法用于对令牌进行签名,例如RS256、RS256等。如果没有使用算法,则声明的断言为无,并且此 JWT 是不安全的。我将展示如何创建一个不安全的 JWT。不安全的 JWT 没有签名,一些 JWT 验证库可以将这些令牌解释为有效的令牌,这可能允许某人修改令牌负载。TokenValidationParameters 是 JwtBearerOptions 的一个选项,不认为未签名的令牌有效。我将展示 .NET 应用程序将未签名的令牌视为无效并返回 401 未经授权的状态代码。
负载包含关于对象的声明。这是添加用户数据的地方。待办事项应用程序中使用的注册声明之一是过期时间,它显示令牌被视为无效的确切时刻。JWT 设置为 3 小时后到期。短期令牌有助于缓解跨站点请求伪造 (CSRF) 攻击。但是由于to-do应用的前端使用localStorage来存储token而不是Cookies,所以CSRF是不可能的。
签名是使用 Base64Url 编码的标头和有效载荷、用户提供的秘密字符串和标头中描述的算法形成的。签名验证令牌中包含的数据在令牌从发行者发送到受众以及从受众发送到发行者时没有被更改。
在 .NET 应用程序中生成 JWT
要生成 JWT,必须在我们简单的待办事项列表应用程序中编辑三个文件。startup.cs 文件、appsettings.json 文件和 AthenticationController.cs 文件。
appsettings.cs 文件包含 JWT 凭据。出于安全原因,凭据存储在此处。秘密字符串用于对 JWT 进行签名。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"SQLConnection": "Server=.;Database=ToDoDB;Trusted_Connection=True;Integrated Security=true"
},
"JWT": {
"ValidAudience": "http: //localhost:4200",
"ValidIssuer": "http://localhost:24288",
"Secret": "MySecretStringMuuustBeVeeeeeeeeeeryLooooooooOng"
}
}
startup.cs 文件。在 ConfigureServices 方法中,添加了 AddAuthentication 服务来验证令牌。在 Configure 方法中,添加了 app.UseAuthentication() 以在此应用程序中使用身份验证。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!