Hello everyone, I’m doing a project with nest js, next js and next auth. When I log in, my access token doesn’t work in my validator in Nest js. But, when I login with curl with url ‘…/token’ it works.
I’m using a custom API to validate the token and normal web application
Next auth: […nextauth].ts
import { Session } from "@/types/next-auth";
import NextAuth from "next-auth";
import Auth0Provider from "next-auth/providers/auth0";
export default NextAuth({
  cookies: {
    sessionToken: {
      name: "__Secure-next-auth.session-token",
      options: {
        httpOnly: true,
        sameSite: "lax",
        path: "/",
        secure: true,
        domain: "localhost",
      },
    },
    callbackUrl: {
      name: "__Secure-next-auth.callback-url",
      options: {
        sameSite: "lax",
        path: "/",
        secure: true,
        domain: "localhost",
      },
    },
    pkceCodeVerifier: {
      name: "__Secure-next-auth.pkce.code_verifier",
      options: {
        httpOnly: true,
        sameSite: "lax",
        path: "/",
        secure: true,
        domain: "localhost",
      },
    },
    state: {
      name: "__Secure-next-auth.state",
      options: {
        httpOnly: true,
        sameSite: "lax",
        path: "/",
        secure: true,
        domain: "localhost",
      },
    },
  },
  providers: [
    Auth0Provider({
      clientId: process.env.AUTH0_CLIENT_ID as string,
      clientSecret: process.env.AUTH0_CLIENT_SECRET as string,
      issuer: process.env.AUTH0_ISSUER_BASE_URL,
      token: {
        params: {
          audience: encodeURI(process.env.AUTH0_AUDIENCE as string),
        },
      },
      authorization: {
        params: {
          audience: encodeURI(process.env.AUTH0_AUDIENCE as string),
        },
      },
      idToken: true,
    }),
  ],
  callbacks: {
    session: async ({ session, token }: any) => {
      let universalUser: Session["universalUser"];
      let accessToken: Session["accessToken"];
      if (token) {
        universalUser = {
          auth0: {
            sub: token.sub ?? "",
            name: token.name ?? "",
            email: token.email ?? "",
            picture: token.picture ?? "",
          },
        };
        accessToken = token.accessToken as string;
        return { ...session, universalUser, accessToken };
      }
      return session;
    },
    async jwt({ token, account }: any) {
      if (account) {
        token.accessToken = account.access_token;
      }
      return token;
    },
    async redirect({ baseUrl }: any) {
      return baseUrl;
    },
  },
});
My validator in nest js:
import { Injectable } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import * as dotenv from "dotenv";
import { passportJwtSecret } from "jwks-rsa";
import { ExtractJwt, Strategy } from "passport-jwt";
dotenv.config();
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super({
      secretOrKeyProvider: passportJwtSecret({
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
        jwksUri: `hidden_url=D/.well-known/jwks.json`,
      }),
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      audience: "hidden_url=D",
      issuerBaseURL: "hidden_url=D",
      tokenSigningAlg: "RS256",
    });
  }
  validate(payload: unknown): unknown {
    return payload;
  }
}
