Следуя документации для гнезда js и паспорта, у меня есть следующая реализация.
Я начал с настройки гнезда по умолчанию, новый тест проверки гнезда, затем я добавил папку аутентификации в sr * 1033. * папка, в которой находятся расположенные ниже модули aad-auth.gaurd, aad.strategy и auth.module.
Затем я добавил новую охрану к маршруту по умолчанию в app.controller.ts
I подтвердил настройку Azure App Registration, успешно использовав ее в качестве C# Web API, поэтому сторона Azure настроена правильно.
Мне не нужно выдавать JWT, поскольку это передний конец Azure AD, этот токен-носитель передается в API в заголовке. Там нет никаких полезных ошибок, просто 500 внутренних ошибок. Я замечаю много запросов Github на документацию по внедрению Azure AD с гнездом вместе с любым провайдером потока OAuth (facebook, google), но пока этот запрос все еще открыт.
Не уверен, что реализовано неправильно Любые рекомендации или предложения будут оценены по исправлению кода ниже.
Документация: Гнездо JS: https://docs.nestjs.com/techniques/authentication Паспорт: http://www.passportjs.org/packages/passport-azure-ad/
// auth / aad.strategy.ts
import { BearerStrategy } from 'passport-azure-ad';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, ValidationPipe } from '@nestjs/common';
@Injectable()
export class AADStrategy extends PassportStrategy(BearerStrategy) {
constructor () {
super({
identityMetadata: "https://login.microsoftonline.com/<tenant>.onmicrosoft.com/v2.0/.well-known/openid-configuration",
clientID: "<clientid>",
issuer: null,
audience: null,
loggingLevel: "info",
passReqToCallback: false
})
}
async validate(payload: any){
console.log(payload);
return(payload);
}
}
// auth / aad-auth.gaurd
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class AADAuthGaurd extends AuthGuard('aad') {}
// auth / auth.module.ts
import { Module } from '@nestjs/common';
import { AADStrategy } from './aad.strategy'
@Module({
imports: [
AADStrategy,
],
providers: [
AADStrategy,
]
})
export class AuthModule {}
// app.controller.ts
import { Controller, Get, UseGuards } from '@nestjs/common';
import { AppService } from './app.service';
import { AADAuthGaurd } from './auth/aad-auth.gaurd';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@UseGuards(AADAuthGaurd)
@Get()
getHello(): string {
return this.appService.getHello();
}
}