Skip to content

Commit ab14305

Browse files
author
trwalke
committed
Revert "Revert "Revert "Removing CDT"""
This reverts commit 2a96823.
1 parent fc79c2a commit ab14305

File tree

6 files changed

+347
-299
lines changed

6 files changed

+347
-299
lines changed

Directory.Packages.props

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
<PackageVersion Include="Microsoft.CodeAnalysis.RulesetToEditorconfigConverter" Version="3.3.3" PrivateAssets="All" />
1313
<PackageVersion Include="Microsoft.CSharp" Version="4.5.0" />
1414
<PackageVersion Include="Microsoft.Identity.Client.NativeInterop" Version="$(MSALRuntimeNativeInteropVersion)" IncludeAssets="all" />
15-
<PackageVersion Include="Microsoft.IdentityModel.Abstractions" Version="6.35.0" />
15+
<PackageVersion Include="Microsoft.IdentityModel.Abstractions" Version="8.1.0" />
16+
<PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.1.0" />
1617
<PackageVersion Include="Microsoft.Web.WebView2" Version="1.0.864.35" />
1718
<PackageVersion Include="System.ComponentModel.TypeConverter" Version="4.3.0" />
1819
<!-- Should match Azure Functions runtime: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/4456 -->
@@ -49,7 +50,7 @@
4950
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="2.2.0" />
5051
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0" />
5152
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
52-
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.35.0" />
53+
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.1.0" />
5354
<PackageVersion Include="Microsoft.IdentityModel.Protocols.SignedHttpRequest" Version="6.35.0" />
5455
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
5556
<PackageVersion Include="MSTest.TestAdapter" Version="3.1.1" />
@@ -71,12 +72,12 @@
7172
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
7273
<PackageVersion Include="System.Reflection.TypeExtensions" Version="4.7.0" />
7374
<PackageVersion Include="System.Security.Cryptography.Cng" Version="5.0.0" />
74-
<PackageVersion Include="System.Text.Json" Version="6.0.5" />
75+
<PackageVersion Include="System.Text.Json" Version="8.0.4" />
7576
<PackageVersion Include="System.Threading" Version="4.3.0" />
7677
<PackageVersion Include="System.Threading.Tasks" Version="4.3.0" />
7778
<PackageVersion Include="System.Threading.Tasks.Parallel" Version="4.3.0" />
7879
<PackageVersion Include="System.Threading.Thread" Version="4.3.0" />
7980
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
8081
<PackageVersion Include="System.Windows.Forms" Version="4.0.0" />
8182
</ItemGroup>
82-
</Project>
83+
</Project>

