.NET 8.0 - 身份验证 API
在 DOT NET 8.0 中使用 JWT Bearer Token 的身份验证 API 示例
在现代 Web 开发领域,API 安全至关重要。实现此目标的最可靠方法之一是使用 JWT(JSON Web Tokens)作为 Bearer Token 进行 API 身份验证。本文将深入探讨 JWT Bearer Token 身份验证的含义、原理和方法。
JWT,即 JSON Web Token,是一项开放标准 (RFC 7519),用于在各方之间以 JSON 对象的形式安全地传输信息。由于信息经过数字签名,因此可以验证和信任。JWT 可以使用密钥(采用 HMAC 算法)或公钥/私钥对(使用 RSA 或 ECDSA 算法)进行签名。
JWT 由三部分组成,以点(.)分隔:Header、Payload 和 Signature。
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
以下是 JWT Bearer Token 身份验证通常如何工作的分步说明:
Authorization: Bearer <token>
让我们使用 Clean Architecture 来了解 .NET 8.0 API 中的 JWT 令牌实现。
首先,设置DB及其对象,您可以使用AuthDemo.Infrastructure/Sql
代码示例文件夹下共享的脚本。
一旦我们的后端准备就绪,打开 Visual Studio 2022 并使用 Clean Architecture 设置所需的项目,如果您想了解有关 Clean Architecture 实现的更多信息,请阅读本文。
设置核心层:在解决方案下,创建一个新的类库项目,并将其命名为AuthDemo.Core
。
Entities
并添加一个名为 的新实体类User
。设置应用层:添加另一个类库项目并将其命名为AuthDemo.Application
。
Core
。Interfaces
并创建一个新界面并将其命名为IUserRepository
。IUnitOfWork
为实现工作单元。设置基础设施层:添加一个新的类库项目并将其命名为AuthDemo.Infrastructure
。
Install-Package Dapper
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.DependencyInjection.Abstractions
Install-Package System.Data.SqlClient
Application
、和Core
),并添加一个新文件夹Repository
。IUserRepository
通过创建一个新类来实现该接口UserRepository
。IUnitOfWork
通过创建新类来实现接口UnitOfWork
ServiceCollectionExtension
,并通过注入的方式在其下添加 RegisterServices 方法IServiceCollection
。设置 API 项目:添加一个新的 .NET 8.0 Web API 项目并将其命名为AuthDemoApi
。
Application
、和Infrastructure
),并添加以下包。Install-Package Swashbuckle.AspNetCore
Install-Package Microsoft.IdentityModel.Protocols
Install-Package System.IdentityModel.Tokens.Jwt
Install-Package Microsoft.IdentityModel.JsonWebTokens
Install-Package Microsoft.AspNetCore.Authentication.JwtBearer
appsettings.json
文件来管理 API 设置并替换ConnectionStrings
部分下的 DB 连接字符串。"ConnectionStrings": {
//Update values in the connection string.
"DBConnection": "Data Source=localhost\\SQLEXPRESS; Initial Catalog=AuthDemoDB; Trusted_Connection=True;MultipleActiveResultSets=true"
}
"AppSettings": {
//Replace it with your secret key to verify and sign the JWT tokens, It can be any string.
"Secret": "8c8624e2-2afc-76a5-649e-9b9bf15cf6d3"
}
配置启动设置,例如 RegisterServices(在AuthDemo.Infrastructure
项目下定义),并添加 Swagger UI(作为Bearer
身份验证方案)。
删除默认的控制器/模型类,并在 Model 文件夹下添加两个类(AuthenticateRequest
和)来处理 API 请求和响应。AuthenticateResponse
添加一个Helper
文件夹并添加以下类。
AppSettings
appsettings.json
- 从文件中映射选项。AuthorizeAttribute
- 验证授权。Common
- 添加 GenerateJwtToken 方法来生成 JWT 令牌。JwtMiddleware
- 验证令牌并在 Jwt 验证成功后将用户附加到上下文。添加一个新的控制器并命名UsersController
。
Authenticate
API 来验证用户并生成令牌。GetAll
API 返回所有用户,并添加Authorize
属性将其置于 API 安全性之后。审查最终的项目结构:
运行项目并测试 API 方法。
在这里检查源代码。
在 DOT NET 8.0 中使用 JWT Bearer Token 的身份验证 API 示例
如果您有任何意见或建议,请在下面的评论部分中留言。
文章来源:https://dev.to/techiesdiary/net-60-jwt-token-authentication-using-the-example-api-91l