0

나는 https://developers.google.com/drive/v3/web/quickstart/python을 기반으로하는 Python 스크립트로 게임을하고 있으며 정상적으로 작동합니다. 간단한 텍스트 파일을 내 드라이브 계정에 업로드 할 수 있습니다.Credentials 객체는 언제 무효화됩니까?

다음과 같이 해당 페이지의 코드는 다음과 같습니다

# If modifying these scopes, delete your previously saved credentials 
# at ~/.credentials/drive-python-quickstart.json 
SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly' 
CLIENT_SECRET_FILE = 'client_secret.json' 
APPLICATION_NAME = 'Drive API Python Quickstart' 


def get_credentials(): 
    """Gets valid user credentials from storage. 

    If nothing has been stored, or if the stored credentials are invalid, 
    the OAuth2 flow is completed to obtain the new credentials. 

    Returns: 
     Credentials, the obtained credential. 
    """ 
    home_dir = os.path.expanduser('~') 
    credential_dir = os.path.join(home_dir, '.credentials') 
    if not os.path.exists(credential_dir): 
     os.makedirs(credential_dir) 
    credential_path = os.path.join(credential_dir, 
            'drive-python-quickstart.json') 

    store = Storage(credential_path) 
    credentials = store.get() 
    if not credentials or credentials.invalid: 
     flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) 
     flow.user_agent = APPLICATION_NAME 
     if flags: 
      credentials = tools.run_flow(flow, store, flags) 
     else: # Needed only for compatibility with Python 2.6 
      credentials = tools.run(flow, store) 
     print('Storing credentials to ' + credential_path) 
    return credentials 

는 (X의 민감한 대체 이런 일에 저장되는 파일 '드라이브 - 파이썬 - quickstart.json을'의 결과로, 스크립트가 한 번 실행한다고 가정 물론 정보) :

{"_module": "oauth2client.client", 
"scopes": ["https://www.googleapis.com/auth/drive.file"], 
"token_expiry": "2016-11-13T07:15:15Z", 
"id_token": null, 
"access_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
"token_uri": "https://accounts.google.com/o/oauth2/token", 
"invalid": false, 
"token_response": {"access_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
        "token_type": "Bearer", 
        "expires_in": 3600, 
        "refresh_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}, 
"client_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com", 
"token_info_uri": "https://www.googleapis.com/oauth2/v3/tokeninfo", 
"client_secret": "XXXXXXXXXXXXXXXXXXXXXXXX", 
"revoke_uri": "https://accounts.google.com/o/oauth2/revoke", 
"_class": "OAuth2Credentials", 
"refresh_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
"user_agent": null}         

이의는 '드라이브 - 파이썬 - quickstart.json을'파일은 항상 기존의 읽기 및 쓰기 둘 것을 가정하자. 시간이 지났고 JSON 값의 "token_expiry"키가 주어진 시간 후에 스크립트가 다시 실행된다고 가정합니다. 무언가가 Credentials 객체에서 시간이 만료되었음을 감지하여 자격 증명 객체가 무효 상태로 전환되도록합니다. 즉, credentials.invalid이 True가되는 것을 의미합니까? 또는 "refresh_token"필드의 존재는 API의 무언가가 자동으로 'drive-python-quickstart.json'파일을 자동으로 업데이트하여 credentials.invalid이 항상 True를 반환한다는 것을 의미합니까?

답변

1

Google 비단뱀 클라이언트 라이브러리는 새로 고침 토큰이 좋은 한 필요에 따라 액세스 토큰을 새로 고칩니다. 클라이언트 라이브러리는 API에 액세스하는 데 사용됩니다. API는 인증을 제어하지 않습니다. 클라이언트 라이브러리는 클라이언트 라이브러리가 작동하기 위해 필요한 정보를 보낼 것으로 기대합니다.

맨 위 팁 : 6 개월 동안 사용되지 않은 새로 고침 토큰도 만료되므로 적어도 6 개월마다 한 번씩 스크립트를 실행하는 것이 좋습니다.

+0

필자는 스크립트를 자주 실행하는 한 토큰이 "만료되지 않도록"계속 새로 고쳐지기 때문에 위의 Python 스크립트에서'credentials.invalid'는 결코' 거짓. 그 맞습니까? – bgoodr

+1

사용자는 Google 계정을 통해 액세스 권한을 삭제할 수도 있습니다. 나는 python 개발자가 아니다. 그러나 코드가 사용자 인증 자격 증명을 어딘가에 저장하고 있으며 새로 고침 토큰을 포함한다고 가정합니다. 그런 다음 스크립트를 다시로드하면 저장된 자격 증명을 제공하게됩니다. 새로 고침 토큰이 양호한 한 사용자 또는 사용자의 개입 없이도 계속 작동합니다. – DaImTo

관련 문제