Tích hợp OAuth2

Cơ chế xác thực OAuth2 cho phép người dùng cuối tự động phân quyền cho Nhà Phát Triển truy cập thông tin tài khoản của họ trên Casso.

Trước khi bắt đầu

Trước khi bắt đầu sử dụng Oauth2 của Casso, bạn cần phải:

Cách hoạt động

Casso hỗ trợ Oauth 2.0 Authorization Code grant type, được chia thành 4 bước cơ bản như sau:

  1. Ứng dụng của bạn sẽ mở một cửa sổ trình duyệt để đưa người dùng đến Casso OAuth2.

  2. Người dùng xem xét các quyền được yêu cầu và cấp quyền truy cập ứng dụng.

  3. Người dùng được chuyển hướng trở lại ứng dụng với mã ủy quyền(authorization code) trong chuỗi truy vấn(query params).

  4. Ứng dụng gửi yêu cầu đến Casso OAuth2 để trao đổi mã ủy quyền(authorization code) để lấy access token.

Hướng dẫn

Lấy OAuth2 token

Bước 1: Tạo một authorization URL và hướng người dùng đến Oauth2 của Casso.

Khi một người dùng truy vấn tới hệ thống Oauth2 của Casso, đầu tiên sẽ phải tạo một authorization URL. Điều này sẽ xác định ứng dụng và phạm vi tài nguyên mà ứng dụng yêu cầu quyền truy cập thay cho người dùng. Các tham số truy vấn bạn có thể truyền như một phần của authorization URL được hiển thị ở dưới.

Khi bạn đã tạo xong authorization URL của mình, hãy bắt đầu tiến trình OAuth2 bằng cách đưa người dùng đến URL đó.

Ví dụ

Sử dụng một server-side redirect:

// Build the auth URL
const authUrl =
  'https://oauth.casso.vn/auth/authorize' +
  `?client_id=${encodeURIComponent(CLIENT_ID)}` +
  `&scope=${encodeURIComponent(SCOPES)}` +
  `&redirect_uri=${encodeURIComponent(REDIRECT_URI)}` +
  `&response_type=${encodeURIComponent(RESPONSE_TYPE)}`;

// Redirect the user
return res.redirect(authUrl);

Sử dụng đương dẫn HTML:

<a href="https://oauth.casso.vn/auth/authorize?scope=webhook%20transaction&redirect_uri=https://www.example.com/auth-callback&client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">One click to Casso</a>

Bước 2: Casso nhắc nhở người dùng chấp thuận

Casso hiển thị cửa sổ cho người dùng đồng ý, hiển thị tên ứng dụng của bạn và mô tả ngắn gọn về các dịch vụ API của Casso mà họ đang yêu cầu quyền truy cập. Sau đó, người dùng có thể cấp quyền truy cập doanh nghiệp của họ cho ứng dụng của bạn.

Ứng dụng của bạn không thực hiện bất kỳ điều gì ở giai đoạn này. Sau khi quyền truy cập được người dùng cấp, Casso OAuth2 sẽ gửi kết quả đến Callback URL được xác định trong authorization URL.

Bước 3: Xử lý phản hồi của OAuth2

Khi người dùng đã hoàn tất lời nhắc đồng ý từ Bước 2, OAuth 2.0 server sẽ gửi yêu cầu GET tới redirect URI được chỉ định trong authorization URL của bạn. Nếu không có vấn đề gì và người dùng chấp thuận yêu cầu truy cập, yêu cầu tới redirect URI sẽ được trả về với tham số truy vấn mã được đính kèm. Nếu người dùng không cấp quyền truy cập, sẽ gửi một yêu cầu lỗi về redirect URI.

Ví dụ:

app.get('/oauth-callback', async (req, res) => {
  if (req.query.code) {
    // Handle the received code
  }
});

Bước 4: Trao đổi authorization code để lấy token

Sau khi ứng dụng của bạn nhận được authorization code từ OAuth server, ứng dụng có thể trao đổi mã đó để lấy access tokenrefresh token bằng cách gửi yêu cầu POST URL-form encoded tới https://oauth.casso.vn/auth/token với các giá trị được hiển thị bên dưới. Cung cấp base64 của client_id:client_secret dưới dạng basic token trong Authorization HTTP Header.

