Tôi đang cố gắng để xác thực một ứng dụng di động cho nền tảng Android để tùy chỉnh một Node.js api máy chủ. Tôi muốn sử dụng mã thông báo Google OAuth2 cho việc này thay vì cuộn xác thực của riêng tôi, vì các thiết bị Android được cài đặt Google Play làm cho ứng dụng này khả dụng cho nhà phát triển ứng dụng. Tôi đang sử dụng cuộc gọi GoogleAuthUtil.getToken
từ thư viện Google Play Services, tài liệu here. Tôi đang cố gắng làm theo lời khuyên được nêu trong số android developers blogpostCách thích hợp để xác thực mã thông báo OAuth được cấp cho google trong máy chủ node.js là gì?
Phương thức getToken
này sẽ trả lại trong trường hợp của tôi là chuỗi dài 857 byte. Nếu tôi cố gắng để vượt qua thẻ này để TokenInfo endpoint của Google, nó sẽ trả về:
{ 'lỗi': 'invalid_token', 'ERROR_DESCRIPTION': 'Giá trị không hợp lệ'}
Tôi đang làm gì sai đây? Trong 'phạm vi' của cuộc gọi getToken, Tôi gửi: audience:server:client_id:**i_put_my_clientid_here**
. Tôi có một clientid được tạo cho "ứng dụng đã cài đặt". Sử dụng id ứng dụng khách này, lệnh gọi hàm getToken không hoạt động. Khi tôi tạo ra một id khách hàng cho một "tài khoản dịch vụ", cuộc gọi thành công, nhưng tôi nhận được một thẻ 857 byte mà không thành công khi truyền cho các thiết bị đầu cuối TokenInfo như đã mô tả ở trên.
EDIT: Tôi cũng đã tạo id ứng dụng cho "ứng dụng web", vì có vẻ như đây là id ứng dụng khách thích hợp để sử dụng khi gọi getToken
. Nhưng hành vi là như nhau, tôi lấy lại một mã thông báo byte 857 không xác thực khi gọi đến điểm cuối của Google.
Làm thế nào tôi có thể đúng cách nhận mã auth hợp lệ sử dụng dịch vụ Google Play trên Android? Khi tôi có đúng mã thông báo, thư viện node.js thích hợp để xác thực bên máy chủ đó là gì? Tôi có thể sử dụng passport-google-oauth không?
Tôi đã trích xuất ba phần và cần phải xác minh id_token. SHA256 (tiêu đề + "." + Tải trọng) có bằng chữ ký được giải mã không? Hoặc là chữ ký được giải mã chỉ bằng hash của tải trọng? Là nó bằng hoặc trước khi dữ liệu được mã hóa Base64? Chức năng của tôi cho veryfying các mã thông báo với các chứng chỉ google không hoạt động, vì vậy tôi chỉ tự hỏi. Cảm ơn – kingSlayer
chữ ký dành cho sha256 (header + "." + Payload) – George