Skip to content

Commit 17590d3

Browse files
authored
Add | Add Workload Identity Support (#2159)
1 parent 4319661 commit 17590d3

20 files changed

+185
-25
lines changed

doc/snippets/Microsoft.Data.SqlClient/SqlAuthenticationMethod.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,9 @@
4545
<summary>The authentication method uses Active Directory Default. Use this mode to connect to a SQL Database using multiple non-interactive authentication methods tried sequentially to acquire an access token. This method does not fallback to the "Active Directory Interactive" authentication method.</summary>
4646
<value>9</value>
4747
</ActiveDirectoryDefault>
48+
<ActiveDirectoryWorkloadIdentity>
49+
<summary>The authentication method uses Active Directory Workload Identity. Use a federated User Assigned Managed Identity to connect to SQL Database from Azure client environments that have enabled support for Workload Identity. The 'User Id' or 'UID' is required to be set to the "client ID" of the user identity.</summary>
50+
<value>10</value>
51+
</ActiveDirectoryWorkloadIdentity>
4852
</members>
4953
</docs>

src/Microsoft.Data.SqlClient.sln

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ EndProject
1111
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TDS.Servers", "Microsoft.Data.SqlClient\tests\tools\TDS\TDS.Servers\TDS.Servers.csproj", "{978063D3-FBB5-4E10-8C45-67C90BE1B931}"
1212
EndProject
1313
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TDS", "Microsoft.Data.SqlClient\tests\tools\TDS\TDS\TDS.csproj", "{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}"
14-
ProjectSection(ProjectDependencies) = postProject
15-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC} = {FDA6971D-9F57-4DA4-B10A-261C91684CFC}
16-
EndProjectSection
1714
EndProject
1815
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient.Tests", "Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj", "{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}"
1916
ProjectSection(ProjectDependencies) = postProject
@@ -28,7 +25,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "netfx", "netfx", "{3FDD425C
2825
EndProject
2926
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Address", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Address\Address.csproj", "{D1392B54-998A-4F27-BC17-4CE149117BCC}"
3027
ProjectSection(ProjectDependencies) = postProject
31-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC} = {FDA6971D-9F57-4DA4-B10A-261C91684CFC}
3228
{37431336-5307-4184-9356-C4B7E47DC714} = {37431336-5307-4184-9356-C4B7E47DC714}
3329
{407890AC-9876-4FEF-A6F1-F36A876BAADE} = {407890AC-9876-4FEF-A6F1-F36A876BAADE}
3430
EndProjectSection
@@ -40,13 +36,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient.Ma
4036
EndProject
4137
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Circle", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Circle\Circle.csproj", "{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}"
4238
ProjectSection(ProjectDependencies) = postProject
43-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC} = {FDA6971D-9F57-4DA4-B10A-261C91684CFC}
4439
{37431336-5307-4184-9356-C4B7E47DC714} = {37431336-5307-4184-9356-C4B7E47DC714}
4540
EndProjectSection
4641
EndProject
4742
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shapes", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Shapes\Shapes.csproj", "{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}"
4843
ProjectSection(ProjectDependencies) = postProject
49-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC} = {FDA6971D-9F57-4DA4-B10A-261C91684CFC}
5044
{37431336-5307-4184-9356-C4B7E47DC714} = {37431336-5307-4184-9356-C4B7E47DC714}
5145
EndProjectSection
5246
EndProject
@@ -384,18 +378,6 @@ Global
384378
{9073ABEF-92E0-4702-BB23-2C99CEF9BDD7}.Release|x64.Build.0 = Release|Any CPU
385379
{9073ABEF-92E0-4702-BB23-2C99CEF9BDD7}.Release|x86.ActiveCfg = Release|Any CPU
386380
{9073ABEF-92E0-4702-BB23-2C99CEF9BDD7}.Release|x86.Build.0 = Release|Any CPU
387-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
388-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
389-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Debug|x64.ActiveCfg = Debug|Any CPU
390-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Debug|x64.Build.0 = Debug|Any CPU
391-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Debug|x86.ActiveCfg = Debug|Any CPU
392-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Debug|x86.Build.0 = Debug|Any CPU
393-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
394-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Release|Any CPU.Build.0 = Release|Any CPU
395-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Release|x64.ActiveCfg = Release|Any CPU
396-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Release|x64.Build.0 = Release|Any CPU
397-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Release|x86.ActiveCfg = Release|Any CPU
398-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC}.Release|x86.Build.0 = Release|Any CPU
399381
{F5DF2FDC-C860-4CB3-8B24-7C903C6FC076}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
400382
{F5DF2FDC-C860-4CB3-8B24-7C903C6FC076}.Debug|x64.ActiveCfg = Debug|Any CPU
401383
{F5DF2FDC-C860-4CB3-8B24-7C903C6FC076}.Debug|x64.Build.0 = Debug|Any CPU
@@ -511,7 +493,6 @@ Global
511493
{771F3F1E-7A68-4A9D-ADA8-A24F1D5BE71D} = {3FDD425C-FE01-4B56-863E-1FCDD0677CF5}
512494
{412BCCC8-19F6-489A-B594-E9A506816155} = {771F3F1E-7A68-4A9D-ADA8-A24F1D5BE71D}
513495
{9073ABEF-92E0-4702-BB23-2C99CEF9BDD7} = {C9726AED-D6A3-4AAC-BA04-92DD1F079594}
514-
{FDA6971D-9F57-4DA4-B10A-261C91684CFC} = {0CC4817A-12F3-4357-912C-09315FAAD008}
515496
{71F356DC-DFA3-4163-8BFE-D268722CE189} = {ED952CF7-84DF-437A-B066-F516E9BE1C2C}
516497
{908C7DD3-C999-40A6-9433-9F5ACA7C36F5} = {71F356DC-DFA3-4163-8BFE-D268722CE189}
517498
{0CE216CE-8072-4985-B248-61F0D0BE9C2E} = {71F356DC-DFA3-4163-8BFE-D268722CE189}

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlAuthenticationProviderManager.NetCoreApp.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ private static SqlAuthenticationMethod AuthenticationEnumFromString(string authe
153153
return SqlAuthenticationMethod.ActiveDirectoryMSI;
154154
case ActiveDirectoryDefault:
155155
return SqlAuthenticationMethod.ActiveDirectoryDefault;
156+
case ActiveDirectoryWorkloadIdentity:
157+
return SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity;
156158
default:
157159
throw SQL.UnsupportedAuthentication(authentication);
158160
}

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlAuthenticationProviderManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ internal partial class SqlAuthenticationProviderManager
2020
private const string ActiveDirectoryManagedIdentity = "active directory managed identity";
2121
private const string ActiveDirectoryMSI = "active directory msi";
2222
private const string ActiveDirectoryDefault = "active directory default";
23+
private const string ActiveDirectoryWorkloadIdentity = "active directory workload identity";
2324

