Tự triển khai Google Service Account JWT trong Node.js
Gói npm googleapis là tiêu chuẩn cho các Google APIs.
Nó hoạt động tốt. Nhưng nó làm tăng thêm 380KB và hơn 450 dependencies vào dự án của bạn.
Nếu bạn chỉ cần một API cho một script CI, bạn không cần phải gánh một dung lượng lớn như vậy.
Tôi đã xây dựng một script để kiểm tra trạng thái lập chỉ mục URL chỉ với 60 dòng code.
Nó sử dụng ba module có sẵn của Node.js:
- crypto
- fetch
- URL
Nó không thêm bất kỳ package nào vào repository của bạn.
Xác thực Google service account tuân theo tiêu chuẩn RFC 7523.
Quy trình như sau:
- Tạo một JWT với client email và private key của bạn.
- POST JWT đó đến Google token endpoint.
- Nhận một access token.
- Sử dụng token đó trong header của API request.
Một chi tiết quan trọng: hãy sử dụng scope webmasters. Scope searchconsole mới hơn sẽ không hoạt động với URL Inspection API.
Bạn phải sử dụng mã hóa Base64url cho JWT. Base64 tiêu chuẩn yêu cầu ba thay đổi:
- Loại bỏ padding.
- Thay thế + bằng -.
- Thay thế / bằng _.
Private key từ Google Cloud của bạn đã ở định dạng chính xác. Bạn không cần các thư viện bên ngoài để ký (sign) token.
Khi bạn gọi token endpoint, hãy log lại error response. Google cung cấp các lý do cụ thể cho các lỗi, chẳng hạn như token hết hạn hoặc thiếu service account.
Đối với chính cuộc gọi API:
- Thiết lập header Authorization thành
Bearer [token]. - Đảm bảo
siteUrlkhớp chính xác với property trong Search Console của bạn. - Thêm email service account của bạn làm người dùng (user) trong Search Console.
Cách tiếp cận này hoạt động tốt nhất cho các tác vụ chuyên biệt như CI pipelines.
Đừng sử dụng cách này nếu bạn cần:
- Nhiều Google APIs.
- Tự động làm mới (refresh) token.
- Logic retry phức tạp.
- Code server production với độ phức tạp cao.
Đối với một tác vụ CI đơn lẻ, 60 dòng code tốt hơn là 450 dependencies. Hiểu được luồng xử lý thô (raw flow) này cũng giúp việc debug dễ dàng hơn khi các thư viện gặp lỗi.