Giao diện
FAQ & Troubleshooting — CAS
Các câu hỏi thường gặp và cách xử lý sự cố khi sử dụng plugin CAS.
Lỗi "Missing ticket" hoặc không nhận ticket
Triệu chứng: Sau khi đăng nhập tại CAS, redirect về Digiforce nhưng không có ticket trong URL.
Nguyên nhân phổ biến:
- Service chưa đăng ký trên CAS — CAS server không nhận diện domain Digiforce → không tạo ticket
- Service URL pattern không khớp — regex đăng ký trên CAS không bao phủ URL thực tế
- CAS redirect sai URL —
serviceDomaincấu hình không đúng
Giải pháp:
- Kiểm tra service đã đăng ký trên CAS server
- Đảm bảo
serviceDomainkhớp chính xác với domain Digiforce (bao gồm protocol và port) - Kiểm tra log CAS server xem lỗi cụ thể
Lỗi "Invalid ticket" khi validate
Triệu chứng: CAS trả về ticket nhưng khi Digiforce validate thì báo INVALID_TICKET.
Nguyên nhân phổ biến:
- Ticket đã hết hạn — ticket CAS có TTL rất ngắn (thường 5-10 giây). Nếu mạng chậm hoặc server xử lý lâu, ticket có thể expired
- Service URL không khớp — URL gửi trong
serviceValidatekhác với URL ban đầu khi redirect. CAS so sánh chính xác từng ký tự - Ticket đã được dùng — user refresh trang hoặc quay lại URL cũ chứa ticket đã consumed
Giải pháp:
- Kiểm tra
serviceDomainđúng chính xác (không thiếu/thừa trailing slash) - Đảm bảo kết nối mạng giữa Digiforce server và CAS server nhanh
- Không cho user bookmark URL chứa ticket
XML parsing — cas:user vs sso:user
Triệu chứng: Ticket validate thành công (XML success) nhưng không parse được username.
Nguyên nhân: CAS server dùng namespace prefix khác với mặc định.
Các namespace phổ biến:
| Prefix | Namespace URI | Dùng bởi |
|---|---|---|
cas: | http://www.yale.edu/tp/cas | Apereo CAS (phổ biến nhất) |
sso: | Tùy implementation | CAS tùy chỉnh |
Plugin hỗ trợ cả cas:user và sso:user. Nếu CAS server dùng prefix khác, kiểm tra XML response thực tế:
bash
curl "https://cas.example.com/cas/serviceValidate?ticket=ST-xxx&service=https://app.example.com/api/cas:service"User CAS đăng nhập nhưng không có email
Nguyên nhân: CAS server không trả về attributes hoặc attribute release policy chưa cấu hình.
Giải pháp:
- Kiểm tra CAS service configuration: bật
ReturnAllAttributeReleasePolicyhoặc cấu hình attributes cụ thể - Username từ
<cas:user>thường là username — nếu cần email, đảm bảo CAS trả về trong attributes
autoSignup nằm ở đâu?
Khác với các plugin auth khác, CAS plugin đặt autoSignup ở cấp cao nhất:
json
{
"casUrl": "...",
"serviceDomain": "...",
"autoSignup": true
}Không phải public.autoSignup. Đây là đặc thù riêng của plugin CAS.
CAS Single Logout (SLO) có được hỗ trợ không?
Hiện tại plugin chưa hỗ trợ CAS Single Logout. Khi user logout khỏi CAS, session trên Digiforce vẫn active cho đến khi hết hạn hoặc user logout thủ công.