LibsAndSamples.sln

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CacheExtension", "tests\dev
185185
EndProject
186186
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Identity.Client.Extensions.Msal", "src\client\Microsoft.Identity.Client.Extensions.Msal\Microsoft.Identity.Client.Extensions.Msal.csproj", "{87679336-95BE-47E4-B42B-8F6860A0B215}"
187187
EndProject
188+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MsalCdtExtension", "MsalCdtExtension\MsalCdtExtension.csproj", "{71FFABC1-A20A-48CC-86DD-4D28541F2359}"
189+
EndProject
188190
Global
189191
GlobalSection(SolutionConfigurationPlatforms) = preSolution
190192
Debug + MobileApps|Any CPU = Debug + MobileApps|Any CPU
@@ -1741,6 +1743,48 @@ Global
17411743
{87679336-95BE-47E4-B42B-8F6860A0B215}.Release|x64.Build.0 = Release|Any CPU
17421744
{87679336-95BE-47E4-B42B-8F6860A0B215}.Release|x86.ActiveCfg = Release|Any CPU
17431745
{87679336-95BE-47E4-B42B-8F6860A0B215}.Release|x86.Build.0 = Release|Any CPU
1746+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|Any CPU.ActiveCfg = Debug|Any CPU
1747+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|Any CPU.Build.0 = Debug|Any CPU
1748+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|ARM.ActiveCfg = Debug|Any CPU
1749+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|ARM.Build.0 = Debug|Any CPU
1750+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|ARM64.ActiveCfg = Debug|Any CPU
1751+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|ARM64.Build.0 = Debug|Any CPU
1752+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|iPhone.ActiveCfg = Debug|Any CPU
1753+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|iPhone.Build.0 = Debug|Any CPU
1754+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|iPhoneSimulator.ActiveCfg = Debug|Any CPU
1755+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|iPhoneSimulator.Build.0 = Debug|Any CPU
1756+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|x64.ActiveCfg = Debug|Any CPU
1757+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|x64.Build.0 = Debug|Any CPU
1758+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|x86.ActiveCfg = Debug|Any CPU
1759+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug + MobileApps|x86.Build.0 = Debug|Any CPU
1760+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1761+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|Any CPU.Build.0 = Debug|Any CPU
1762+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|ARM.ActiveCfg = Debug|Any CPU
1763+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|ARM.Build.0 = Debug|Any CPU
1764+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|ARM64.ActiveCfg = Debug|Any CPU
1765+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|ARM64.Build.0 = Debug|Any CPU
1766+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|iPhone.ActiveCfg = Debug|Any CPU
1767+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|iPhone.Build.0 = Debug|Any CPU
1768+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
1769+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
1770+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|x64.ActiveCfg = Debug|Any CPU
1771+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|x64.Build.0 = Debug|Any CPU
1772+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|x86.ActiveCfg = Debug|Any CPU
1773+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Debug|x86.Build.0 = Debug|Any CPU
1774+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|Any CPU.ActiveCfg = Release|Any CPU
1775+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|Any CPU.Build.0 = Release|Any CPU
1776+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|ARM.ActiveCfg = Release|Any CPU
1777+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|ARM.Build.0 = Release|Any CPU
1778+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|ARM64.ActiveCfg = Release|Any CPU
1779+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|ARM64.Build.0 = Release|Any CPU
1780+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|iPhone.ActiveCfg = Release|Any CPU
1781+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|iPhone.Build.0 = Release|Any CPU
1782+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
1783+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
1784+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|x64.ActiveCfg = Release|Any CPU
1785+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|x64.Build.0 = Release|Any CPU
1786+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|x86.ActiveCfg = Release|Any CPU
1787+
{71FFABC1-A20A-48CC-86DD-4D28541F2359}.Release|x86.Build.0 = Release|Any CPU
17441788
EndGlobalSection
17451789
GlobalSection(SolutionProperties) = preSolution
17461790
HideSolutionNode = FALSE
@@ -1793,6 +1837,7 @@ Global
17931837
{74805FE3-2E0D-4EAB-8CFE-A9D46F8D5972} = {34BE693E-3496-45A4-B1D2-D3A0E068EEDB}
17941838
{92064C48-0136-48CD-AE8D-C6FEDBC7B639} = {74805FE3-2E0D-4EAB-8CFE-A9D46F8D5972}
17951839
{87679336-95BE-47E4-B42B-8F6860A0B215} = {1A37FD75-94E9-4D6F-953A-0DABBD7B49E9}
1840+
{71FFABC1-A20A-48CC-86DD-4D28541F2359} = {34BE693E-3496-45A4-B1D2-D3A0E068EEDB}
17961841
EndGlobalSection
17971842
GlobalSection(ExtensibilityGlobals) = postSolution
17981843
SolutionGuid = {020399A9-DC27-4B82-9CAA-EF488665AC27}
Lines changed: 119 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,119 @@
1-
//// Copyright (c) Microsoft Corporation. All rights reserved.
2-
//// Licensed under the MIT License.
3-
//#if NET6_0_OR_GREATER
4-
//using System;
5-
//using System.Collections.Generic;
6-
//using System.Linq;
7-
//using System.Runtime.ConstrainedExecution;
8-
//using System.Text;
9-
//using System.Threading.Tasks;
10-
//using Microsoft.Identity.Client;
11-
//using Microsoft.Identity.Client.Extensibility;
12-
//using Microsoft.Identity.Client.Internal;
13-
//using Microsoft.Identity.Client.Utils;
14-
//using Microsoft.Identity.Test.Common;
15-
//using Microsoft.Identity.Test.Common.Core.Helpers;
16-
//using Microsoft.Identity.Test.LabInfrastructure;
17-
//using Microsoft.Identity.Test.Unit;
18-
//using Microsoft.VisualStudio.TestTools.UnitTesting;
19-
20-
//namespace Microsoft.Identity.Test.Integration.NetCore.HeadlessTests
21-
//{
22-
// [TestClass]
23-
// public class CdtTests
24-
// {
25-
// private static readonly string[] s_scopes = new[] { "88f91eac-c606-4c67-a0e2-a5e8a186854f/.default" };
26-
27-
// [TestInitialize]
28-
// public void TestInitialize()
29-
// {
30-
// TestCommon.ResetInternalStaticCaches();
31-
// }
32-
33-
// [TestMethod]
34-
// //[Ignore("Need to wait for ESTS to release feature from test slice.")]
35-
// public async Task CDT_WithCertIntegrationTest_Async()
36-
// {
37-
// //Client.Constraint constraint = new Client.Constraint();
38-
// //constraint.Type = "wk:user";
39-
// //constraint.Action = "U";
40-
// //constraint.Version = "1.0";
41-
// //constraint.Targets = new List<ConstraintTarget>();
42-
43-
// //constraint.Targets.Add(new ConstraintTarget("constraint1", "pol1"));
44-
// //constraint.Targets.Add(new ConstraintTarget("constraint2", "pol2"));
45-
46-
// //var constraintAsString = JsonHelper.SerializeToJson(new[] { constraint });
47-
48-
// //TODO: Resolve serialization failure in test. Seems to be related to some internal .net serialization issue
49-
// //Using a hardcoded string for now
50-
// var constraintAsString = "[{\"Version\":\"1.0\",\"Type\":\"wk:user\",\"Action\":\"U\",\"Targets\":[{\"Value\":\"constraint1\",\"Policy\":\"pol1\",\"AdditionalProperties\":null},{\"Value\":\"constraint2\",\"Policy\":\"pol2\",\"AdditionalProperties\":null}],\"AdditionalProperties\":null}]";
51-
52-
// var secret = GetSecretLazy(KeyVaultInstance.MSIDLab, TestConstants.MsalCCAKeyVaultSecretName).Value;
53-
// var certificate = CertificateHelper.FindCertificateByName(TestConstants.AutomationTestCertName);
54-
55-
// var confidentialApp = ConfidentialClientApplicationBuilder
56-
// .Create("88f91eac-c606-4c67-a0e2-a5e8a186854f")
57-
// .WithAuthority("https://login.microsoftonline.com/msidlab4.onmicrosoft.com")
58-
// .WithClientSecret(secret)
59-
// .WithExperimentalFeatures(true)
60-
// .BuildConcrete();
61-
62-
// var provider = new CdtCryptoProvider();
63-
64-
// MsalAuthenticationExtension cdtExtension = new MsalAuthenticationExtension()
65-
// {
66-
// AuthenticationOperation = new CdtAuthenticationScheme(constraintAsString),
67-
// AdditionalCacheParameters = new[] { CdtAuthenticationScheme.CdtNonce, CdtAuthenticationScheme.CdtEncKey }
68-
// };
69-
70-
// var result = await confidentialApp.AcquireTokenForClient(s_scopes)
71-
// .WithAuthenticationExtension(cdtExtension)
72-
// .WithExtraQueryParameters("dc=ESTS-PUB-JPELR1-AZ1-FD000-TEST1")
73-
// .ExecuteAsync()
74-
// .ConfigureAwait(false);
75-
76-
// // access token parsing can be done with MSAL's id token parsing logic
77-
// var claims = IdToken.Parse(result.AccessToken).ClaimsPrincipal;
78-
79-
// Assert.AreEqual(TokenSource.IdentityProvider, result.AuthenticationResultMetadata.TokenSource);
80-
// AssertConstrainedDelegationClaims(provider, claims, constraintAsString);
81-
82-
// //Verify that the original AT token is cached and the CDT can be recreated
83-
// result = await confidentialApp.AcquireTokenForClient(s_scopes)
84-
// .WithAuthenticationExtension(cdtExtension)
85-
// .ExecuteAsync()
86-
// .ConfigureAwait(false);
87-
88-
// // access token parsing can be done with MSAL's id token parsing logic
89-
// claims = IdToken.Parse(result.AccessToken).ClaimsPrincipal;
90-
91-
// Assert.AreEqual(TokenSource.Cache, result.AuthenticationResultMetadata.TokenSource);
92-
// AssertConstrainedDelegationClaims(provider, claims, constraintAsString);
93-
// }
94-
95-
// private static Lazy<string> GetSecretLazy(string keyVaultInstance, string secretName) => new Lazy<string>(() =>
96-
// {
97-
// var keyVault = new KeyVaultSecretsProvider(keyVaultInstance);
98-
// var secret = keyVault.GetSecretByName(secretName).Value;
99-
// return secret;
100-
// });
101-
102-
// private static void AssertConstrainedDelegationClaims(CdtCryptoProvider cdtCryptoProvider, System.Security.Claims.ClaimsPrincipal claims, string constraint)
103-
// {
104-
// var ticket = claims.FindAll("t").Single().Value;
105-
// var constraints = claims.FindAll("c").Single().Value;
106-
107-
// Assert.IsTrue(!string.IsNullOrEmpty(ticket));
108-
// Assert.IsTrue(!string.IsNullOrEmpty(constraints));
109-
110-
// Assert.IsTrue(!string.IsNullOrEmpty(ticket));
111-
112-
// var constraintsClaims = IdToken.Parse(constraints).ClaimsPrincipal;
113-
// var constraintsClaim = constraintsClaims.FindAll("constraints").Single().Value;
114-
115-
// Assert.AreEqual(constraint, constraintsClaim);
116-
// }
117-
// }
118-
//}
119-
//#endif
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
#if NET6_0_OR_GREATER
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
using System.Runtime.ConstrainedExecution;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
using Microsoft.Identity.Client;
11+
using Microsoft.Identity.Client.Extensibility;
12+
using Microsoft.Identity.Client.Internal;
13+
using Microsoft.Identity.Client.Utils;
14+
using Microsoft.Identity.Test.Common;
15+
using Microsoft.Identity.Test.Common.Core.Helpers;
16+
using Microsoft.Identity.Test.LabInfrastructure;
17+
using Microsoft.Identity.Test.Unit;
18+
using Microsoft.VisualStudio.TestTools.UnitTesting;
19+
20+
namespace Microsoft.Identity.Test.Integration.NetCore.HeadlessTests
21+
{
22+
[TestClass]
23+
public class CdtTests
24+
{
25+
private static readonly string[] s_scopes = new[] { "88f91eac-c606-4c67-a0e2-a5e8a186854f/.default" };
26+
27+
[TestInitialize]
28+
public void TestInitialize()
29+
{
30+
TestCommon.ResetInternalStaticCaches();
31+
}
32+
33+
[TestMethod]
34+
//[Ignore("Need to wait for ESTS to release feature from test slice.")]
35+
public async Task CDT_WithCertIntegrationTest_Async()
36+
{
37+
//Client.Constraint constraint = new Client.Constraint();
38+
//constraint.Type = "wk:user";
39+
//constraint.Action = "U";
40+
//constraint.Version = "1.0";
41+
//constraint.Targets = new List<ConstraintTarget>();
42+
43+
//constraint.Targets.Add(new ConstraintTarget("constraint1", "pol1"));
44+
//constraint.Targets.Add(new ConstraintTarget("constraint2", "pol2"));
45+
46+
//var constraintAsString = JsonHelper.SerializeToJson(new[] { constraint });
47+
48+
//TODO: Resolve serialization failure in test. Seems to be related to some internal .net serialization issue
49+
//Using a hardcoded string for now
50+
var constraintAsString = "[{\"Version\":\"1.0\",\"Type\":\"wk:user\",\"Action\":\"U\",\"Targets\":[{\"Value\":\"constraint1\",\"Policy\":\"pol1\",\"AdditionalProperties\":null},{\"Value\":\"constraint2\",\"Policy\":\"pol2\",\"AdditionalProperties\":null}],\"AdditionalProperties\":null}]";
51+
52+
var secret = GetSecretLazy(KeyVaultInstance.MSIDLab, TestConstants.MsalCCAKeyVaultSecretName).Value;
53+
var certificate = CertificateHelper.FindCertificateByName(TestConstants.AutomationTestCertName);
54+
55+
var confidentialApp = ConfidentialClientApplicationBuilder
56+
.Create("88f91eac-c606-4c67-a0e2-a5e8a186854f")
57+
.WithAuthority("https://login.microsoftonline.com/msidlab4.onmicrosoft.com")
58+
.WithClientSecret(secret)
59+
.WithExperimentalFeatures(true)
60+
.BuildConcrete();
61+
62+
var provider = new CdtCryptoProvider();
63+
64+
MsalAuthenticationExtension cdtExtension = new MsalAuthenticationExtension()
65+
{
66+
AuthenticationOperation = new CdtAuthenticationScheme(constraintAsString),
67+
AdditionalCacheParameters = new[] { CdtAuthenticationScheme.CdtNonce, CdtAuthenticationScheme.CdtEncKey }
68+
};
69+
70+
var result = await confidentialApp.AcquireTokenForClient(s_scopes)
71+
.WithAuthenticationExtension(cdtExtension)
72+
.WithExtraQueryParameters("dc=ESTS-PUB-JPELR1-AZ1-FD000-TEST1")
73+
.ExecuteAsync()
74+
.ConfigureAwait(false);
75+
76+
// access token parsing can be done with MSAL's id token parsing logic
77+
var claims = IdToken.Parse(result.AccessToken).ClaimsPrincipal;
78+
79+
Assert.AreEqual(TokenSource.IdentityProvider, result.AuthenticationResultMetadata.TokenSource);
80+
AssertConstrainedDelegationClaims(provider, claims, constraintAsString);
81+
82+
//Verify that the original AT token is cached and the CDT can be recreated
83+
result = await confidentialApp.AcquireTokenForClient(s_scopes)
84+
.WithAuthenticationExtension(cdtExtension)
85+
.ExecuteAsync()
86+
.ConfigureAwait(false);
87+
88+
// access token parsing can be done with MSAL's id token parsing logic
89+
claims = IdToken.Parse(result.AccessToken).ClaimsPrincipal;
90+
91+
Assert.AreEqual(TokenSource.Cache, result.AuthenticationResultMetadata.TokenSource);
92+
AssertConstrainedDelegationClaims(provider, claims, constraintAsString);
93+
}
94+
95+
private static Lazy<string> GetSecretLazy(string keyVaultInstance, string secretName) => new Lazy<string>(() =>
96+
{
97+
var keyVault = new KeyVaultSecretsProvider(keyVaultInstance);
98+
var secret = keyVault.GetSecretByName(secretName).Value;
99+
return secret;
100+
});
101+
102+
private static void AssertConstrainedDelegationClaims(CdtCryptoProvider cdtCryptoProvider, System.Security.Claims.ClaimsPrincipal claims, string constraint)
103+
{
104+
var ticket = claims.FindAll("t").Single().Value;
105+
var constraints = claims.FindAll("c").Single().Value;
106+
107+
Assert.IsTrue(!string.IsNullOrEmpty(ticket));
108+
Assert.IsTrue(!string.IsNullOrEmpty(constraints));
109+
110+
Assert.IsTrue(!string.IsNullOrEmpty(ticket));
111+
112+
var constraintsClaims = IdToken.Parse(constraints).ClaimsPrincipal;
113+
var constraintsClaim = constraintsClaims.FindAll("constraints").Single().Value;
114+
115+
Assert.AreEqual(constraint, constraintsClaim);
116+
}
117+
}
118+
}
119+
#endif

tests/Microsoft.Identity.Test.Integration.netcore/Microsoft.Identity.Test.Integration.NetCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12+
<ProjectReference Include="..\..\MsalCdtExtension\MsalCdtExtension.csproj" />
1213
<ProjectReference Include="..\..\src\client\Microsoft.Identity.Client.Broker\Microsoft.Identity.Client.Broker.csproj" />
1314
<ProjectReference Include="..\..\src\client\Microsoft.Identity.Client.Extensions.Msal\Microsoft.Identity.Client.Extensions.Msal.csproj" />
1415
<ProjectReference Include="..\..\src\client\Microsoft.Identity.Client\Microsoft.Identity.Client.csproj" />

0 commit comments

Comments
 (0)