CX
13/8/2026
blog.summarize
blog.share_blog
API tạo bộ thông tin xác thực phiên để ứng dụng khách sử dụng khi gửi các yêu cầu cần đăng nhập vào workspace.
Cogover hỗ trợ hai nhóm API với cơ chế xác thực khác nhau:
| Dạng URI | Cơ chế xác thực |
|---|---|
/bapi/v{N}/... |
API Key qua header Authorization: Bearer {tokenId}-{secretToken}. |
/api/v{N}/... |
Phiên Web App qua các cookie HttpSessionId, XSRF-TOKEN, AuthToken và các header CSRF/XSRF. |
Nếu chức năng cần gọi chỉ có endpoint dạng /api/v{N} và không có endpoint tương ứng dạng /bapi/v{N}, ứng dụng có thể dùng POST /bapi/v1/auth-token để đổi API Key thành bộ thông tin xác thực phiên. Sau đó, dùng bộ thông tin này để gọi endpoint /api/v{N} giống như Web App chạy trên trình duyệt.
Luồng sử dụng:
POST /bapi/v1/auth-token bằng API Key.HttpSessionId, XSRF-TOKEN và AuthToken./api/v{N}.XSRF-TOKEN trong cả hai header x-csrf-token và x-xsrf-token.Sử dụng API Key của workspace theo định dạng:
Authorization: Bearer {tokenId}-{secretToken}API Key phải còn hiệu lực và có quyền truy cập workspace tương ứng.
Không đưa API Key vào URL, mã nguồn phía trình duyệt, log hoặc nội dung có thể được chia sẻ công khai.
POST /bapi/v1/auth-tokenRequest không yêu cầu dữ liệu đầu vào. Có thể gửi JSON rỗng {}.
curl --location --request POST 'https://{workspace-domain}/bapi/v1/auth-token' \
--header 'Authorization: Bearer {tokenId}-{secretToken}' \
--header 'Content-Type: application/json' \
--data '{}'Thay các giá trị sau:
{workspace-domain}: tên miền dùng để truy cập workspace.{tokenId}-{secretToken}: API Key đầy đủ được cấp cho ứng dụng.HTTP status: 200 OK
{
"r": 0,
"msg": "Success",
"data": {
"HttpSessionId": "c77c8ecb-af6f-4a49-ad02-32c7e5869295-yvxlf0ug",
"HttpSessionExpiresAt": 1786672800,
"XSRF-TOKEN": "2LHTC9RD8I19BAXJPWZOJC6ZJNSGMJVTDTJXK66R",
"AuthToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"AuthTokenExpiresAt": 1817694862
},
"workspaceId": "WSkdGop6AEvA9",
"workspaceDomain": "example",
"personnelId": "PER123"
}| Trường | Kiểu | Mô tả |
|---|---|---|
r |
Integer | Mã kết quả. Giá trị 0 nghĩa là thành công. |
msg |
String | Thông báo kết quả. |
data.HttpSessionId |
String | ID phiên HTTP. |
data.HttpSessionExpiresAt |
Integer | Thời điểm phiên HTTP hết hạn, theo Unix timestamp (giây). |
data.XSRF-TOKEN |
String | Token dùng để bảo vệ request khỏi giả mạo CSRF. |
data.AuthToken |
String | Token xác thực của workspace. |
data.AuthTokenExpiresAt |
Integer | Thời điểm token xác thực hết hạn, theo Unix timestamp (giây); bằng claim exp trong JWT. |
workspaceId |
String | ID workspace của phiên vừa tạo. |
workspaceDomain |
String | Tên miền của workspace. |
personnelId |
String | ID nhân sự tương ứng với tài khoản trong workspace. |
Response thiết lập ba cookie HttpSessionId, XSRF-TOKEN và AuthToken. Với client hỗ trợ cookie tự động, hãy lưu và gửi lại các cookie này trong các request tiếp theo.
Với client tự quản lý cookie, gửi request cần xác thực theo ví dụ:
Cookie: HttpSessionId={HttpSessionId}; XSRF-TOKEN={XSRF-TOKEN}; AuthToken={AuthToken}
x-csrf-token: {XSRF-TOKEN}
x-xsrf-token: {XSRF-TOKEN}Giá trị trong hai header x-csrf-token, x-xsrf-token phải giống nhau và phải bằng giá trị cookie XSRF-TOKEN.
/api/v{N} bằng phiên vừa tạocurl --url 'https://{workspace-domain}/api/v1/accounts?limit=20&order=last_join_time&sort=desc&status=ACTIVE,INVITED' \
--header 'accept: application/json, text/plain, */*' \
--cookie 'HttpSessionId={HttpSessionId}; XSRF-TOKEN={XSRF-TOKEN}; AuthToken={AuthToken}' \
--header 'x-csrf-token: {XSRF-TOKEN}' \
--header 'x-xsrf-token: {XSRF-TOKEN}'Trình duyệt sẽ tự gửi các cookie đã lưu tới đúng workspace. Mã JavaScript của Web App đọc cookie XSRF-TOKEN và đặt cùng giá trị vào hai header CSRF/XSRF trước khi gửi request.
Ứng dụng nên tạo lại phiên trước HttpSessionExpiresAt và không tiếp tục sử dụng AuthToken sau AuthTokenExpiresAt. Thời gian phiên có thể được gia hạn khi người dùng tiếp tục hoạt động; hãy ưu tiên giá trị mới nhất do API trả về nếu ứng dụng gọi lại endpoint này.
# Tạo phiên và lưu cookie vào file cookies.txt
curl --location --request POST 'https://{workspace-domain}/bapi/v1/auth-token' \
--header 'Authorization: Bearer {tokenId}-{secretToken}' \
--header 'Content-Type: application/json' \
--cookie-jar cookies.txt \
--data '{}'Khi gọi API /api/v{N} tiếp theo, dùng --cookie cookies.txt và gửi giá trị XSRF-TOKEN trong cả hai header x-csrf-token và x-xsrf-token.
AuthToken, HttpSessionId và XSRF-TOKEN là thông tin nhạy cảm.| HTTP status | Ý nghĩa | Cách xử lý đề xuất |
|---|---|---|
401 |
Thiếu API Key, API Key sai định dạng, không tồn tại hoặc đã hết hạn. | Kiểm tra header Authorization và trạng thái API Key. |
429 |
Gửi quá nhiều yêu cầu trong một khoảng thời gian. | Chờ theo header Retry-After rồi thử lại. |
500 |
Không thể tạo phiên xác thực. | Thử lại sau; nếu lỗi tiếp diễn, liên hệ bộ phận hỗ trợ. |
Response lỗi có dạng chung:
{
"r": 100001,
"msg": "Unauthorized: missing token"
}blog.blogs_related
Bắt đầu đổi mới phương thức vận hành và tự chủ hệ thống quản trị công việc của bạn
CÔNG TY CỔ PHẦN STRINGEE
Văn phòng