悠悠楠杉
Asp.NetCore开发笔记:给SwaggerUI加上登录保护功能
Asp.Net Core开发笔记:给SwaggerUI加上登录保护功能
在Asp.Net Core项目中,Swagger作为一个流行的API文档和测试工具,极大地提高了开发效率和API的可用性。然而,默认情况下,Swagger UI是完全公开的,这可能导致敏感API的泄露和滥用。为了解决这个问题,我们可以为Swagger UI添加登录保护功能,确保只有经过认证的用户才能访问。
1. 安装必要的NuGet包
首先,确保你的项目中已经安装了Swashbuckle.AspNetCore
包。如果没有安装,可以通过NuGet包管理器进行安装:
bash
Install-Package Swashbuckle.AspNetCore
2. 配置Swagger以使用OAuth2
为了给Swagger UI添加登录保护,我们需要配置OAuth2支持。这通常涉及到几个步骤:配置OAuth2参数、修改Startup.cs文件以启用OAuth安全定义,并设置授权。
2.1 配置OAuth2参数
在appsettings.json
中添加以下配置:
json
"Swagger": {
"OAuth2ClientId": "your-client-id",
"OAuth2ClientSecret": "your-client-secret",
"OAuth2AppName": "Your App Name",
"OAuth2ScopeDescriptions": [ "read:pets", "write:pets" ]
}
2.2 修改Startup.cs以启用OAuth安全定义
在Startup.cs
中,配置Swagger以使用OAuth2:
csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme()
{
Description = "Standard OAuth2 implicit grant flows",
Flows = new OpenApiSecurityFlows()
{
Implicit = new OpenApiSecurityFlow()
{
AuthorizationUrl = new Uri($"{Configuration["AuthSettings:AuthorizationUrl"]}/connect/authorize"),
Scopes = new Dictionary<string, string> { { "read:pets", "Read access to pets" }, { "write:pets", "Write access to pets" } }
}
},
Type = SecuritySchemeType.OAuth2, // 设定为 OAuth2 类型安全定义。
Name = "Bearer", // 使用Bearer token类型。
In = ParameterIn.Header, // 指定在请求头中传递。
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement() { { new OpenApiSecurityScheme() { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "oauth2" } }, new List<string> { "read:pets", "write:pets" } } }); // 设置必须使用安全定义的安全要求。
});
}
2.3 配置授权中间件和控制器权限设置(可选)
为了在应用中实现更精细的访问控制,你可能需要为API控制器或特定的API操作设置权限:
```csharp
[Authorize(AuthenticationSchemes = "Bearer")] // 确保只有授权的用户才能访问该控制器。
public class PetsController : ControllerBase { ... } // 你的控制器代码。 举例中仅对controller添加了权限控制。对于API操作级别的权限控制,可以使用[Authorize(Policy = "yourpolicyname")]。 需要注意的是,在设置好认证和授权策略后,确保API客户端在请求时正确传递了token。这通常在前端代码中通过截获HTTP响应的'authorization' header实现,并设置适当的headers如'Authorization': 'Bearer yourtokenhere'。 总结来说,为Asp.Net Core的Swagger UI添加登录保护功能主要涉及配置OAuth2安全定义、设置授权中间件以及在必要时对控制器或操作进行权限控制。这些步骤确保了只有经过认证的用户能够访问API文档和进行测试。这样既增强了应用的安全性,也提高了API的可用性和可靠性。