2425
private readonly IReadOnlyCollection<SqlAuthenticationMethod> _authenticationsWithAppSpecifiedProvider;
2526
private readonly ConcurrentDictionary<SqlAuthenticationMethod, SqlAuthenticationProvider> _providers;
@@ -45,6 +46,7 @@ private static void SetDefaultAuthProviders(SqlAuthenticationProviderManager ins
4546
instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryManagedIdentity, activeDirectoryAuthProvider);
4647
instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryMSI, activeDirectoryAuthProvider);
4748
instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryDefault, activeDirectoryAuthProvider);
49+
instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity, activeDirectoryAuthProvider);
4850
}
4951
}
5052
/// <summary>

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,10 @@ public SqlConnection(string connectionString, SqlCredential credential) : this()
202202
{
203203
throw SQL.SettingCredentialWithNonInteractiveArgument(DbConnectionStringBuilderUtil.ActiveDirectoryDefaultString);
204204
}
205+
else if (UsesActiveDirectoryWorkloadIdentity(connectionOptions))
206+
{
207+
throw SQL.SettingCredentialWithNonInteractiveArgument(DbConnectionStringBuilderUtil.ActiveDirectoryWorkloadIdentityString);
208+
}
205209

206210
Credential = credential;
207211
}
@@ -530,6 +534,11 @@ private bool UsesActiveDirectoryDefault(SqlConnectionString opt)
530534
return opt != null && opt.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault;
531535
}
532536

