7

Size: a a a
7
EL
AK
IK
BB
IK
IK
AK
7
ВС
ВС
BB
ИР
req.isAuthenticated()
возвращает false
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const MongoStore = connectMongo(session);
app.use(helmet());
app.enableCors();
app.use(cookieParser('secret'));
app.use(
session({
store: new MongoStore({
url: 'mongodb://localhost:27017/test-mongo'
}),
secret: 'secret',
resave: false,
saveUninitialized: false,
rolling: true,
cookie: {
maxAge: 30 * 60 * 1000, // 30 минуты
httpOnly: true,
},
}),
);
app.use(passport.initialize());
app.use(passport.session());
@Module({
imports: [
UserModule,
TokenModule,
HttpModule,
PassportModule.register({ session: true }),
],
providers: [OpenIdConnectStrategyFactory, SessionSerializer, AuthService],
controllers: [AuthController],
exports: [AuthService],
})
export class AuthModule {}
@Injectable()
export class OpenIdConnectStrategy extends PassportStrategy(Strategy, 'oidc') {
client: Client;
constructor(private readonly configService: ConfigService, client: Client) {
super({
client: client,
params: {
redirect_uri: configService.get<string>('KEYCLOAK_REDIRECT_URI'),
scope: configService.get<string>('KEYCLOAK_SCOPE'),
},
passReqToCallback: false,
usePKCE: false,
});
this.client = client;
}
async validate(tokenset: TokenSet): Promise<any> {
const userinfo: UserinfoResponse = await this.client.userinfo(tokenset);
try {
const id_token = tokenset.id_token;
const access_token = tokenset.access_token;
const refresh_token = tokenset.refresh_token;
const user = {
id_token,
access_token,
refresh_token,
userinfo,
};
return user;
} catch (err) {
throw new UnauthorizedException();
}
}
}
@Injectable()
export class AuthenticatedGuard implements CanActivate {
async canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest();
if (request.isAuthenticated()) {
return true;
}
throw new UnauthorizedException();
}
}
const buildOpenIdClient = async (configService: ConfigService) => {
const TrustIssuer = await Issuer.discover(
configService.get<string>('KEYCLOAK_ISSUER') +
'auth/realms/' +
configService.get<string>('KEYCLOAK_REALM') +
'/.well-known/openid-configuration',
);
const client = new TrustIssuer.Client({
client_id: configService.get<string>('KEYCLOAK_CLIENT_ID'),
client_secret: configService.get<string>('KEYCLOAK_CLIENT_SECRET'),
});
return client;
};
export const OpenIdConnectStrategyFactory = {
provide: 'OpenIdConnectStrategy',
useFactory: async (configService: ConfigService) => {
const client = await buildOpenIdClient(configService);
return new OpenIdConnectStrategy(configService, client);
},
inject: [ConfigService],
};
IK
IK
ИР
ИР
ИР