2013-06-12 8 views
5

Tôi đang cố gắng phóng to giá trị 'expires_in' (từ đối tượng thông tin xác thực, bây giờ là 3600 giây), bởi vì tôi muốn cho phép người dùng sử dụng ứng dụng của mình trong một thời gian dài. Tôi đang sử dụng mã thông báo làm mới, nhưng nó chỉ làm mới nếu người dùng sử dụng ứng dụng khá thường xuyên.Google OAuth2 - cách thay đổi giá trị expires_in hoặc token_expiry?

Nếu bạn biết cách thay đổi ngày token_expiry - Tôi cũng quan tâm đến giải pháp đó.

Cảm ơn bạn về mọi mẹo.

Trả lời

8

Vì lý do bảo mật, thời gian hết hạn ngắn và không thể thay đổi. Tuy nhiên, bạn có thể mở rộng ủy quyền của người dùng mà không cần tương tác với người dùng bằng cách sử dụng hàm refresh_token. Về cơ bản, như một phản ứng với auth trao đổi mã, máy chủ cung cấp refresh_token mà trông như thế này:

{ 
    "access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc", 
    "token_type" : "Bearer", 
    "expires_in" : 3600, 
    "refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74" 
} 

Khi thẻ hết hạn, tất cả các bạn phải làm là sử dụng refresh_token để phép lại, mà không cần tương tác người dùng. Như thế này:

POST /o/oauth2/token HTTP/1.1 
Host: accounts.google.com 
Content-Type: application/x-www-form-urlencoded 

client_id=21302922996.apps.googleusercontent.com& 
client_secret=XTHhXh1SlUNgvyWGwDk1EjXB& 
refresh_token=1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74 
grant_type=refresh_token 

Để làm cho mọi việc đơn giản hơn, khi bạn đang sử dụng Python, bạn thậm chí không phải quan tâm đến refresh_token nếu bạn đang sử dụng Credentials class từ google-api-python-client. Chỉ cần sử dụng Credentials.authorize() và nó sẽ tự động cho phép hoặc làm mới mã thông báo dựa trên trạng thái của bạn.

+0

Cảm ơn! Điều này hữu ích và đây cũng là nơi Google cũng gửi yêu cầu làm mới: https://developers.google.com/identity/protocols/OAuth2WebServer#offline – JJC