From c33ec8a2cce82c2e6dc33c2702c182b0d3d781ce Mon Sep 17 00:00:00 2001 From: fangyangci Date: Mon, 18 Dec 2023 21:00:25 +0800 Subject: [PATCH 1/2] fix usgov single tenant --- .../botbuilder/src/botFrameworkAdapter.ts | 36 ++++++++++------- .../botbuilder/src/botFrameworkHttpClient.ts | 6 +-- .../src/auth/appCredentials.ts | 22 ++++++++-- .../src/auth/governmentConstants.ts | 12 ++++++ .../botframework-connector/src/auth/index.ts | 1 + .../auth/microsoftGovernmentAppCredentials.ts | 40 +++++++++++++++++++ .../msalServiceClientCredentialsFactory.ts | 4 +- .../passwordServiceClientCredentialFactory.ts | 6 +-- .../auth/microsoftAppCredentials.test.js | 17 ++++++++ .../microsoftGovernmentAppCredentials.test.js | 17 ++++++++ 10 files changed, 133 insertions(+), 28 deletions(-) create mode 100644 libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts create mode 100644 libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js create mode 100644 libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js diff --git a/libraries/botbuilder/src/botFrameworkAdapter.ts b/libraries/botbuilder/src/botFrameworkAdapter.ts index cbe01ab5f7..eaa4f01a18 100644 --- a/libraries/botbuilder/src/botFrameworkAdapter.ts +++ b/libraries/botbuilder/src/botFrameworkAdapter.ts @@ -56,6 +56,7 @@ import { GovernmentConstants, JwtTokenValidation, MicrosoftAppCredentials, + MicrosoftGovernmentAppCredentials, SignInUrlResponse, SimpleCredentialProvider, SkillValidation, @@ -254,11 +255,20 @@ export class BotFrameworkAdapter ); this.credentialsProvider = new SimpleCredentialProvider(this.credentials.appId, ''); } else { - this.credentials = new MicrosoftAppCredentials( - this.settings.appId, - this.settings.appPassword || '', - this.settings.channelAuthTenant - ); + if (JwtTokenValidation.isGovernment(this.settings.channelService)) { + this.credentials = new MicrosoftGovernmentAppCredentials( + this.settings.appId, + this.settings.appPassword || '', + this.settings.channelAuthTenant + ); + } + else{ + this.credentials = new MicrosoftAppCredentials( + this.settings.appId, + this.settings.appPassword || '', + this.settings.channelAuthTenant + ); + } this.credentialsProvider = new SimpleCredentialProvider( this.credentials.appId, this.settings.appPassword || '' @@ -280,10 +290,6 @@ export class BotFrameworkAdapter ChannelValidation.OpenIdMetadataEndpoint = this.settings.openIdMetadata; GovernmentChannelValidation.OpenIdMetadataEndpoint = this.settings.openIdMetadata; } - if (JwtTokenValidation.isGovernment(this.settings.channelService)) { - this.credentials.oAuthEndpoint = GovernmentConstants.ToChannelFromBotLoginUrl; - this.credentials.oAuthScope = GovernmentConstants.ToChannelFromBotOAuthScope; - } // If a NodeWebSocketFactoryBase was passed in, set it on the BotFrameworkAdapter. if (this.settings.webSocketFactory) { @@ -1627,12 +1633,12 @@ export class BotFrameworkAdapter this.settings.channelAuthTenant ); } else { - credentials = new MicrosoftAppCredentials(appId, appPassword, this.settings.channelAuthTenant, oAuthScope); - } - - if (JwtTokenValidation.isGovernment(this.settings.channelService)) { - credentials.oAuthEndpoint = GovernmentConstants.ToChannelFromBotLoginUrl; - credentials.oAuthScope = oAuthScope || GovernmentConstants.ToChannelFromBotOAuthScope; + if (JwtTokenValidation.isGovernment(this.settings.channelService)) { + credentials = new MicrosoftGovernmentAppCredentials(appId, appPassword, this.settings.channelAuthTenant, oAuthScope); + } + else{ + credentials = new MicrosoftAppCredentials(appId, appPassword, this.settings.channelAuthTenant, oAuthScope); + } } return credentials; diff --git a/libraries/botbuilder/src/botFrameworkHttpClient.ts b/libraries/botbuilder/src/botFrameworkHttpClient.ts index fc2adebebe..fd4a91eacd 100644 --- a/libraries/botbuilder/src/botFrameworkHttpClient.ts +++ b/libraries/botbuilder/src/botFrameworkHttpClient.ts @@ -13,10 +13,10 @@ import { AppCredentials, AuthenticationConstants, ConversationConstants, - GovernmentConstants, ICredentialProvider, JwtTokenValidation, MicrosoftAppCredentials, + MicrosoftGovernmentAppCredentials } from 'botframework-connector'; import { USER_AGENT } from './botFrameworkAdapter'; @@ -158,9 +158,7 @@ export class BotFrameworkHttpClient implements BotFrameworkClient { protected async buildCredentials(appId: string, oAuthScope?: string): Promise { const appPassword = await this.credentialProvider.getAppPassword(appId); if (JwtTokenValidation.isGovernment(this.channelService)) { - const appCredentials = new MicrosoftAppCredentials(appId, appPassword, undefined, oAuthScope); - appCredentials.oAuthEndpoint = GovernmentConstants.ToChannelFromBotLoginUrl; - return appCredentials; + return new MicrosoftGovernmentAppCredentials(appId, appPassword, undefined, oAuthScope); } else { return new MicrosoftAppCredentials(appId, appPassword, undefined, oAuthScope); } diff --git a/libraries/botframework-connector/src/auth/appCredentials.ts b/libraries/botframework-connector/src/auth/appCredentials.ts index 4df398456f..5caf20ebf9 100644 --- a/libraries/botframework-connector/src/auth/appCredentials.ts +++ b/libraries/botframework-connector/src/auth/appCredentials.ts @@ -48,12 +48,14 @@ export abstract class AppCredentials implements ServiceClientCredentials { constructor( appId: string, channelAuthTenant?: string, - oAuthScope: string = AuthenticationConstants.ToBotFromChannelTokenIssuer + oAuthScope: string = null ) { this.appId = appId; this.tenant = channelAuthTenant; - this.oAuthEndpoint = AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + this.tenant; - this.oAuthScope = oAuthScope; + this.oAuthEndpoint = this.GetToChannelFromBotLoginUrlPrefix() + this.tenant; + this.oAuthScope = (oAuthScope && oAuthScope.length > 0) + ? oAuthScope + : this.GetToChannelFromBotOAuthScope(); } /** @@ -69,7 +71,7 @@ export abstract class AppCredentials implements ServiceClientCredentials { * Sets tenant to be used for channel authentication. */ private set tenant(value: string) { - this._tenant = value && value.length > 0 ? value : AuthenticationConstants.DefaultChannelAuthTenant; + this._tenant = value && value.length > 0 ? value : this.GetDefaultChannelAuthTenant(); } /** @@ -191,6 +193,18 @@ export abstract class AppCredentials implements ServiceClientCredentials { } } + protected GetToChannelFromBotOAuthScope(): string { + return AuthenticationConstants.ToChannelFromBotOAuthScope; + } + + protected GetToChannelFromBotLoginUrlPrefix(): string { + return AuthenticationConstants.ToChannelFromBotLoginUrlPrefix; + } + + protected GetDefaultChannelAuthTenant(): string { + return AuthenticationConstants.DefaultChannelAuthTenant; + } + protected abstract refreshToken(): Promise; /** diff --git a/libraries/botframework-connector/src/auth/governmentConstants.ts b/libraries/botframework-connector/src/auth/governmentConstants.ts index 4a422bcd7a..dc873237f6 100644 --- a/libraries/botframework-connector/src/auth/governmentConstants.ts +++ b/libraries/botframework-connector/src/auth/governmentConstants.ts @@ -15,9 +15,21 @@ export namespace GovernmentConstants { /** * TO CHANNEL FROM BOT: Login URL + * + * DEPRECATED: DO NOT USE */ export const ToChannelFromBotLoginUrl = 'https://login.microsoftonline.us/MicrosoftServices.onmicrosoft.us'; + /** + * TO CHANNEL FROM BOT: Login URL prefix + */ + export const ToChannelFromBotLoginUrlPrefix = 'https://login.microsoftonline.us/'; + + /** + * TO CHANNEL FROM BOT: Default tenant from which to obtain a token for bot to channel communication + */ + export const DefaultChannelAuthTenant = 'MicrosoftServices.onmicrosoft.us'; + /** * TO CHANNEL FROM BOT: OAuth scope to request */ diff --git a/libraries/botframework-connector/src/auth/index.ts b/libraries/botframework-connector/src/auth/index.ts index 38a5cb890e..c4c275cb07 100644 --- a/libraries/botframework-connector/src/auth/index.ts +++ b/libraries/botframework-connector/src/auth/index.ts @@ -32,6 +32,7 @@ export * from './managedIdentityAppCredentials'; export * from './managedIdentityAuthenticator'; export * from './managedIdentityServiceClientCredentialsFactory'; export * from './microsoftAppCredentials'; +export * from './microsoftGovernmentAppCredentials'; export * from './passwordServiceClientCredentialFactory'; export * from './serviceClientCredentialsFactory'; export * from './skillValidation'; diff --git a/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts b/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts new file mode 100644 index 0000000000..85d4affa6e --- /dev/null +++ b/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts @@ -0,0 +1,40 @@ +/** + * @module botframework-connector + */ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +import { GovernmentConstants } from './governmentConstants'; +import { MicrosoftAppCredentials } from './microsoftAppCredentials'; + +/** + * MicrosoftGovermentAppCredentials auth implementation + */ +export class MicrosoftGovernmentAppCredentials extends MicrosoftAppCredentials { + + /** + * Initializes a new instance of the [MicrosoftGovernmentAppCredentials](xref:botframework-connector.MicrosoftGovernmentAppCredentials) class. + * + * @param {string} appId The Microsoft app ID. + * @param {string} appPassword The Microsoft app password. + * @param {string} channelAuthTenant Optional. The oauth token tenant. + * @param {string} oAuthScope Optional. The scope for the token. + */ + constructor(appId: string, public appPassword: string, channelAuthTenant?: string, oAuthScope?: string) { + super(appId, appPassword, channelAuthTenant, oAuthScope); + } + + protected GetToChannelFromBotOAuthScope(): string { + return GovernmentConstants.ToChannelFromBotOAuthScope; + } + + protected GetToChannelFromBotLoginUrlPrefix(): string { + return GovernmentConstants.ToChannelFromBotLoginUrlPrefix; + } + + protected GetDefaultChannelAuthTenant(): string { + return GovernmentConstants.DefaultChannelAuthTenant; + } +} diff --git a/libraries/botframework-connector/src/auth/msalServiceClientCredentialsFactory.ts b/libraries/botframework-connector/src/auth/msalServiceClientCredentialsFactory.ts index e807aa513e..997915d4c7 100644 --- a/libraries/botframework-connector/src/auth/msalServiceClientCredentialsFactory.ts +++ b/libraries/botframework-connector/src/auth/msalServiceClientCredentialsFactory.ts @@ -70,11 +70,11 @@ export class MsalServiceClientCredentialsFactory implements ServiceClientCredent ); } - if (normalizedEndpoint === GovernmentConstants.ToChannelFromBotLoginUrl.toLowerCase()) { + if (normalizedEndpoint.startsWith(GovernmentConstants.ToChannelFromBotLoginUrlPrefix)) { return new MsalAppCredentials( this.clientApplication, appId, - GovernmentConstants.ToChannelFromBotLoginUrl, + undefined, audience || GovernmentConstants.ToChannelFromBotOAuthScope ); } diff --git a/libraries/botframework-connector/src/auth/passwordServiceClientCredentialFactory.ts b/libraries/botframework-connector/src/auth/passwordServiceClientCredentialFactory.ts index ec01185056..11e60bce7a 100644 --- a/libraries/botframework-connector/src/auth/passwordServiceClientCredentialFactory.ts +++ b/libraries/botframework-connector/src/auth/passwordServiceClientCredentialFactory.ts @@ -8,6 +8,7 @@ import type { ServiceClientCredentials } from '@azure/core-http'; import { AuthenticationConstants } from './authenticationConstants'; import { GovernmentConstants } from './governmentConstants'; import { MicrosoftAppCredentials } from './microsoftAppCredentials'; +import { MicrosoftGovernmentAppCredentials } from './microsoftGovernmentAppCredentials'; import { ServiceClientCredentialsFactory } from './serviceClientCredentialsFactory'; import { stringExt } from 'botbuilder-stdlib'; @@ -111,9 +112,8 @@ export class PasswordServiceClientCredentialFactory implements ServiceClientCred if (normalizedEndpoint?.startsWith(AuthenticationConstants.ToChannelFromBotLoginUrlPrefix)) { credentials = new MicrosoftAppCredentials(appId, this.password, this.tenantId, audience); - } else if (normalizedEndpoint === GovernmentConstants.ToChannelFromBotLoginUrl.toLowerCase()) { - credentials = new MicrosoftAppCredentials(appId, this.password, this.tenantId, audience); - credentials.oAuthEndpoint = loginEndpoint; + } else if (normalizedEndpoint?.startsWith(GovernmentConstants.ToChannelFromBotLoginUrlPrefix)) { + credentials = new MicrosoftGovernmentAppCredentials(appId, this.password, this.tenantId, audience); } else { credentials = new PrivateCloudAppCredentials( appId, diff --git a/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js b/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js new file mode 100644 index 0000000000..a69184a9c3 --- /dev/null +++ b/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js @@ -0,0 +1,17 @@ +const { MicrosoftAppCredentials, AuthenticationConstants } = require('../..'); +const assert = require('assert'); + +describe('MicrosoftAppCredentialsTestSuite', function () { + describe('MicrosoftAppCredentialsTestCase', function () { + it('AssertOAuthEndpointAndOAuthScope', function() { + var credentials = new MicrosoftAppCredentials("appId", "password", "tenantId", "audience"); + assert.strictEqual(AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + "tenantId", credentials.oAuthEndpoint); + assert.strictEqual("audience", credentials.oAuthScope); + + var credentials = new MicrosoftAppCredentials("appId", "password"); + assert.strictEqual(AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + AuthenticationConstants.DefaultChannelAuthTenant, credentials.oAuthEndpoint); + assert.strictEqual(AuthenticationConstants.ToChannelFromBotOAuthScope, credentials.oAuthScope); + }); + + }); +}); diff --git a/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js b/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js new file mode 100644 index 0000000000..8c0743711b --- /dev/null +++ b/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js @@ -0,0 +1,17 @@ +const { MicrosoftGovernmentAppCredentials, GovernmentConstants } = require('../..'); +const assert = require('assert'); + +describe('MicrosoftGovernmentAppCredentialsTestSuite', function () { + describe('MicrosoftGovernmentAppCredentialsTestCase', function () { + it('AssertOAuthEndpointAndOAuthScope', function() { + var credentials = new MicrosoftGovernmentAppCredentials("appId", "password", "tenantId", "audience"); + assert.strictEqual(GovernmentConstants.ToChannelFromBotLoginUrlPrefix + "tenantId", credentials.oAuthEndpoint); + assert.strictEqual("audience", credentials.oAuthScope); + + var credentials = new MicrosoftGovernmentAppCredentials("appId", "password"); + assert.strictEqual(GovernmentConstants.ToChannelFromBotLoginUrlPrefix + GovernmentConstants.DefaultChannelAuthTenant, credentials.oAuthEndpoint); + assert.strictEqual(GovernmentConstants.ToChannelFromBotOAuthScope, credentials.oAuthScope); + }); + + }); +}); From 1bf5c808c04e2f888a2d6452ba742a853882b1de Mon Sep 17 00:00:00 2001 From: fangyangci Date: Tue, 19 Dec 2023 10:20:51 +0800 Subject: [PATCH 2/2] fix js lint --- .../botbuilder/src/botFrameworkAdapter.ts | 20 +++++++++++----- .../botbuilder/src/botFrameworkHttpClient.ts | 2 +- .../src/auth/appCredentials.ts | 10 ++------ .../auth/microsoftGovernmentAppCredentials.ts | 3 +-- .../auth/microsoftAppCredentials.test.js | 24 ++++++++++++------- .../microsoftGovernmentAppCredentials.test.js | 23 +++++++++++------- 6 files changed, 47 insertions(+), 35 deletions(-) diff --git a/libraries/botbuilder/src/botFrameworkAdapter.ts b/libraries/botbuilder/src/botFrameworkAdapter.ts index eaa4f01a18..7df7cc2599 100644 --- a/libraries/botbuilder/src/botFrameworkAdapter.ts +++ b/libraries/botbuilder/src/botFrameworkAdapter.ts @@ -261,8 +261,7 @@ export class BotFrameworkAdapter this.settings.appPassword || '', this.settings.channelAuthTenant ); - } - else{ + } else { this.credentials = new MicrosoftAppCredentials( this.settings.appId, this.settings.appPassword || '', @@ -1634,10 +1633,19 @@ export class BotFrameworkAdapter ); } else { if (JwtTokenValidation.isGovernment(this.settings.channelService)) { - credentials = new MicrosoftGovernmentAppCredentials(appId, appPassword, this.settings.channelAuthTenant, oAuthScope); - } - else{ - credentials = new MicrosoftAppCredentials(appId, appPassword, this.settings.channelAuthTenant, oAuthScope); + credentials = new MicrosoftGovernmentAppCredentials( + appId, + appPassword, + this.settings.channelAuthTenant, + oAuthScope + ); + } else { + credentials = new MicrosoftAppCredentials( + appId, + appPassword, + this.settings.channelAuthTenant, + oAuthScope + ); } } diff --git a/libraries/botbuilder/src/botFrameworkHttpClient.ts b/libraries/botbuilder/src/botFrameworkHttpClient.ts index fd4a91eacd..1586cf64f5 100644 --- a/libraries/botbuilder/src/botFrameworkHttpClient.ts +++ b/libraries/botbuilder/src/botFrameworkHttpClient.ts @@ -16,7 +16,7 @@ import { ICredentialProvider, JwtTokenValidation, MicrosoftAppCredentials, - MicrosoftGovernmentAppCredentials + MicrosoftGovernmentAppCredentials, } from 'botframework-connector'; import { USER_AGENT } from './botFrameworkAdapter'; diff --git a/libraries/botframework-connector/src/auth/appCredentials.ts b/libraries/botframework-connector/src/auth/appCredentials.ts index 5caf20ebf9..7e3a82d30b 100644 --- a/libraries/botframework-connector/src/auth/appCredentials.ts +++ b/libraries/botframework-connector/src/auth/appCredentials.ts @@ -45,17 +45,11 @@ export abstract class AppCredentials implements ServiceClientCredentials { * @param channelAuthTenant Optional. The oauth token tenant. * @param oAuthScope The scope for the token. */ - constructor( - appId: string, - channelAuthTenant?: string, - oAuthScope: string = null - ) { + constructor(appId: string, channelAuthTenant?: string, oAuthScope: string = null) { this.appId = appId; this.tenant = channelAuthTenant; this.oAuthEndpoint = this.GetToChannelFromBotLoginUrlPrefix() + this.tenant; - this.oAuthScope = (oAuthScope && oAuthScope.length > 0) - ? oAuthScope - : this.GetToChannelFromBotOAuthScope(); + this.oAuthScope = oAuthScope && oAuthScope.length > 0 ? oAuthScope : this.GetToChannelFromBotOAuthScope(); } /** diff --git a/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts b/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts index 85d4affa6e..4eb51a887a 100644 --- a/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts +++ b/libraries/botframework-connector/src/auth/microsoftGovernmentAppCredentials.ts @@ -13,8 +13,7 @@ import { MicrosoftAppCredentials } from './microsoftAppCredentials'; * MicrosoftGovermentAppCredentials auth implementation */ export class MicrosoftGovernmentAppCredentials extends MicrosoftAppCredentials { - - /** + /** * Initializes a new instance of the [MicrosoftGovernmentAppCredentials](xref:botframework-connector.MicrosoftGovernmentAppCredentials) class. * * @param {string} appId The Microsoft app ID. diff --git a/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js b/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js index a69184a9c3..83ca0f8059 100644 --- a/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js +++ b/libraries/botframework-connector/tests/auth/microsoftAppCredentials.test.js @@ -3,15 +3,21 @@ const assert = require('assert'); describe('MicrosoftAppCredentialsTestSuite', function () { describe('MicrosoftAppCredentialsTestCase', function () { - it('AssertOAuthEndpointAndOAuthScope', function() { - var credentials = new MicrosoftAppCredentials("appId", "password", "tenantId", "audience"); - assert.strictEqual(AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + "tenantId", credentials.oAuthEndpoint); - assert.strictEqual("audience", credentials.oAuthScope); - - var credentials = new MicrosoftAppCredentials("appId", "password"); - assert.strictEqual(AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + AuthenticationConstants.DefaultChannelAuthTenant, credentials.oAuthEndpoint); - assert.strictEqual(AuthenticationConstants.ToChannelFromBotOAuthScope, credentials.oAuthScope); - }); + it('AssertOAuthEndpointAndOAuthScope', function () { + const credentials1 = new MicrosoftAppCredentials('appId', 'password', 'tenantId', 'audience'); + assert.strictEqual( + AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + 'tenantId', + credentials1.oAuthEndpoint + ); + assert.strictEqual('audience', credentials1.oAuthScope); + const credentials2 = new MicrosoftAppCredentials('appId', 'password'); + assert.strictEqual( + AuthenticationConstants.ToChannelFromBotLoginUrlPrefix + + AuthenticationConstants.DefaultChannelAuthTenant, + credentials2.oAuthEndpoint + ); + assert.strictEqual(AuthenticationConstants.ToChannelFromBotOAuthScope, credentials2.oAuthScope); + }); }); }); diff --git a/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js b/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js index 8c0743711b..01e9b7b166 100644 --- a/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js +++ b/libraries/botframework-connector/tests/auth/microsoftGovernmentAppCredentials.test.js @@ -3,15 +3,20 @@ const assert = require('assert'); describe('MicrosoftGovernmentAppCredentialsTestSuite', function () { describe('MicrosoftGovernmentAppCredentialsTestCase', function () { - it('AssertOAuthEndpointAndOAuthScope', function() { - var credentials = new MicrosoftGovernmentAppCredentials("appId", "password", "tenantId", "audience"); - assert.strictEqual(GovernmentConstants.ToChannelFromBotLoginUrlPrefix + "tenantId", credentials.oAuthEndpoint); - assert.strictEqual("audience", credentials.oAuthScope); - - var credentials = new MicrosoftGovernmentAppCredentials("appId", "password"); - assert.strictEqual(GovernmentConstants.ToChannelFromBotLoginUrlPrefix + GovernmentConstants.DefaultChannelAuthTenant, credentials.oAuthEndpoint); - assert.strictEqual(GovernmentConstants.ToChannelFromBotOAuthScope, credentials.oAuthScope); - }); + it('AssertOAuthEndpointAndOAuthScope', function () { + const credentials1 = new MicrosoftGovernmentAppCredentials('appId', 'password', 'tenantId', 'audience'); + assert.strictEqual( + GovernmentConstants.ToChannelFromBotLoginUrlPrefix + 'tenantId', + credentials1.oAuthEndpoint + ); + assert.strictEqual('audience', credentials1.oAuthScope); + const credentials2 = new MicrosoftGovernmentAppCredentials('appId', 'password'); + assert.strictEqual( + GovernmentConstants.ToChannelFromBotLoginUrlPrefix + GovernmentConstants.DefaultChannelAuthTenant, + credentials2.oAuthEndpoint + ); + assert.strictEqual(GovernmentConstants.ToChannelFromBotOAuthScope, credentials2.oAuthScope); + }); }); });