Hello!
I have a JWT token retrieval method which is used to get video recordings for a certain period (https://api.zoom.us/v2/videosdk/recordings).
The code below works locally and generates a valid token.
private async getToken(): Promise<string> {
try {
const iat = Math.round(new Date().getTime() / 1000);
const exp = iat + 60 * 60 * 60;
const oHeader = { alg: 'HS256', typ: 'JWT' };
const oPayload = {
iss: process.env.ZOOM_VIDEO_SDK_KEY,
iat: iat,
exp: exp,
};
const sHeader = JSON.stringify(oHeader);
const sPayload = JSON.stringify(oPayload);
const videosdkApiToken = KJUR.jws.JWS.sign(
'HS256',
sHeader,
sPayload,
process.env.ZOOM_VIDEO_SDK_SECRET,
);
return videosdkApiToken;
} catch (error) {
this.logger.error(error);
throw error;
}
}
async getVideosBySession(sessionIds: string[]): Promise<string[]> {
const apiToken = await this.getToken();
const dateFrom = String(format(subDays(new Date(), 1), 'yyyy-MM-dd'));
const dateTo = String(format(new Date(), 'yyyy-MM-dd'));
const { data } = await lastValueFrom(
this.httpService.get(
`https://api.zoom.us/v2/videosdk/recordings?from=${dateFrom}&to=${dateTo}`,
{
headers: {
Authorization: `Bearer ${apiToken}`,
},
},
),
);
}
But when I run it on the server, I get the following error:
{"message":"Request failed with status code 401","name":"AxiosError","config":{"transitional":{"silentJSONParsing":true,"forcedJSONParsing":true,"clarifyTimeoutError":false},"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"maxBodyLength":-1,"env":{},"headers":{"Accept":"application/json, text/plain, */*","Authorization":"Bearer ...........OiJIUzI1NiIsInR5c.................","User-Agent":"axios/0.27.2"},"method":"get","url":"https://api.zoom.us/v2/videosdk/recordings?from=2023-02-07&to=2023-02-08"},"code":"ERR_BAD_REQUEST","status":401}