Skip to content
This repository was archived by the owner on Nov 11, 2025. It is now read-only.

Commit 8637a83

Browse files
Copilotbaywet
andcommitted
Add Deprecated property to SecurityScheme with serialization/deserialization
Co-authored-by: baywet <[email protected]>
1 parent 4cb0347 commit 8637a83

File tree

6 files changed

+76
-2
lines changed

6 files changed

+76
-2
lines changed

src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSecurityScheme.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,10 @@ public interface IOpenApiSecurityScheme : IOpenApiDescribedElement, IOpenApiRead
4545
/// REQUIRED. OpenId Connect URL to discover OAuth2 configuration values.
4646
/// </summary>
4747
public Uri? OpenIdConnectUrl { get; }
48+
49+
/// <summary>
50+
/// Specifies that a security scheme is deprecated and SHOULD be transitioned out of usage.
51+
/// Note: This field is supported in OpenAPI 3.2.0+. For earlier versions, it will be serialized as x-oai-deprecated extension.
52+
/// </summary>
53+
public bool Deprecated { get; }
4854
}

src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public class OpenApiSecurityScheme : IOpenApiExtensible, IOpenApiSecurityScheme
3535
/// <inheritdoc/>
3636
public Uri? OpenIdConnectUrl { get; set; }
3737

38+
/// <inheritdoc/>
39+
public bool Deprecated { get; set; }
40+
3841
/// <inheritdoc/>
3942
public IDictionary<string, IOpenApiExtension>? Extensions { get; set; }
4043

@@ -57,6 +60,7 @@ internal OpenApiSecurityScheme(IOpenApiSecurityScheme securityScheme)
5760
BearerFormat = securityScheme.BearerFormat ?? BearerFormat;
5861
Flows = securityScheme.Flows != null ? new(securityScheme.Flows) : null;
5962
OpenIdConnectUrl = securityScheme.OpenIdConnectUrl != null ? new Uri(securityScheme.OpenIdConnectUrl.OriginalString, UriKind.RelativeOrAbsolute) : null;
63+
Deprecated = securityScheme.Deprecated;
6064
Extensions = securityScheme.Extensions != null ? new Dictionary<string, IOpenApiExtension>(securityScheme.Extensions) : null;
6165
}
6266
/// <summary>
@@ -124,6 +128,19 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
124128
break;
125129
}
126130

131+
// deprecated - serialize as native field for v3.2+ or as extension for earlier versions
132+
if (Deprecated)
133+
{
134+
if (version >= OpenApiSpecVersion.OpenApi3_2)
135+
{
136+
writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
137+
}
138+
else
139+
{
140+
writer.WriteProperty("x-oai-deprecated", Deprecated, false);
141+
}
142+
}
143+
127144
// extensions
128145
writer.WriteExtensions(Extensions, version);
129146

src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ public string? Description
6060
/// <inheritdoc/>
6161
public SecuritySchemeType? Type { get => Target?.Type; }
6262

63+
/// <inheritdoc/>
64+
public bool Deprecated { get => Target?.Deprecated ?? default; }
65+
6366
/// <inheritdoc/>
6467
public override IOpenApiSecurityScheme CopyReferenceAsTargetElementWithOverrides(IOpenApiSecurityScheme source)
6568
{

src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,21 @@ internal static partial class OpenApiV3Deserializer
7272
private static readonly PatternFieldMap<OpenApiSecurityScheme> _securitySchemePatternFields =
7373
new()
7474
{
75-
{s => s.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}
75+
{s => s.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase), (o, p, n, _) =>
76+
{
77+
if (p.Equals("x-oai-deprecated", StringComparison.OrdinalIgnoreCase))
78+
{
79+
var deprecated = n.GetScalarValue();
80+
if (deprecated != null)
81+
{
82+
o.Deprecated = bool.Parse(deprecated);
83+
}
84+
}
85+
else
86+
{
87+
o.AddExtension(p, LoadExtension(p,n));
88+
}
89+
}}
7690
};
7791

7892
public static IOpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)

src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,37 @@ internal static partial class OpenApiV31Deserializer
7373
{
7474
o.Flows = LoadOAuthFlows(n, t);
7575
}
76+
},
77+
{
78+
"deprecated", (o, n, _) =>
79+
{
80+
var deprecated = n.GetScalarValue();
81+
if (deprecated != null)
82+
{
83+
o.Deprecated = bool.Parse(deprecated);
84+
}
85+
}
7686
}
7787
};
7888

7989
private static readonly PatternFieldMap<OpenApiSecurityScheme> _securitySchemePatternFields =
8090
new()
8191
{
82-
{s => s.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}
92+
{s => s.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase), (o, p, n, _) =>
93+
{
94+
if (p.Equals("x-oai-deprecated", StringComparison.OrdinalIgnoreCase))
95+
{
96+
var deprecated = n.GetScalarValue();
97+
if (deprecated != null)
98+
{
99+
o.Deprecated = bool.Parse(deprecated);
100+
}
101+
}
102+
else
103+
{
104+
o.AddExtension(p, LoadExtension(p,n));
105+
}
106+
}}
83107
};
84108

85109
public static IOpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)

src/Microsoft.OpenApi/Reader/V32/OpenApiSecuritySchemeDeserializer.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ internal static partial class OpenApiV32Deserializer
7373
{
7474
o.Flows = LoadOAuthFlows(n, t);
7575
}
76+
},
77+
{
78+
"deprecated", (o, n, _) =>
79+
{
80+
var deprecated = n.GetScalarValue();
81+
if (deprecated != null)
82+
{
83+
o.Deprecated = bool.Parse(deprecated);
84+
}
85+
}
7686
}
7787
};
7888

0 commit comments

Comments
 (0)