JWT Of the Access Token
And why it's not supposed to be read on the client side.
Manually decoding the access token
import { decodeJwt } from 'oidc-spa/decode-jwt';
const decodedAccessToken = decodeJwt(await oidc.getAccessToken());import { oidcSpa } from "oidc-spa/react-spa";
import { decodeJwt } from "oidc-spa/decode-jwt";
export const {
bootstrapOidc,
getOidc,
// ...
} = oidcSpa
.withExpectedDecodedIdTokenShape({ /* ... */ })
.createUtils();
let decodedAccessToken: Record<string, unknown> | undefined;
getOidc().then(async oidc => {
if (!oidc.isUserLoggedIn) {
return;
}
const accessToken = await oidc.getAccessToken();
decodedAccessToken = decodeJwt(accessToken);
// Using Zod to validate the shape is recommended as well:
// decodedAccessToken = DecodedAccessTokenSchema.parse(decodeJwt(accessToken));
});
export function getDecodedAccessToken(): Record<string, unknown> | undefined {
if (decodedAccessToken === undefined) {
throw new Error("Decoded access token accessed too early. Only use in a component inside <OidcInitializationGate />.");
}
return decodedAccessToken;
}Last updated
Was this helpful?