引言:为什么 OAuth 2.0 和 JWT 是现代授权的标准?
在现代 Web 开发中,客户端与服务器之间安全的数据传输是一项至关重要的任务。两个有助于解决此问题的关键协议是 OAuth 2.0(开放授权协议)和 JWT(JSON Web Token)。
OAuth 2.0 允许应用程序在不传递登录名和密码的情况下,获取对用户资源的有限访问权限。而 JWT 则是一种紧凑且自包含的令牌格式,其中包含识别用户所需的所有信息。
在本文中,我们将探讨如何在 C# (.NET) 中实现 OAuth 2.0 和 JWT 授权。您将学习如何配置中间件、生成令牌以及保护 API 端点。本材料面向熟悉 ASP.NET Core 基础的初级开发人员。
1. OAuth 2.0 和 JWT 基础
在编写代码之前,让我们先了解关键概念。
什么是 OAuth 2.0?
OAuth 2.0 是一种授权协议,允许第三方应用程序在不传递用户凭据的情况下访问用户资源(例如,个人资料数据)。取而代之的是使用 访问令牌(access token)。
OAuth 2.0 中的主要角色:
- 资源所有者 — 拥有资源的用户。
- 客户端 — 请求访问的应用程序。
- 授权服务器 — 在用户身份验证后颁发令牌的服务器。
- 资源服务器 — 提供受保护资源(例如 API)的服务器。
什么是 JWT?
JWT(JSON Web Token)是一种令牌格式,由三部分组成,各部分用点分隔:
- 头部 — 包含令牌类型(JWT)和签名算法(例如 HS256)。
- 载荷 — 包含数据(声明),例如用户 ID、角色、过期时间。
- 签名 — 保证令牌完整性的签名。
JWT 令牌看起来像这样:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT 是自包含的:服务器无需在数据库中存储会话,所有信息都已加密在令牌中。
2. 配置 ASP.NET Core 项目以实现 JWT 授权
让我们创建一个新的 ASP.NET Core Web API 项目并配置 JWT 授权。
步骤 1:安装 NuGet 包
为了使用 JWT,我们需要 Microsoft.AspNetCore.Authentication.JwtBearer 包。通过 NuGet 包管理器或控制台安装它:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer步骤 2:配置 appsettings.json
添加一个用于存储 JWT 参数(密钥、颁发者、受众)的节:
{ "Jwt": { "Key": "YourSuperSecretKey123!@#$%^&*()", "Issuer": "YourApp", "Audience": "YourAppUsers", "ExpireMinutes": 60 }}步骤 3:配置 Program.cs
在 Program.cs 文件(或旧版本中的 Startup.cs)中,添加身份验证服务和中间件:
using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.Text;
var builder = WebApplication.CreateBuilder(args);
// 配置 JWT 身份验证builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true,