2013-02-17 15 views
5

Tôi có một ứng dụng web nội bộ cho công ty của tôi sử dụng thông tin đăng nhập với hệ thống xác thực google. Nó hoạt động tốt cho hầu hết các phần, họ có thể xác thực với google, đồng ý cho ứng dụng của tôi truy cập thông tin chi tiết cơ bản của người dùng và sau đó khi họ quay lại ứng dụng, tôi thực sự có thể lấy chi tiết người dùng của họ.đăng nhập bằng google luôn yêu cầu sự đồng ý của người dùng

Vấn đề là tôi nghĩ rằng một khi họ đồng ý, họ sẽ không phải làm điều đó mỗi lần. Đây có phải là giả định không chính xác không? Hiện tại, mỗi lần họ nhấp vào "đăng nhập bằng google", họ phải đồng ý thay vì được chuyển hướng trở lại ứng dụng của tôi.

Tôi đang sử dụng PHP (trình viết mã) và một Oauth lib khá tốt được tìm thấy trên github (ngã ba của thư viện của cá tầm phil). Có một số param tôi nên được thông qua để người dùng không phải đưa ra sự đồng ý mỗi lần, sau lần đầu tiên?

Trả lời

15

Lần đăng nhập của Google không yêu cầu sự chấp thuận của người dùng mỗi lần. Nếu bạn đang sử dụng thủ tục Đăng nhập OAuth2, bạn sẽ có thể đăng nhập lần thứ hai bằng cách phê duyệt lại: https://developers.google.com/accounts/docs/OAuth2Login

Trong một số ngữ cảnh, có thể tự động chấp thuận để bị vô hiệu hóa, yêu cầu chấp thuận của người dùng đối với mọi thông tin đăng nhập.

Trường hợp đầu tiên và phổ biến nhất là nếu ứng dụng của bạn yêu cầu Google yêu cầu đồng ý mọi lúc. Kiểm tra xem yêu cầu ủy quyền của bạn (mà bạn có thể đã sao chép từ ví dụ hoặc mã mẫu) bao gồm 'prompt = approval' hoặc biểu mẫu không chuẩn, cũ 'approval_prompt = force'. Xóa các tham số này (nếu có), có khả năng sẽ tự động phê duyệt để bắt đầu làm việc.

Một tình huống khác là nếu URL chuyển hướng của bạn dựa trên 'localhost' hoặc một số URL khác không thuộc về không gian tên DNS chung. Trong trường hợp này, vì lý do bảo mật, Google đặt cookie trên máy tính của người dùng, trong miền accounts.google.com, để báo hiệu người dùng được ủy quyền _this_device_ đăng nhập vào 'foo' trên localhost (hoặc tên miền cục bộ); Google sẽ chỉ tự động phê duyệt w/o đồng ý yêu cầu thứ 2 nếu nó tìm thấy cookie. Lý do là ý nghĩa của 'localhost' (hoặc tên miền cục bộ hoặc URL khác không được xây dựng trên không gian tên DNS toàn cục) phụ thuộc vào thiết bị và cho phép ủy quyền áp dụng trên các thiết bị có thể gây ra rủi ro bảo mật. Vì vậy, nếu công ty của bạn đã định cấu hình trình duyệt để xóa tất cả cookie khi thoát, bạn sử dụng URL không tuyệt đối, bạn có thể thấy người dùng của mình phải đồng ý mọi lúc. Giải pháp là lưu trữ điểm cuối của bạn trên tên máy chủ hợp lệ Internet (máy chủ không cần truy cập từ bên ngoài Mạng nội bộ, chỉ cần tên máy chủ cần hợp lệ toàn cầu) hoặc bạn cần phải miễn trừ accounts.google.com chính sách xóa cookie.

+0

Cảm ơn breno. Lặn vào lib của bên thứ ba, nó đã được explictly thêm approval_prompt = force. Tôi đã không đi qua đó trong các tài liệu tôi đã đọc, nhưng loại bỏ đó đã thực sự khắc phục vấn đề. Làm việc như một say mê, cảm ơn! – Greg