Skip to content

Commit 2444884

Browse files
authored
Merge pull request #108 from acjh/patch-6
Add swagger security definitions and requirements
2 parents 61c5979 + 09583d1 commit 2444884

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using Abp.Authorization;
2+
using Microsoft.AspNetCore.Authorization;
3+
using Microsoft.Extensions.Options;
4+
using Swashbuckle.AspNetCore.Swagger;
5+
using Swashbuckle.AspNetCore.SwaggerGen;
6+
using System.Collections.Generic;
7+
using System.Linq;
8+
9+
namespace AbpCompanyName.AbpProjectName.Web.Host.Startup
10+
{
11+
public class SecurityRequirementsOperationFilter : IOperationFilter
12+
{
13+
private readonly IOptions<AuthorizationOptions> authorizationOptions;
14+
15+
public SecurityRequirementsOperationFilter(IOptions<AuthorizationOptions> authorizationOptions)
16+
{
17+
this.authorizationOptions = authorizationOptions;
18+
}
19+
20+
public void Apply(Operation operation, OperationFilterContext context)
21+
{
22+
var controllerPermissions = context.ApiDescription.ControllerAttributes()
23+
.OfType<AbpAuthorizeAttribute>()
24+
.Select(attr => attr.Permissions);
25+
26+
var actionPermissions = context.ApiDescription.ActionAttributes()
27+
.OfType<AbpAuthorizeAttribute>()
28+
.Select(attr => attr.Permissions);
29+
30+
var permissions = controllerPermissions.Union(actionPermissions).Distinct()
31+
.SelectMany(p => p);
32+
33+
if (permissions.Any())
34+
{
35+
operation.Responses.Add("401", new Response { Description = "Unauthorized" });
36+
operation.Responses.Add("403", new Response { Description = "Forbidden" });
37+
38+
operation.Security = new List<IDictionary<string, IEnumerable<string>>>
39+
{
40+
new Dictionary<string, IEnumerable<string>>
41+
{
42+
{ "bearerAuth", permissions }
43+
}
44+
};
45+
}
46+
}
47+
}
48+
}

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Host/Startup/Startup.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
6464
{
6565
options.SwaggerDoc("v1", new Info { Title = "AbpProjectName API", Version = "v1" });
6666
options.DocInclusionPredicate((docName, description) => true);
67+
68+
// Define the BearerAuth scheme that's in use
69+
options.AddSecurityDefinition("bearerAuth", new ApiKeyScheme()
70+
{
71+
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
72+
Name = "Authorization",
73+
In = "header",
74+
Type = "apiKey"
75+
});
76+
// Assign scope requirements to operations based on AuthorizeAttribute
77+
options.OperationFilter<SecurityRequirementsOperationFilter>();
6778
});
6879

6980
//Configure Abp and Dependency Injection

0 commit comments

Comments
 (0)