ASP.NET Core Web API 的授权指南 - Auth0
控制谁可以访问您的 API 是确保应用程序安全的重要环节。本文将为您详细介绍如何限制对 ASP.NET Core Web API 的访问,仅允许授权用户操作。
设置 Web API 应用程序
首先,克隆示例应用程序代码库:
git clone --branch starter --single-branch https://github.com/auth0-blog/glossary-web-api-aspnet.git
该 ASP.NET 应用程序提供了一个 CRUD Web API,用于管理术语表。下载代码后,进入 glossary-web-api-aspnet 文件夹,并运行以下命令启动应用程序:
dotnet run
启动后,打开浏览器访问 https://localhost:5001/swagger,您将看到如下交互式 API 测试页面:

该 Web API 支持以下功能:
- 获取术语定义列表或单个术语定义
- 创建新定义
- 修改或删除现有定义
目前,API 的所有操作对任何用户开放。为了更安全,您可以限制仅授权用户才能创建、更新和删除术语表项,而允许所有人获取术语表内容。
使用 Auth0 注册 Web API
要保护 API,首先需要在 Auth0 上注册您的 Web API:
- 登录 Auth0 仪表板,点击 创建 API。
- 输入 API 名称(如 Glossary API)和唯一标识符(如
https://glossary.com)。 - 保持签名算法为 RS256,点击 创建。
完成后,Auth0 将记录您的 API 并允许您控制访问权限。
您也可以通过 Auth0 CLI 注册 API:
auth0 apis create --name "Glossary API" --identifier https://glossary.com --scopes ""
运行后,您将看到类似以下的输出:
=== API created ID 60ac3b89f0cd4a003d42e850 NAME Glossary API IDENTIFIER https://glossary.com SCOPES
请记录 <YOUR_AUTH0_DOMAIN> 和唯一标识符的值,后续配置需要用到。
启用授权支持
接下来,调整 ASP.NET Core Web API 的代码以支持 Auth0 授权服务。
配置 Web API
打开 appsettings.json 文件,将内容替换为以下内容:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"Auth0": {
"Domain": "YOUR_AUTH0_DOMAIN",
"Audience": "YOUR_UNIQUE_IDENTIFIER"
}
}
将 YOUR_AUTH0_DOMAIN 替换为 Auth0 域名,将 YOUR_UNIQUE_IDENTIFIER 替换为 API 的唯一标识符(如 https://glossary.com)。
与 Auth0 集成
安装 JWT Bearer 身份验证包:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
然后,打开 Startup.cs 文件,添加以下命名空间:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.OpenApi.Models;
在 Startup 类的 ConfigureServices 方法中,添加以下代码以启用 JWT 身份验证:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = $"https://{Configuration["Auth0:Domain"]}/";
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidAudience = Configuration["Auth0:Audience"],
ValidIssuer = $"{Configuration["Auth0:Domain"]}",
ValidateLifetime = true,
};
});
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Glossary", Version = "v1" });
});
}
在 Configure 方法中,添加以下代码以启用身份验证:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication(); // 启用身份验证
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
确保 API 端点的安全
为了限制对敏感操作的访问,打开 Controllers/GlossaryController.cs 文件,添加以下命名空间:
using Microsoft.AspNetCore.Authorization;
然后,在需要保护的操作方法上添加 [Authorize] 属性。例如,Delete 方法应如下所示:
[HttpDelete]
[Route("{term}")]
[Authorize] // 仅授权用户可访问
public ActionResult Delete(string term)
{
var glossaryItem = Glossary.Find(item => item.Term.Equals(term, StringComparison.InvariantCultureIgnoreCase));
if (glossaryItem == null)
{
return NotFound();
}
else
{
Glossary.Remove(glossaryItem);
return NoContent();
}
}
测试安全 Web API
测试未经授权的访问
运行应用程序,访问 https://localhost:5001/swagger,尝试通过 POST 操作添加新术语表项。此时,您应收到 401 Unauthorized 错误。
测试授权访问
要测试授权访问,需在 Swagger 文档中配置访问令牌支持。编辑 Startup.cs 文件,更新 ConfigureServices 方法:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Glossary", Version = "v1" });
var securitySchema = new OpenApiSecurityScheme
{
Description = "Using the Authorization header with the Bearer scheme.",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
Scheme = "bearer",
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }
};
c.AddSecurityDefinition("Bearer", securitySchema);
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{ securitySchema, new[] { "Bearer" } }
});
});
重新启动应用程序,打开 Swagger 页面,点击 Authorize 按钮,输入从 Auth0 获取的访问令牌。此时,您可以成功通过 POST 操作添加术语表项,并收到 201 Created 响应。
回顾
本文介绍了如何保护 ASP.NET Core Web API,防止未经授权的用户访问敏感端点。通过使用 Auth0,您可以轻松实现 API 的注册和授权配置,并利用 Swagger 提供交互式文档进行测试。现在,您的 Web API 已准备好安全地供客户端使用。
原文链接: https://auth0.com/blog/aspnet-web-api-authorization/
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 精通REST API:解析iOS开发中的核心要点
- ASP.NET Core Web API 的授权指南 – Auth0
- Supertest:如何像专业人士一样测试API – Testim博客
- Next.js API 路由:GET 和 POST 请求示例
- Kimi K2 API 调用全指南:解锁国产大模型的强大能力
- Amazon的API描述语言Smithy概述
- 向日葵开放平台:如何让远程办公和支持变得轻而易举?
- 常见的api认证方式:应用场景与优势
- Deribit API – 入门指南
- AI推理(Reasoning AI)技术趋势2025:从大模型到智能体的全面升级
- Dify 全链路实战:三步搭建智能天气查询机器人(Agent+DeepSeek + 高德天气)
- 2025年GitHub开源生成式 AI API 项目盘点:Open WebUI、FastAPI LLM Server、Text Generation WebUI API