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 访问。 ![Swagger API 概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/19/19e466e4ac1f97f1566030a15f9b64824f7ac95cf811c588f559307db43038ac.png) ### 登录与 JWT Token 生成 登录端点会验证用户凭据并生成 JWT 访问 token。 ![登录端点](https://static.pigsec.cn/wp-content/uploads/repos/cas/3e/3e3701c9e69d95e2b42498a787461debcb79b6cf8cede821da4c7fd22b2ac040.png) ### Swagger JWT 授权 在 Swagger UI 中配置了 JWT Bearer 身份验证以访问受保护的端点。 ![Swagger 授权](https://static.pigsec.cn/wp-content/uploads/repos/cas/c5/c54adfbd868006c9e921998a37dfd1b846f76a656a44441bec51cedc6f8331b2.png) ### 受保护的端点(用户信息与 JWT 声明) 经过身份验证的用户可以使用生成的 JWT token 访问受保护的 API。 #### 已验证用户信息 ![用户信息端点](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ada7cf30130711d5d9bdc5102e42e0aa683c93c8602c8065458fbc5a30dd8e61.png) #### JWT 声明信息 ![JWT 声明端点](https://static.pigsec.cn/wp-content/uploads/repos/cas/30/309acc46c63d2db74a2256f1e32d61358b29d4b04c3a44f8ed3e71c3a837d2d2.png) ## 🛠 技术栈 ### 后端 - 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, 权限控制