接入认证骨架
本页负责在后端骨架上加入最小认证与授权链路,让后续前端联调和后台接口保护有一个明确起点。当前用一个简单的请求头认证处理器完成最小闭环,目的是固定挂载位置,而不是一次性把完整登录流程写完。
这篇教程解决什么
- 认证授权该从哪一层接入。
- 受保护接口最小应该长什么样。
- 如何用最小方式验证认证链已经生效。
前置条件
- 已完成 接入数据访问骨架。
- 已能访问公开接口
/api/demo/hello。
配套代码
- 当前样例:backend-starter
- 当前关注文件:HeaderTokenAuthHandler.cs
- 当前关注文件:Program.cs
- 当前关注文件:appsettings.json
我们要做的事
- 增加最小认证处理器。
- 在宿主里挂上认证与授权中间件。
- 增加一个受保护接口做最小验证。
操作步骤
- 新增一个简单的 Header 认证处理器,约定安全头为
X-Demo-Token。
public sealed class HeaderTokenAuthHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public const string SchemeName = "BackendStarterHeader";
public const string HeaderName = "X-Demo-Token";
...
}
- 在
appsettings.json中写入演示 token:
{
"DemoAuth": {
"Token": "tutorial-token"
}
}
- 在宿主里注册认证和授权:
builder.Services.AddAuthentication(HeaderTokenAuthHandler.SchemeName)
.AddScheme<AuthenticationSchemeOptions, HeaderTokenAuthHandler>(HeaderTokenAuthHandler.SchemeName, _ => { });
builder.Services.AddAuthorization();
- 在请求管道中启用它们:
app.UseAuthentication();
app.UseAuthorization();
- 在控制器里增加一个受保护接口:
[Authorize(AuthenticationSchemes = HeaderTokenAuthHandler.SchemeName)]
[HttpGet("secure")]
public IActionResult GetSecureHello()
{
return Ok(...);
}
- 先在没有请求头的情况下访问:
curl -i http://localhost:5000/api/demo/secure
- 再带着正确的请求头访问:
curl -i \
-H "X-Demo-Token: tutorial-token" \
http://localhost:5000/api/demo/secure
验证结果
- 不带
X-Demo-Token调用/api/demo/secure时会被拒绝。 - 带上
X-Demo-Token: tutorial-token后可以正常返回数据。 - 认证和授权已经有了明确接入位置,后续可继续替换成项目真实方案。