CLASSFUNC BLOG
We Share Our Knowledge
OAuth 2 cùng với Zoom Apis
Dam Van Duong
21 Th09 2020 11:07

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.

1570826762485.png

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.

Ảnh chụp Màn hình 0002-09-21 lúc 10.44.00.png

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