Ví dụ:

const formData = {
  grant_type: 'authorization_code',
  client_id: CLIENT_ID,
  redirect_uri: REDIRECT_URI,
  code: req.query.code
};

request.post(
  'https://oauth.casso.vn/auth/token', 
  { 
    form: formData,
    headers: {
      Authorization: `Basic ${Buffer.from(CLIENT_ID+":"+CLIENT_SECRET).toString('base64')}`
    } 
  }, (err, data) => {
  // Handle the returned tokens
}

Nội dung của phản hồi mã thông báo sẽ là dữ liệu JSON có dạng:

{
    "refresh_token":"f71345a6-f53d-4191-903c-3823d9adb9e",
    "access_token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxODI5IiwiZXhwIjoxNjMwOTQxMDI4LCeJpYXQiOjE2MzA5MTk0M9.mYA8HFw0HqyoLJAocIzffNw4aG2kA8sHlf2UYNIKhHlazWK2ajbj06Bil4_0NxS6Jiamw3E9Q28tpiU7f9tYA",
    "expires_in":21600,
    "token_type": "bearer"
}

Note: Access token sẽ hết hạn sau số giây được cung cấp trong trường expires_in của phản hồi (sáu giờ). Để biết thông tin về cách nhận access token mới, hãy xem Lấy lại Oauth2 token.

Sử dụng OAuth2 token

Sau khi hoàn tất quy trình authorization code, ứng dụng của bạn được ủy quyền thay người dùng gửi request. Để thực hiện việc này, cung cấp access token dưới dạng bearer token trong Authorization HTTP Header.

Ví dụ:

request.get('https://oauth.casso.vn/v2/transactions?fromDate=2021-04-01&page=4',
  {
    headers: {
      'Authorization': `Bearer ${ACCESS_TOKEN}`,
      'Content-Type': 'application/json'
    }
  },
  (err, data) => {
    // Handle the API response
  }
);

Lấy lại OAuth 2 token

OAuth access token hết hạn định kỳ. Điều này nhằm đảm bảo rằng nếu chúng bị xâm nhập, những kẻ tấn công sẽ chỉ có quyền truy cập trong một thời gian ngắn. Tuổi thọ của access token (sáu giờ theo mặc định) được chỉ định trong trường expires_in khi authorization code được trao đổi lấy access token.

Ứng dụng của bạn có thể trao đổi refresh token đã nhận để lấy access token mới bằng cách gửi yêu cầu POST URL-form encoded tới https://oauth.casso.com/auth/token với các giá trị bên dưới. Cung cấp base64 của client_id:client_secret dưới dạng basic token trong Authorization HTTP Header.

Ví dụ:

const formData = {
  grant_type: 'refresh_token',
  client_id: CLIENT_ID,
  redirect_uri: REDIRECT_URI,
  refresh_token: REFRESH_TOKEN
};

request.post(
  'https://oauth.casso.vn/auth/token', 
  { 
    form: formData, 
    headers: {
      Authorization: `Basic ${Buffer.from(CLIENT_ID+":"+CLIENT_SECRET).toString('base64')}`
    } 
  }, (err, data) => {
  // Handle the returned tokens
}

Nội dung của phản hồi mã thông báo sẽ là dữ liệu JSON có dạng:

{
    "access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxODI5IiwiZXhwjsIjoxNjMwOTQyODc4LCJpYXQiOjE2MzA5MjEyNzh9.qh0_UkSudFUu_WabtW9wu_j57b3VJ5WEWASLpSklPfrb-EKzrYl4Z4PYkrPIPrLseCPnSXlIDsixp8OkBrh_BW4g",
    "token_type": "bearer",
    "expires_in": 21600
}

Access token mới có thể được sử dụng để thực hiện request thay cho người dùng. Khi access token mới hết hạn, bạn có thể thực hiện lại các bước tương tự để lấy mã mới.

Refresh token không có thời gian hết hạn. Mỗi lần access token hết hạn, bạn thực hiện lại các bước tương tự với refresh token để lấy mã mới.

Last updated