diff --git a/EXAMPLES.md b/EXAMPLES.md index 05789483..ea7ce100 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -193,6 +193,15 @@ export async function middleware(request: NextRequest) { > [!IMPORTANT] > The `request` object must be passed as a parameter to the `getSession(request)` method when called from a middleware to ensure that any updates to the session can be read within the same request. +## Accessing the idToken +`idToken` can be accessed from the session in the following way: + +```js +const session = await auth0.getSession(); +const idToken = session.tokenSet.idToken; +``` + + ## Updating the session The `updateSession` method could be used to update the session of the currently authenticated user in the App Router, Pages Router, and middleware. If the user does not have a session, an error will be thrown. diff --git a/src/server/auth-client.test.ts b/src/server/auth-client.test.ts index 83997a96..dc6fd43c 100644 --- a/src/server/auth-client.test.ts +++ b/src/server/auth-client.test.ts @@ -2182,6 +2182,7 @@ ca/T0LLtgmbMmxSv/MmzIg== tokenSet: { accessToken: DEFAULT.accessToken, refreshToken: DEFAULT.refreshToken, + idToken: expect.stringMatching(/^eyJhbGciOiJSUzI1NiJ9\..+\..+$/), expiresAt: expect.any(Number) }, internal: { @@ -2289,6 +2290,7 @@ ca/T0LLtgmbMmxSv/MmzIg== }, tokenSet: { accessToken: DEFAULT.accessToken, + idToken: expect.any(String), refreshToken: DEFAULT.refreshToken, expiresAt: expect.any(Number) }, @@ -2633,6 +2635,7 @@ ca/T0LLtgmbMmxSv/MmzIg== tokenSet: { accessToken: DEFAULT.accessToken, refreshToken: DEFAULT.refreshToken, + idToken: expect.any(String), expiresAt: expect.any(Number) }, internal: { @@ -3026,6 +3029,7 @@ ca/T0LLtgmbMmxSv/MmzIg== tokenSet: { accessToken: DEFAULT.accessToken, refreshToken: DEFAULT.refreshToken, + idToken: expect.any(String), expiresAt: expect.any(Number) }, internal: { @@ -3120,6 +3124,7 @@ ca/T0LLtgmbMmxSv/MmzIg== tokenSet: { accessToken: DEFAULT.accessToken, refreshToken: DEFAULT.refreshToken, + idToken: expect.any(String), expiresAt: expect.any(Number) }, internal: { @@ -3249,6 +3254,7 @@ ca/T0LLtgmbMmxSv/MmzIg== tokenSet: { accessToken: DEFAULT.accessToken, refreshToken: DEFAULT.refreshToken, + idToken: expect.any(String), expiresAt: expect.any(Number) }, internal: { diff --git a/src/server/auth-client.ts b/src/server/auth-client.ts index a30900c3..05d1b67c 100644 --- a/src/server/auth-client.ts +++ b/src/server/auth-client.ts @@ -490,6 +490,7 @@ export class AuthClient { user: idTokenClaims, tokenSet: { accessToken: oidcRes.access_token, + idToken: oidcRes.id_token, scope: oidcRes.scope, refreshToken: oidcRes.refresh_token, expiresAt: Math.floor(Date.now() / 1000) + Number(oidcRes.expires_in) @@ -565,7 +566,6 @@ export class AuthClient { } ); } - const res = NextResponse.json({ token: updatedTokenSet.accessToken, scope: updatedTokenSet.scope, @@ -684,6 +684,7 @@ export class AuthClient { const updatedTokenSet = { ...tokenSet, // contains the existing `iat` claim to maintain the session lifetime accessToken: oauthRes.access_token, + idToken: oauthRes.id_token, expiresAt: accessTokenExpiresAt }; diff --git a/src/types/index.ts b/src/types/index.ts index fd6d5e87..fddb60b5 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,5 +1,6 @@ export interface TokenSet { accessToken: string; + idToken?: string; scope?: string; refreshToken?: string; expiresAt: number; // the time at which the access token expires in seconds since epoch