.NET8.0中使用Swagger需要第三方插件支持,根据创建项目不同,有的可能已经有部分插件安装,总之需要安装下面三个Swagger的相关组件
Swashbuckle.AspNetCore.SwaggerGen
Swashbuckle.AspNetCore.SwaggerUI
Program.cs代码中的代码如下
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using System.Reflection;
using System.Text;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme
{
Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token} (注意两者之间是一个空格)",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http, // ✅ 这是 HTTP 类型
Scheme = "bearer", // ✅ 表示 Bearer Token
BearerFormat = "JWT" // 可选,UI 提示
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "bearerAuth"
}
},
Array.Empty<string>()
}
});// 加载当前程序集的 XML 文档(即你的 /// 注释)
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
if (File.Exists(xmlPath))
{
c.IncludeXmlComments(xmlPath);
}
});builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,// ⚠️ 以下是你自己定义的,需要和生成 Token 时保持一致
ValidIssuer = "MyApp", // Token 签发者
ValidAudience = "MyAppUsers", // Token 接收者
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("ThisIsASecretKeyForJWTAndItMustBeAtLeast32CharactersLong!!!"))
};
});
// =============================================
// 1. 添加 MVC(用于 Razor 页面 / 前台页面)
// =============================================
builder.Services.AddControllersWithViews(); // ✅ 支持 MVC 和 Razor 视图// =============================================
// 2. 添加 API 支持(用于返回 JSON 的接口)
// =============================================
builder.Services.AddControllers(); // ✅ 支持 [ApiController] 或 ControllerBase// =============================================
// 3. 添加授权服务
// =============================================
builder.Services.AddAuthorization();var app = builder.Build();
app.UseRouting();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"));
}
// =============================================
// 5. 启用认证与授权中间件(顺序很重要!)
// =============================================
app.UseAuthentication(); // 先认证
app.UseAuthorization(); // 后授权// =============================================
// 6. 配置路由
// =============================================// MVC 路由(比如 /Home/Index, /Home/About)
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");// API 路由(比如 /api/auth/login, /api/secure/hello)
app.MapControllers();app.Run();
配合安装下面的类库
Microsoft.AspNetCore.Authentication.JwtBearer
登录成功后通过调用下面的方面生成token
private string GenerateJwtToken(string username, string[] roles)
{
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.Name, username)
};foreach (var role in roles)
{
claims.Add(new Claim(ClaimTypes.Role, role));
}var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(
"ThisIsASecretKeyForJWTAndItMustBeAtLeast32CharactersLong!!!"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);var token = new JwtSecurityToken(
issuer: "MyApp",
audience: "MyAppUsers",
claims: claims,
expires: DateTime.Now.AddMinutes(60),
signingCredentials: creds);return new JwtSecurityTokenHandler().WriteToken(token);
}
版权所有:有信心——uxinxin 我的个人网站欢迎常来!手机版(新站开启,请多多关照) 豫ICP备12017930号-1
豫公网安备41910102000493号