updating getMsGraphAuth with scopes parameter
This commit is contained in:
@@ -11,8 +11,9 @@ export class AzureAdStrategy extends PassportStrategy(
|
||||
) {
|
||||
constructor(@Inject(AUTH_OPTIONS) authOptions: AuthOptions) {
|
||||
super({
|
||||
identityMetadata: `https://login.microsoftonline.com/${authOptions.tenantId}/v2.0/.well-known/openid-configuration`,
|
||||
identityMetadata: `https://login.microsoftonline.com/${authOptions.tenantId}/.well-known/openid-configuration`,
|
||||
clientID: authOptions.clientId,
|
||||
audience: `api://${authOptions.clientId}`,
|
||||
loggingLevel: 'info',
|
||||
loggingNoPII: false
|
||||
})
|
||||
|
||||
@@ -1,20 +1,39 @@
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { MsGraphOptions } from './ms-graph.interface';
|
||||
import { MS_GRAPH_OPTIONS } from './ms-graph.constants';
|
||||
import { ClientSecretCredential } from '@azure/identity';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { TokenCredentialAuthenticationProvider } from '@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials'
|
||||
import { AuthenticationResult, ConfidentialClientApplication, OnBehalfOfRequest } from '@azure/msal-node';
|
||||
|
||||
@Injectable()
|
||||
export class MsGraphService {
|
||||
constructor(@Inject(MS_GRAPH_OPTIONS) private msGraphOptions: MsGraphOptions) {}
|
||||
|
||||
async getMsGraphClient(): Promise<Client> {
|
||||
const credential = new ClientSecretCredential(this.msGraphOptions.tenantId, this.msGraphOptions.clientId, this.msGraphOptions.clientSecret);
|
||||
const authProvider = new TokenCredentialAuthenticationProvider(credential, { scopes: ['.default'] });
|
||||
const client = Client.initWithMiddleware({
|
||||
debugLogging: true,
|
||||
authProvider
|
||||
async getMsGraphAuth(accessToken: string, scopes: string[]): Promise<string> {
|
||||
try {
|
||||
const oboRequest: OnBehalfOfRequest = {
|
||||
oboAssertion: accessToken,
|
||||
scopes: scopes
|
||||
}
|
||||
const cca = new ConfidentialClientApplication({
|
||||
auth: {
|
||||
clientId: this.msGraphOptions.clientId,
|
||||
clientSecret: this.msGraphOptions.clientSecret,
|
||||
authority: `https://login.microsoftonline.com/${this.msGraphOptions.tenantId}`
|
||||
}
|
||||
});
|
||||
const authenticationResult: AuthenticationResult = await cca.acquireTokenOnBehalfOf(oboRequest);
|
||||
|
||||
return authenticationResult.accessToken
|
||||
} catch (error) {
|
||||
return error
|
||||
}
|
||||
}
|
||||
|
||||
async getMsGraphClientDelegated(accessToken): Promise<Client> {
|
||||
const client = await Client.init({
|
||||
authProvider: (done) => {
|
||||
done(null, accessToken);
|
||||
}
|
||||
});
|
||||
|
||||
return client;
|
||||
|
||||
Reference in New Issue
Block a user