537+
private bool UsesActiveDirectoryWorkloadIdentity(SqlConnectionString opt)
538+
{
539+
return opt != null && opt.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity;
540+
}
541+
533542
private bool UsesAuthentication(SqlConnectionString opt)
534543
{
535544
return opt != null && opt.Authentication != SqlAuthenticationMethod.NotSpecified;
@@ -619,6 +628,10 @@ public override string ConnectionString
619628
{
620629
throw SQL.SettingNonInteractiveWithCredential(DbConnectionStringBuilderUtil.ActiveDirectoryDefaultString);
621630
}
631+
else if (UsesActiveDirectoryWorkloadIdentity(connectionOptions))
632+
{
633+
throw SQL.SettingNonInteractiveWithCredential(DbConnectionStringBuilderUtil.ActiveDirectoryWorkloadIdentityString);
634+
}
622635

623636
CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential(connectionOptions);
624637
}
@@ -999,6 +1012,10 @@ public SqlCredential Credential
9991012
{
10001013
throw SQL.SettingCredentialWithNonInteractiveInvalid(DbConnectionStringBuilderUtil.ActiveDirectoryDefaultString);
10011014
}
1015+
else if (UsesActiveDirectoryWorkloadIdentity(connectionOptions))
1016+
{
1017+
throw SQL.SettingCredentialWithNonInteractiveInvalid(DbConnectionStringBuilderUtil.ActiveDirectoryWorkloadIdentityString);
1018+
}
10021019

10031020
CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential(connectionOptions);
10041021

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,7 @@ private void Login(ServerInfo server, TimeoutTimer timeout, string newPassword,
13301330
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryManagedIdentity
13311331
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryMSI
13321332
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault
1333+
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity
13331334
// Since AD Integrated may be acting like Windows integrated, additionally check _fedAuthRequired
13341335
|| (ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated && _fedAuthRequired)
13351336
|| _accessTokenCallback != null)
@@ -2159,6 +2160,7 @@ internal void OnFedAuthInfo(SqlFedAuthInfo fedAuthInfo)
21592160
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryManagedIdentity
21602161
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryMSI
21612162
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault
2163+
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity
21622164
|| (ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated && _fedAuthRequired),
21632165
"Credentials aren't provided for calling MSAL");
21642166
Debug.Assert(fedAuthInfo != null, "info should not be null.");
@@ -2406,6 +2408,7 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
24062408
case SqlAuthenticationMethod.ActiveDirectoryManagedIdentity:
24072409
case SqlAuthenticationMethod.ActiveDirectoryMSI:
24082410
case SqlAuthenticationMethod.ActiveDirectoryDefault:
2411+
case SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity:
24092412
if (_activeDirectoryAuthTimeoutRetryHelper.State == ActiveDirectoryAuthenticationTimeoutRetryState.Retrying)
24102413
{
24112414
_fedAuthToken = _activeDirectoryAuthTimeoutRetryHelper.CachedToken;

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7973,6 +7973,9 @@ internal int WriteFedAuthFeatureRequest(FederatedAuthenticationFeatureExtensionD
79737973
case SqlAuthenticationMethod.ActiveDirectoryDefault:
79747974
workflow = TdsEnums.MSALWORKFLOW_ACTIVEDIRECTORYDEFAULT;
79757975
break;
7976+
case SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity:
7977+
workflow = TdsEnums.MSALWORKFLOW_ACTIVEDIRECTORYWORKLOADIDENTITY;
7978+
break;
79767979
default:
79777980
if (_connHandler._accessTokenCallback != null)
79787981
{

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlAuthenticationProviderManager.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ internal class SqlAuthenticationProviderManager
2222
private const string ActiveDirectoryManagedIdentity = "active directory managed identity";
2323
private const string ActiveDirectoryMSI = "active directory msi";
2424
private const string ActiveDirectoryDefault = "active directory default";
25+
private const string ActiveDirectoryWorkloadIdentity = "active directory workload identity";
2526

2627
static SqlAuthenticationProviderManager()
2728
{
@@ -52,6 +53,7 @@ static SqlAuthenticationProviderManager()
5253
Instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryManagedIdentity, activeDirectoryAuthProvider);
5354
Instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryMSI, activeDirectoryAuthProvider);
5455
Instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryDefault, activeDirectoryAuthProvider);
56+
Instance.SetProvider(SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity, activeDirectoryAuthProvider);
5557
}
5658
public static readonly SqlAuthenticationProviderManager Instance;
5759

@@ -231,6 +233,8 @@ private static SqlAuthenticationMethod AuthenticationEnumFromString(string authe
231233
return SqlAuthenticationMethod.ActiveDirectoryMSI;
232234
case ActiveDirectoryDefault:
233235
return SqlAuthenticationMethod.ActiveDirectoryDefault;
236+
case ActiveDirectoryWorkloadIdentity:
237+
return SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity;
234238
default:
235239
throw SQL.UnsupportedAuthentication(authentication);
236240
}

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,11 @@ public SqlConnection(string connectionString, SqlCredential credential) : this()
405405
throw SQL.SettingCredentialWithNonInteractiveArgument(DbConnectionStringBuilderUtil.ActiveDirectoryDefaultString);
406406
}
407407

