OAuth 2 cùng với Zoom Apis
Chào các bạn hôm nay mình sẽ hướng dẫn Oauth 2 với Zoom Apis.
Bài hướng dẫn để public app OAuth zoom lên Zoom marketplace nhanh chóng qua kinh nghiệm của mình, vui lòng xem tại Public Zoom Oauth App lên Marketplace.
Dưới đây là sơ đồ quá trình Client thao tác với Server Zoom Apis để lấy được dữ liệu.
Trước tiên hãy tạo một OAuth Zoom App, hãy làm theo Flow trong hướng dẫn của Zoom: Create an OAuth App
Sau khi tạo xong, trong lúc chờ để app Oauth của bạn được public lên thị trường Zoom để sử dụng Public ( nếu cần thiết ), bài viết này mình sẽ hướng dẫn ở chế độ Development nhé, bạn dán code này vào project của mình.
<a href="https://zoom.us/oauth/authorize?response_type=code&client_id=[clientId]&redirect_uri=https://yourapp.com" target="_blank" rel="noopener noreferrer"><img src="https://marketplacecontent.zoom.us/zoom_marketplace/img/add_to_zoom.png" height="32" alt="Add to ZOOM" /></a>
hoặc có thể design Button và thêm code link để mở Login & Consent screen Zoom
https://zoom.us/oauth/authorize?response_type=code&client_id=[clientId]&redirect_uri=https://yourapp.com
Button này có chức năng Login & Consent screen, sau khi thành công sẽ redirect về app của mình với một mã Code.
https://yourapp.com/?code=obBEe8ewaL_KdyNjniT4KPd8ffDWt9fGB
CliendID sẽ lấy từ hình ảnh dưới.
Sau khi có Code, chúng ta sẽ thực hiện Request lên server để lấy mã Access_Token và dùng nó thao tác với Server.
Chi tiết tham khảo: OAuth with Zoom
VD code lấy dữ liệu token bằng cách gọi lên api của mình:
const getZoomOAuth = async (req, res) => {
const {code, redirect_uri, user} = req.body;
const userData = getUser(req);
const {authenticationCodeBase64} = getZoomSecret(req); // Authentication code của owner
const config = {
method: 'post',
headers: {'Authorization': `Basic ${authenticationCodeBase64}`},
url: 'https://zoom.us/oauth/token' +
`/?code=${code}&grant_type=authorization_code&redirect_uri=${redirect_uri}`,
};
try {
const {data} = await axios(config).catch(error => Promise.reject(error));
if (data) {
// lưu lại các thuộc tính gồm refresh_token để lấy lại access_token nếu hết hạn sử dụng (access_token hạn sử dụng 1h)
const userDocRef = admin.firestore().
doc(req.Collection + `/${userData.username}`);
const userZoomId = decoder(data.access_token).uid;
await userDocRef.set({
email: user.email,
id: userData.username,
userZoomId,
zoomOAuth: data,
createdAt: moment().format(),
updatedAt: moment().format(),
}, {merge: true});
return res.status(200).send(data);
}
res.status(400).send('Get accessToken Zoom Apps Error');
} catch (e) {
console.log('Error', e);
res.status(500).send(e.toString());
}
};
Lưu ý, các request này bắt buộc phải request từ server lên server của Zoom, nếu request từ Client sẽ bị thông báo lỗi "Cors Error" Xem thêm tại: https://marketplace.zoom.us/docs/guides/auth/oauth