Skip to content

Commit 6154ac9

Browse files
authored
Deprecate ROPC flow (#5355)
* deprecate ropc api * add pragma tag in tests and sample apps * add aka.ms link and remove confidential flow deprecation * remove imports * add pragma to missed test * remove please and extra line
1 parent efbd817 commit 6154ac9

File tree

28 files changed

+144
-25
lines changed

28 files changed

+144
-25
lines changed

src/client/Microsoft.Identity.Client.Broker/RuntimeBroker.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Globalization;
77
using System.Linq;
88
using System.Diagnostics;
9+
using System.ComponentModel;
910
using System.Runtime.InteropServices;
1011
using System.Threading.Tasks;
1112
using Microsoft.Identity.Client.ApiConfig.Parameters;
@@ -456,6 +457,8 @@ public async Task<MsalTokenResponse> AcquireTokenSilentDefaultUserAsync(
456457
return msalTokenResponse;
457458
}
458459

460+
[Obsolete("This API has been deprecated, use a more secure flow. See https://aka.ms/msal-ropc-migration for migration guidance", false)]
461+
[EditorBrowsable(EditorBrowsableState.Never)] // deprecated, this API is no longer supported
459462
public async Task<MsalTokenResponse> AcquireTokenByUsernamePasswordAsync(
460463
AuthenticationRequestParameters authenticationRequestParameters,
461464
AcquireTokenByUsernamePasswordParameters acquireTokenByUsernamePasswordParameters)
@@ -476,7 +479,8 @@ public async Task<MsalTokenResponse> AcquireTokenByUsernamePasswordAsync(
476479
authParams.Properties["MSALRuntime_Username"] = acquireTokenByUsernamePasswordParameters.Username;
477480
authParams.Properties["MSALRuntime_Password"] = acquireTokenByUsernamePasswordParameters.Password;
478481
// For Linux broker, use the interactive flow with username password to get the token
479-
if (Environment.GetEnvironmentVariable("TF_BUILD") != null && DesktopOsHelper.IsLinux()) {
482+
if (Environment.GetEnvironmentVariable("TF_BUILD") != null && DesktopOsHelper.IsLinux())
483+
{
480484
using (NativeInterop.AuthResult result = await s_lazyCore.Value.SignInInteractivelyAsync(
481485
XOpenDisplay(":1"),
482486
authParams,
@@ -487,7 +491,9 @@ public async Task<MsalTokenResponse> AcquireTokenByUsernamePasswordAsync(
487491
var errorMessage = "Could not acquire token with username and password.";
488492
msalTokenResponse = WamAdapters.HandleResponse(result, authenticationRequestParameters, _logger, errorMessage);
489493
}
490-
} else {
494+
}
495+
else
496+
{
491497
using (NativeInterop.AuthResult result = await s_lazyCore.Value.SignInSilentlyAsync(
492498
authParams,
493499
authenticationRequestParameters.CorrelationId.ToString("D"),
@@ -497,7 +503,6 @@ public async Task<MsalTokenResponse> AcquireTokenByUsernamePasswordAsync(
497503
msalTokenResponse = WamAdapters.HandleResponse(result, authenticationRequestParameters, _logger, errorMessage);
498504
}
499505
}
500-
501506
}
502507

503508
return msalTokenResponse;

src/client/Microsoft.Identity.Client/IPublicClientApplication.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ AcquireTokenByIntegratedWindowsAuthParameterBuilder AcquireTokenByIntegratedWind
113113
/// Available only for .NET Framework and .NET Core applications. See <see href="https://aka.ms/msal-net-up">our documentation</see> for details.
114114
/// .NET no longer recommends using SecureString and MSAL puts the plaintext value of the password on the wire, as required by the OAuth protocol. See <see href="https://docs.microsoft.com/dotnet/api/system.security.securestring?view=net-6.0#remarks">SecureString documentation</see> for details.
115115
/// </remarks>
116-
[Obsolete("Using SecureString is not recommended. Use AcquireTokenByUsernamePassword(IEnumerable<string> scopes, string username, string password) instead.", false)]
117-
[EditorBrowsable(EditorBrowsableState.Never)]
116+
[Obsolete("This API has been deprecated, use a more secure flow. See https://aka.ms/msal-ropc-migration for migration guidance", false)]
117+
[EditorBrowsable(EditorBrowsableState.Never)] // deprecated, this API is no longer supported
118118
AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(
119119
IEnumerable<string> scopes,
120120
string username,
@@ -133,6 +133,8 @@ AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(
133133
/// <remarks>
134134
/// Available only for .NET Framework and .NET Core applications. See <see href="https://aka.ms/msal-net-up">our documentation</see> for details.
135135
/// </remarks>
136+
[Obsolete("This API has been deprecated, use a more secure flow. See https://aka.ms/msal-ropc-migration for migration guidance", false)]
137+
[EditorBrowsable(EditorBrowsableState.Never)] // deprecated, this API is no longer supported
136138
AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(
137139
IEnumerable<string> scopes,
138140
string username,

src/client/Microsoft.Identity.Client/Internal/Broker/IBroker.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
using Microsoft.Identity.Client.Instance.Discovery;
77
using Microsoft.Identity.Client.Internal.Requests;
88
using Microsoft.Identity.Client.OAuth2;
9+
using System;
910
using System.Collections.Generic;
11+
using System.ComponentModel;
1012
using System.Threading.Tasks;
1113

1214
namespace Microsoft.Identity.Client.Internal.Broker
@@ -27,6 +29,8 @@ Task<MsalTokenResponse> AcquireTokenSilentDefaultUserAsync(
2729
AuthenticationRequestParameters authenticationRequestParameters,
2830
AcquireTokenSilentParameters acquireTokenSilentParameters);
2931

32+
[Obsolete("This API has been deprecated, use a more secure flow. See https://aka.ms/msal-ropc-migration for migration guidance", false)]
33+
[EditorBrowsable(EditorBrowsableState.Never)] // deprecated, this API is no longer supported
3034
Task<MsalTokenResponse> AcquireTokenByUsernamePasswordAsync(
3135
AuthenticationRequestParameters authenticationRequestParameters,
3236
AcquireTokenByUsernamePasswordParameters acquireTokenByUsernamePasswordParameters);

src/client/Microsoft.Identity.Client/Internal/Requests/UsernamePasswordRequest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,12 @@ private async Task<MsalTokenResponse> GetTokenResponseAsync(CancellationToken ca
7676
{
7777
_logger.Info(LogMessages.CanInvokeBrokerAcquireTokenWithBroker);
7878

79+
#pragma warning disable CS0618 // Type or member is obsolete
7980
MsalTokenResponse brokerTokenResponse = await broker.AcquireTokenByUsernamePasswordAsync(
8081
_requestParameters,
8182
_usernamePasswordParameters)
8283
.ConfigureAwait(false);
83-
84+
#pragma warning restore CS0618
8485
if (brokerTokenResponse != null)
8586
{
8687
_logger.Info("Broker attempt completed successfully. ");

src/client/Microsoft.Identity.Client/PublicClientApplication.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ public AcquireTokenByIntegratedWindowsAuthParameterBuilder AcquireTokenByIntegra
139139
}
140140

141141
/// <inheritdoc/>
142-
[Obsolete("Using SecureString is not recommended. Use AcquireTokenByUsernamePassword(IEnumerable<string> scopes, string username, string password) instead.", false)]
143-
[EditorBrowsable(EditorBrowsableState.Never)]
142+
[Obsolete("This API has been deprecated, use a more secure flow. See https://aka.ms/msal-ropc-migration for migration guidance", false)]
143+
[EditorBrowsable(EditorBrowsableState.Never)] // deprecated, this API is no longer supported
144144
public AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(
145145
IEnumerable<string> scopes,
146146
string username,
@@ -154,6 +154,8 @@ public AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePass
154154
}
155155

156156
/// <inheritdoc/>
157+
[Obsolete("This API has been deprecated, use a more secure flow. See https://aka.ms/msal-ropc-migration for migration guidance", false)]
158+
[EditorBrowsable(EditorBrowsableState.Never)] // deprecated, this API is no longer supported
157159
public AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(
158160
IEnumerable<string> scopes,
159161
string username,

tests/CacheCompat/CommonCache.Test.MsalV3/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,12 @@ protected override async Task<IEnumerable<CacheExecutorAccountResult>> InternalE
6767
}
6868
catch (MsalUiRequiredException)
6969
{
70+
#pragma warning disable CS0618 // Type or memeber is obsolete
7071
var result = await app
7172
.AcquireTokenByUsernamePassword(scopes, labUserData.Upn, labUserData.Password)
7273
.ExecuteAsync(CancellationToken.None)
7374
.ConfigureAwait(false);
75+
#pragma warning restore CS0618
7476

7577
if (string.IsNullOrWhiteSpace(result.AccessToken))
7678
{

tests/Microsoft.Identity.Test.Integration.netcore/HeadlessTests/B2CUsernamePasswordIntegrationTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ public async Task ROPC_B2C_Async()
4343
.WithTestLogging()
4444
.Build();
4545

46+
#pragma warning disable CS0618 // Type or member is obsolete
4647
AuthenticationResult authResult = await msalPublicClient
4748
.AcquireTokenByUsernamePassword(s_b2cScopes, user.Upn, user.GetOrFetchPassword())
4849
.ExecuteAsync(CancellationToken.None)
4950
.ConfigureAwait(false);
51+
#pragma warning restore CS0618
5052

5153
Assert.IsNotNull(authResult);
5254
Assert.AreEqual(TokenSource.IdentityProvider, authResult.AuthenticationResultMetadata.TokenSource);

tests/Microsoft.Identity.Test.Integration.netcore/HeadlessTests/CiamIntegrationTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,12 @@ private async Task RunCiamRopcTest(string authority, LabResponse labResponse)
6060
.WithRedirectUri(_ciamRedirectUri)
6161
.Build();
6262

63+
#pragma warning disable CS0618 // Type or member is obsolete
6364
var result = await msalPublicClient
6465
.AcquireTokenByUsernamePassword(_ciamScopes, labResponse.User.Upn, labResponse.User.GetOrFetchPassword())
6566
.ExecuteAsync()
6667
.ConfigureAwait(false);
68+
#pragma warning restore CS0618
6769

6870
Assert.IsNotNull(result.AccessToken);
6971
Assert.AreEqual(TokenSource.IdentityProvider, result.AuthenticationResultMetadata.TokenSource);
@@ -170,10 +172,12 @@ public async Task OBOCiam_CustomDomain_ReturnsValidTokens()
170172
.WithRedirectUri(labResponse.App.RedirectUri)
171173
.Build();
172174

175+
#pragma warning disable CS0618 // Type or member is obsolete
173176
var result = await msalPublicClient
174177
.AcquireTokenByUsernamePassword(new[] { labResponse.App.DefaultScopes }, labResponse.User.Upn, labResponse.User.GetOrFetchPassword())
175178
.ExecuteAsync()
176179
.ConfigureAwait(false);
180+
#pragma warning restore CS0618
177181

178182
Assert.IsNotNull(result.AccessToken);
179183
Assert.AreEqual(TokenSource.IdentityProvider, result.AuthenticationResultMetadata.TokenSource);

tests/Microsoft.Identity.Test.Integration.netcore/HeadlessTests/ClientCredentialsTests.NetFwk.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,12 @@ public async Task ByRefreshTokenTestAsync()
223223
.WithAuthority(labResponse.Lab.Authority, "organizations")
224224
.BuildConcrete();
225225

226+
#pragma warning disable CS0618 // Type or member is obsolete
226227
AuthenticationResult authResult = await msalPublicClient
227228
.AcquireTokenByUsernamePassword(s_scopes, labResponse.User.Upn, labResponse.User.GetOrFetchPassword())
228229
.ExecuteAsync(CancellationToken.None)
229230
.ConfigureAwait(false);
231+
#pragma warning restore CS0618
230232

231233
var confidentialApp = ConfidentialClientApplicationBuilder
232234
.Create(labResponse.App.AppId)

tests/Microsoft.Identity.Test.Integration.netcore/HeadlessTests/InstanceDiscoveryIntegrationTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public async Task AuthorityMigrationAsync()
4141

4242
Trace.WriteLine("Acquire a token using a not so common authority alias");
4343

44+
#pragma warning disable CS0618 // Type or member is obsolete
4445
AuthenticationResult authResult = await pca.AcquireTokenByUsernamePassword(
4546
s_scopes,
4647
user.Upn,
@@ -51,6 +52,7 @@ public async Task AuthorityMigrationAsync()
5152
.WithTenantId(labResponse.Lab.TenantId)
5253
.ExecuteAsync()
5354
.ConfigureAwait(false);
55+
#pragma warning restore CS0618
5456

5557
Assert.IsNotNull(authResult.AccessToken);
5658

@@ -78,13 +80,15 @@ public async Task FailedAuthorityValidationTestAsync()
7880

7981
Trace.WriteLine("Acquire a token using a not so common authority alias");
8082

83+
#pragma warning disable CS0618 // Type or member is obsolete
8184
MsalServiceException exception = await AssertException.TaskThrowsAsync<MsalServiceException>(() =>
8285
pca.AcquireTokenByUsernamePassword(
8386
s_scopes,
8487
user.Upn,
8588
user.GetOrFetchPassword())
8689
.ExecuteAsync())
8790
.ConfigureAwait(false);
91+
#pragma warning restore CS0618
8892

8993
Assert.IsTrue(exception.Message.Contains("AADSTS50049"));
9094
Assert.AreEqual("invalid_instance", exception.ErrorCode);
@@ -104,13 +108,15 @@ public async Task AuthorityValidationTestWithFalseValidateAuthorityAsync()
104108

105109
Trace.WriteLine("Acquire a token using a not so common authority alias");
106110

111+
#pragma warning disable CS0618 // Type or member is obsolete
107112
_ = await AssertException.TaskThrowsAsync<HttpRequestException>(() =>
108113
pca.AcquireTokenByUsernamePassword(
109114
s_scopes,
110115
user.Upn,
111116
user.GetOrFetchPassword())
112117
.ExecuteAsync())
113118
.ConfigureAwait(false);
119+
#pragma warning restore CS0618
114120
}
115121

116122
/// <summary>

0 commit comments

Comments
 (0)