2013-07-13 46 views
8

Tôi đang thực hiện triển khai google oauth của riêng mình trong dự án PHP. Mọi thứ hoạt động tốt trừ khi tôi đang cố gắng xác minh JWT đã nhận sau mã thông báo truy cập yêu cầu (https://accounts.google.com/o/oauth2/token).Xác minh chữ ký của Google OAuth JWT

Để giải mã JWT, tôi đang sử dụng lớp firebase/php-jwt.

Nó giải mã hoàn hảo, nhưng nếu tôi bật $verify tùy chọn (decode() phương pháp 3-rd arg) Tôi nhận được: Signature verification failed ngoại lệ ném.

Tôi đoán là, nếu tôi chuyển khóa sai đến phương thức decode(). Nó được sử dụng sau này cho chức năng hash_hmac() khi chữ ký được tạo xong.

Vì vậy, câu hỏi của tôi là: Tôi nên nhập khóa chính xác nào để xác minh chữ ký cho ngữ cảnh JWT Google OAuth?

Trả lời

9

Từ https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken cách tiếp cận đề nghị:

"chúng tôi khuyên bạn lấy chìa khóa công cộng của Google từ https://www.googleapis.com/oauth2/v1/certs và thực hiện việc xác nhận tại địa phương

Kể từ khi Google thay đổi khóa công khai của nó chỉ không thường xuyên (vào thứ tự của một lần mỗi. ngày), bạn có thể lưu trữ chúng và, trong phần lớn các trường hợp, thực hiện xác thực địa phương hiệu quả hơn nhiều bằng cách sử dụng điểm cuối TokenInfo. các thư viện được sửa lỗi tốt có sẵn bằng nhiều ngôn ngữ để hoàn thành của anh ấy."

+0

Lưu ý rằng tôi có hai chứng chỉ Google trở lại và cần thiết để thử xác minh với mỗi lần thử/nắm bắt. –