408+
if (UsesActiveDirectoryWorkloadIdentity(connectionOptions))
409+
{
410+
throw SQL.SettingCredentialWithNonInteractiveArgument(DbConnectionStringBuilderUtil.ActiveDirectoryWorkloadIdentityString);
411+
}
412+
408413
Credential = credential;
409414
}
410415
// else
@@ -627,6 +632,11 @@ private bool UsesActiveDirectoryDefault(SqlConnectionString opt)
627632
return opt != null && opt.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault;
628633
}
629634

635+
private bool UsesActiveDirectoryWorkloadIdentity(SqlConnectionString opt)
636+
{
637+
return opt != null && opt.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity;
638+
}
639+
630640
private bool UsesAuthentication(SqlConnectionString opt)
631641
{
632642
return opt != null && opt.Authentication != SqlAuthenticationMethod.NotSpecified;
@@ -834,6 +844,10 @@ override public string ConnectionString
834844
{
835845
throw SQL.SettingNonInteractiveWithCredential(DbConnectionStringBuilderUtil.ActiveDirectoryDefaultString);
836846
}
847+
else if (UsesActiveDirectoryWorkloadIdentity(connectionOptions))
848+
{
849+
throw SQL.SettingNonInteractiveWithCredential(DbConnectionStringBuilderUtil.ActiveDirectoryWorkloadIdentityString);
850+
}
837851

838852
CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential(connectionOptions);
839853
}
@@ -1183,6 +1197,10 @@ public SqlCredential Credential
11831197
{
11841198
throw SQL.SettingCredentialWithNonInteractiveInvalid(DbConnectionStringBuilderUtil.ActiveDirectoryDefaultString);
11851199
}
1200+
else if (UsesActiveDirectoryWorkloadIdentity(connectionOptions))
1201+
{
1202+
throw SQL.SettingCredentialWithNonInteractiveInvalid(DbConnectionStringBuilderUtil.ActiveDirectoryWorkloadIdentityString);
1203+
}
11861204

11871205
CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential(connectionOptions);
11881206

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1595,6 +1595,7 @@ private void Login(ServerInfo server, TimeoutTimer timeout, string newPassword,
15951595
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryManagedIdentity
15961596
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryMSI
15971597
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault
1598+
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity
15981599
// Since AD Integrated may be acting like Windows integrated, additionally check _fedAuthRequired
15991600
|| (ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated && _fedAuthRequired)
16001601
|| _accessTokenCallback != null)
@@ -1991,7 +1992,8 @@ private bool ShouldDisableTnir(SqlConnectionString connectionOptions)
19911992
connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDeviceCodeFlow ||
19921993
connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryManagedIdentity ||
19931994
connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryMSI ||
1994-
connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault;
1995+
connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault ||
1996+
connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity;
19951997

19961998
// Check if the user had explicitly specified the TNIR option in the connection string or the connection string builder.
19971999
// If the user has specified the option in the connection string explicitly, then we shouldn't disable TNIR.
@@ -2585,6 +2587,7 @@ internal void OnFedAuthInfo(SqlFedAuthInfo fedAuthInfo)
25852587
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryManagedIdentity
25862588
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryMSI
25872589
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDefault
2590+
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity
25882591
|| ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryDeviceCodeFlow
25892592
|| (ConnectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated && _fedAuthRequired),
25902593
"Credentials aren't provided for calling MSAL");
@@ -2820,6 +2823,7 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
28202823
case SqlAuthenticationMethod.ActiveDirectoryManagedIdentity:
28212824
case SqlAuthenticationMethod.ActiveDirectoryMSI:
28222825
case SqlAuthenticationMethod.ActiveDirectoryDefault:
2826+
case SqlAuthenticationMethod.ActiveDirectoryWorkloadIdentity:
28232827
if (_activeDirectoryAuthTimeoutRetryHelper.State == ActiveDirectoryAuthenticationTimeoutRetryState.Retrying)
28242828
{
28252829
_fedAuthToken = _activeDirectoryAuthTimeoutRetryHelper.CachedToken;

0 commit comments

Comments
 (0)