Skip to content

Commit df420da

Browse files
authored
Node interop: Add handling for redirect URI based on platform (#7908)
Sets the redirect URI in the `NativeBrokerPlugin` class based on platform
1 parent 2d93167 commit df420da

File tree

9 files changed

+394
-200
lines changed

9 files changed

+394
-200
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "Add handling for redirect URI based on platform #7908",
4+
"packageName": "@azure/msal-node-extensions",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}

extensions/msal-node-extensions/src/broker/NativeBrokerPlugin.ts

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,11 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
192192
"NativeBrokerPlugin - acquireTokenSilent called",
193193
request.correlationId
194194
);
195-
const authParams = this.generateRequestParameters(request);
196-
const account = await this.getAccount(request);
195+
const platformRequest = request;
196+
const authParams = this.generateRequestParameters(platformRequest);
197+
const account = await this.getAccount(platformRequest);
198+
platformRequest.redirectUri =
199+
this.chooseRedirectUriByPlatform(platformRequest);
197200

198201
return new Promise(
199202
(resolve: (value: AuthenticationResult) => void, reject) => {
@@ -208,7 +211,7 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
208211
}
209212
}
210213
const authenticationResult = this.getAuthenticationResult(
211-
request,
214+
platformRequest,
212215
result
213216
);
214217
resolve(authenticationResult);
@@ -218,14 +221,14 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
218221
if (account) {
219222
msalNodeRuntime.AcquireTokenSilentlyAsync(
220223
authParams,
221-
request.correlationId,
224+
platformRequest.correlationId,
222225
account,
223226
resultCallback
224227
);
225228
} else {
226229
msalNodeRuntime.SignInSilentlyAsync(
227230
authParams,
228-
request.correlationId,
231+
platformRequest.correlationId,
229232
resultCallback
230233
);
231234
}
@@ -247,8 +250,11 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
247250
"NativeBrokerPlugin - acquireTokenInteractive called",
248251
request.correlationId
249252
);
250-
const authParams = this.generateRequestParameters(request);
251-
const account = await this.getAccount(request);
253+
const platformRequest = request;
254+
const authParams = this.generateRequestParameters(platformRequest);
255+
platformRequest.redirectUri =
256+
this.chooseRedirectUriByPlatform(platformRequest);
257+
const account = await this.getAccount(platformRequest);
252258
const windowHandle = providedWindowHandle || Buffer.from([0]);
253259

254260
return new Promise(
@@ -264,27 +270,28 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
264270
}
265271
}
266272
const authenticationResult = this.getAuthenticationResult(
267-
request,
273+
platformRequest,
268274
result
269275
);
270276
resolve(authenticationResult);
271277
};
272278

273279
try {
274-
switch (request.prompt) {
280+
switch (platformRequest.prompt) {
275281
case PromptValue.LOGIN:
276282
case PromptValue.SELECT_ACCOUNT:
277283
case PromptValue.CREATE:
278284
this.logger.info(
279285
"Calling native interop SignInInteractively API",
280-
request.correlationId
286+
platformRequest.correlationId
281287
);
282288
const loginHint =
283-
request.loginHint || Constants.EMPTY_STRING;
289+
platformRequest.loginHint ||
290+
Constants.EMPTY_STRING;
284291
msalNodeRuntime.SignInInteractivelyAsync(
285292
windowHandle,
286293
authParams,
287-
request.correlationId,
294+
platformRequest.correlationId,
288295
loginHint,
289296
resultCallback
290297
);
@@ -293,22 +300,22 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
293300
if (account) {
294301
this.logger.info(
295302
"Calling native interop AcquireTokenSilently API",
296-
request.correlationId
303+
platformRequest.correlationId
297304
);
298305
msalNodeRuntime.AcquireTokenSilentlyAsync(
299306
authParams,
300-
request.correlationId,
307+
platformRequest.correlationId,
301308
account,
302309
resultCallback
303310
);
304311
} else {
305312
this.logger.info(
306313
"Calling native interop SignInSilently API",
307-
request.correlationId
314+
platformRequest.correlationId
308315
);
309316
msalNodeRuntime.SignInSilentlyAsync(
310317
authParams,
311-
request.correlationId,
318+
platformRequest.correlationId,
312319
resultCallback
313320
);
314321
}
@@ -317,26 +324,27 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
317324
if (account) {
318325
this.logger.info(
319326
"Calling native interop AcquireTokenInteractively API",
320-
request.correlationId
327+
platformRequest.correlationId
321328
);
322329
msalNodeRuntime.AcquireTokenInteractivelyAsync(
323330
windowHandle,
324331
authParams,
325-
request.correlationId,
332+
platformRequest.correlationId,
326333
account,
327334
resultCallback
328335
);
329336
} else {
330337
this.logger.info(
331338
"Calling native interop SignIn API",
332-
request.correlationId
339+
platformRequest.correlationId
333340
);
334341
const loginHint =
335-
request.loginHint || Constants.EMPTY_STRING;
342+
platformRequest.loginHint ||
343+
Constants.EMPTY_STRING;
336344
msalNodeRuntime.SignInAsync(
337345
windowHandle,
338346
authParams,
339-
request.correlationId,
347+
platformRequest.correlationId,
340348
loginHint,
341349
resultCallback
342350
);
@@ -457,7 +465,10 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
457465
request.clientId,
458466
request.authority
459467
);
460-
authParams.SetRedirectUri(request.redirectUri);
468+
469+
authParams.SetRedirectUri(
470+
this.chooseRedirectUriByPlatform(request)
471+
);
461472
authParams.SetRequestedScopes(request.scopes.join(" "));
462473

463474
if (request.claims) {
@@ -516,6 +527,26 @@ export class NativeBrokerPlugin implements INativeBrokerPlugin {
516527
return authParams;
517528
}
518529

530+
private chooseRedirectUriByPlatform(request: NativeRequest): string {
531+
this.logger.trace(
532+
"NativeBrokerPlugin - chooseRedirectUriByPlatform called",
533+
request.correlationId
534+
);
535+
let redirectUri: string;
536+
switch (process.platform) {
537+
case "darwin":
538+
redirectUri = "msauth.com.msauth.unsignedapp://auth";
539+
break;
540+
case "win32":
541+
redirectUri = `ms-appx-web://Microsoft.AAD.BrokerPlugin/${request.clientId}`;
542+
break;
543+
default:
544+
redirectUri =
545+
"https://login.microsoftonline.com/common/oauth2/nativeclient";
546+
}
547+
return redirectUri;
548+
}
549+
519550
private getAuthenticationResult(
520551
request: NativeRequest,
521552
authResult: AuthResult

0 commit comments

Comments
 (0)