Raj-Kumar-Arora/ASP.NET-Core-Web-API-Authentication-and-Authorization-with-JWT
GitHub: Raj-Kumar-Arora/ASP.NET-Core-Web-API-Authentication-and-Authorization-with-JWT
基于 ASP.NET Core 8 的安全 Web API 示例项目,演示了 JWT 身份验证、基于角色与声明的授权以及 Swagger 集成的完整实现。
Stars: 2 | Forks: 0
# ASP.NET Core Web API 身份验证与授权
一个安全的 ASP.NET Core 8 Web API,演示了 JWT 身份验证、基于声明的授权、基于角色的授权以及使用现代 API 安全实践进行的 Swagger 集成。
本项目为使用 JSON Web Token (JWT) 保护 REST API 提供了一个实用的参考实现,并演示了在 ASP.NET Core 应用程序中如何实现身份验证和授权。
## 🚧 项目状态
本项目目前正在积极开发中。
### ✅ 已实现
- JWT 身份验证
- 基于声明的授权
- 基于角色的授权
- ASP.NET Core Web API
- Swagger/OpenAPI 集成
- Swagger 中的 JWT Bearer 身份验证
- 内存用户存储
- 安全的 API 端点
### 🔄 计划中的增强功能
- Refresh Token
- ASP.NET Core Identity 集成
- SQL Server 数据库支持
- 用户注册
- 密码哈希
- 基于策略的授权
- OAuth 2.0 和 OpenID Connect
- 单元和集成测试
- Docker 支持
- 使用 GitHub Actions 的 CI/CD
## 🎯 项目概述
本项目演示了如何使用 JWT (JSON Web Token) 来保护 ASP.NET Core Web API。
它涵盖了完整的身份验证流程、token 生成、基于声明的身份以及基于角色的授权,同时公开了可以使用 Swagger UI 进行测试的安全 REST 端点。
该实现遵循现代 ASP.NET Core 开发实践,可作为构建安全企业级 API 的基础。
## 🏗 架构概述
```
Client / Swagger UI
│
▼
Login API (/api/Login)
│
▼
JWT Token Generation
│
▼
ASP.NET Core Middleware
│
Authentication + Authorization
│
▼
Protected API Endpoints
```
### 架构原则
- 分层 API 设计
- 依赖注入
- JWT Bearer 身份验证
- 基于声明的身份
- 基于角色的授权
- 配置驱动的安全性
- RESTful API 设计
## 🔐 身份验证流程
```
User Login
│
▼
Validate Credentials
│
▼
Generate JWT Token
│
▼
Return Token to Client
│
▼
Client sends Bearer Token
│
▼
Token Validation Middleware
│
▼
Protected API Access
```
## 📸 API 预览
### Swagger API 概览
API 端点已编写文档并可通过 Swagger UI 访问。

### 登录与 JWT Token 生成
登录端点会验证用户凭据并生成 JWT 访问 token。

### Swagger JWT 授权
在 Swagger UI 中配置了 JWT Bearer 身份验证以访问受保护的端点。

### 受保护的端点(用户信息与 JWT 声明)
经过身份验证的用户可以使用生成的 JWT token 访问受保护的 API。
#### 已验证用户信息

#### JWT 声明信息

## 🛠 技术栈
### 后端
- C#
- ASP.NET Core 8
- ASP.NET Core Web API
- JWT Bearer 身份验证
- 依赖注入
### 安全
- JSON Web Token (JWT)
- 基于声明的身份验证
- 基于角色的授权
- HMAC SHA256 Token 签名
### API 文档
- Swagger / OpenAPI
### 数据存储
- 内存用户存储(演示实现)
## ✨ 已实现的功能
### 🔑 身份验证
- 用户登录
- JWT Token 生成
- Token 过期
- 安全的 Token 签名
### 👤 授权
- 受保护的端点
- 声明提取
- 基于角色的端点保护
- 当前用户信息
### 📄 API 文档
- 交互式 Swagger UI
- Swagger 中的 JWT 身份验证支持
## 📡 可用的 API 端点
| 端点 | 方法 | 授权 |
|----------|--------|---------------|
| `/api/Login` | POST | 匿名 |
| `/api/User/UserInfo` | GET | 已验证用户 |
| `/api/User/Administrator` | GET | Administrator |
| `/api/User/StandardUser` | GET | StandardUser |
| `/api/User/Claims` | GET | 已验证用户 |
## 🔑 包含的 JWT 声明
生成的 JWT 包含以下声明:
- 用户名
- 电子邮件
- 显示名称
- 用户角色
这些声明用于在整个应用程序中授权请求并识别已验证的用户。
## 🚀 运行应用程序
1. 克隆仓库
2. 在 Visual Studio 2022 或更高版本中打开解决方案
3. 构建并运行应用程序
4. 打开 Swagger UI
5. 调用登录端点
6. 复制生成的 JWT
7. 在 Swagger 中点击 **Authorize**
8. 输入:
```
Bearer
```
9. 访问受保护的端点
## 📂 项目结构
```
Controllers/
LoginController
UserController
Models/
UserModel
UserLogin
UserConstants
Program.cs
appsettings.json
```
## 🔮 未来的增强功能
- Refresh Token 支持
- SQL Server 集成
- ASP.NET Core Identity
- 密码哈希
- 基于策略的授权
- OAuth 2.0
- OpenID Connect
- Azure AD / Microsoft Entra ID 集成
- Docker 容器化
- GitHub Actions CI/CD
- 单元测试
- 集成测试
## 👨💻 作者
**Raj Kumar Arora**
副架构师 | 首席全栈工程师
**技术栈:** C#, .NET, ASP.NET Core, Azure, Angular, SQL, Microservices, AI, 云架构
GitHub: https://github.com/Raj-Kumar-Arora
标签:ASP.NET Core, JWT, Swagger, Web API, 权限控制