22using Microsoft . Extensions . Configuration ;
33using Microsoft . Extensions . DependencyInjection ;
44using Microsoft . Net . Http . Headers ;
5- using Microsoft . OpenApi . Models ;
5+ using Microsoft . OpenApi ;
66using SimpleAuthentication . ApiKey ;
77using SimpleAuthentication . BasicAuthentication ;
88using SimpleAuthentication . JwtBearer ;
@@ -25,7 +25,7 @@ public static class SwaggerExtensions
2525 /// <seealso cref="SwaggerGenOptions"/>
2626 /// <seealso cref="IConfiguration"/>
2727 public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , string sectionName = "Authentication" )
28- => options . AddSimpleAuthentication ( configuration , sectionName , Array . Empty < OpenApiSecurityRequirement > ( ) ) ;
28+ => options . AddSimpleAuthentication ( configuration , sectionName , [ ] , [ ] ) ;
2929
3030 /// <summary>
3131 /// Adds authentication support in Swagger, enabling the Authorize button in the Swagger UI, reading configuration from a section named <strong>Authentication</strong> in <see cref="IConfiguration"/> source.
@@ -35,7 +35,7 @@ public static void AddSimpleAuthentication(this SwaggerGenOptions options, IConf
3535 /// <param name="additionalSecurityDefinitionNames">The name of additional security definitions that have been defined in Swagger.</param>
3636 /// <seealso cref="SwaggerGenOptions"/>
3737 /// <seealso cref="IConfiguration"/>
38- public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , IEnumerable < string > ? additionalSecurityDefinitionNames )
38+ public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , params IEnumerable < string > additionalSecurityDefinitionNames )
3939 => options . AddSimpleAuthentication ( configuration , "Authentication" , additionalSecurityDefinitionNames ) ;
4040
4141 /// <summary>
@@ -47,11 +47,7 @@ public static void AddSimpleAuthentication(this SwaggerGenOptions options, IConf
4747 /// <param name="additionalSecurityDefinitionNames">The name of additional security definitions that have been defined in Swagger.</param>
4848 /// <seealso cref="SwaggerGenOptions"/>
4949 /// <seealso cref="IConfiguration"/>
50- public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , string sectionName , IEnumerable < string > ? additionalSecurityDefinitionNames )
51- {
52- var securityRequirements = additionalSecurityDefinitionNames ? . Select ( OpenApiHelpers . CreateSecurityRequirement ) . ToArray ( ) ;
53- options . AddSimpleAuthentication ( configuration , sectionName , securityRequirements ?? [ ] ) ;
54- }
50+ public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , string sectionName , params IEnumerable < string > additionalSecurityDefinitionNames ) => options . AddSimpleAuthentication ( configuration , sectionName , [ ] , additionalSecurityDefinitionNames ) ;
5551
5652 /// <summary>
5753 /// Adds authentication support in Swagger, enabling the Authorize button in the Swagger UI, reading configuration from the specified <see cref="IConfiguration"/> source.
@@ -61,8 +57,8 @@ public static void AddSimpleAuthentication(this SwaggerGenOptions options, IConf
6157 /// <param name="securityRequirements">Additional security requirements to be added to Swagger definition.</param>
6258 /// <seealso cref="SwaggerGenOptions"/>
6359 /// <seealso cref="IConfiguration"/>
64- public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , params OpenApiSecurityRequirement [ ] securityRequirements )
65- => options . AddSimpleAuthentication ( configuration , "Authentication" , securityRequirements ) ;
60+ public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , params IEnumerable < OpenApiSecurityRequirement > securityRequirements )
61+ => options . AddSimpleAuthentication ( configuration , "Authentication" , securityRequirements , [ ] ) ;
6662
6763 /// <summary>
6864 /// Adds authentication support in Swagger, enabling the Authorize button in the Swagger UI, reading configuration from the specified <see cref="IConfiguration"/> source.
@@ -71,9 +67,10 @@ public static void AddSimpleAuthentication(this SwaggerGenOptions options, IConf
7167 /// <param name="configuration">The <see cref="IConfiguration"/> being bound.</param>
7268 /// <param name="sectionName">The name of the configuration section that holds authentication settings (default: Authentication).</param>
7369 /// <param name="additionalSecurityRequirements">Additional security requirements to be added to Swagger definition.</param>
70+ /// <param name="additionalSecurityDefinitionNames">The name of additional security definitions that have been defined in OpenAPI.</param>
7471 /// <seealso cref="SwaggerGenOptions"/>
7572 /// <seealso cref="IConfiguration"/>
76- public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , string sectionName , params OpenApiSecurityRequirement [ ] additionalSecurityRequirements )
73+ public static void AddSimpleAuthentication ( this SwaggerGenOptions options , IConfiguration configuration , string sectionName , IEnumerable < OpenApiSecurityRequirement > additionalSecurityRequirements , IEnumerable < string > additionalSecurityDefinitionNames )
7774 {
7875 ArgumentNullException . ThrowIfNull ( options ) ;
7976 ArgumentNullException . ThrowIfNull ( configuration ) ;
@@ -84,12 +81,21 @@ public static void AddSimpleAuthentication(this SwaggerGenOptions options, IConf
8481 CheckAddApiKey ( options , configuration . GetSection ( $ "{ sectionName } :ApiKey") ) ;
8582 CheckAddBasicAuthentication ( options , configuration . GetSection ( $ "{ sectionName } :Basic") ) ;
8683
87- if ( additionalSecurityRequirements ? . Any ( ) ?? false )
84+ if ( additionalSecurityRequirements ? . Any ( ) == true )
8885 {
8986 // Adds all the other security requirements that have been specified.
9087 foreach ( var securityRequirement in additionalSecurityRequirements )
9188 {
92- options . AddSecurityRequirement ( securityRequirement ) ;
89+ AddSecurityRequirement ( options , securityRequirement ) ;
90+ }
91+ }
92+
93+ if ( additionalSecurityDefinitionNames ? . Any ( ) == true )
94+ {
95+ // Adds all the other security definitions that have been specified.
96+ foreach ( var definitionName in additionalSecurityDefinitionNames )
97+ {
98+ AddSecurityRequirement ( options , definitionName ) ;
9399 }
94100 }
95101
@@ -146,7 +152,7 @@ static void CheckAddBasicAuthentication(SwaggerGenOptions options, IConfiguratio
146152 }
147153
148154 static void AddSecurityDefinition ( SwaggerGenOptions options , string name , SecuritySchemeType securitySchemeType , string ? scheme , ParameterLocation location , string parameterName , string description )
149- => options . AddSecurityDefinition ( name , new ( )
155+ => options . AddSecurityDefinition ( name , new OpenApiSecurityScheme ( )
150156 {
151157 In = location ,
152158 Name = parameterName ,
@@ -195,7 +201,7 @@ public static void AddOAuth2Authentication(this SwaggerGenOptions options, strin
195201 ArgumentException . ThrowIfNullOrWhiteSpace ( name ) ;
196202 ArgumentNullException . ThrowIfNull ( authFlow ) ;
197203
198- options . AddSecurityDefinition ( name , new ( )
204+ options . AddSecurityDefinition ( name , new OpenApiSecurityScheme ( )
199205 {
200206 Type = SecuritySchemeType . OAuth2 ,
201207 Flows = new ( )
@@ -207,6 +213,9 @@ public static void AddOAuth2Authentication(this SwaggerGenOptions options, strin
207213 AddSecurityRequirement ( options , name ) ;
208214 }
209215
216+ private static void AddSecurityRequirement ( SwaggerGenOptions options , OpenApiSecurityRequirement requirement )
217+ => options . AddSecurityRequirement ( _ => requirement ) ;
218+
210219 private static void AddSecurityRequirement ( SwaggerGenOptions options , string name )
211- => options . AddSecurityRequirement ( OpenApiHelpers . CreateSecurityRequirement ( name ) ) ;
220+ => options . AddSecurityRequirement ( document => OpenApiHelpers . CreateSecurityRequirement ( name , document ) ) ;
212221}
0 commit comments