2012-08-09 4 views
1

갑자기 사용자가 액세스 권한을 부여 받았고 인증 코드가 리디렉션 URL로 전달 된 후 Oauth 프로세스 중에 오류가 발생했습니다. 몇 주 동안 동일한 코드를 사용해 왔지만 제대로 작동했습니다. 나는 내가 어떤 변화도하지 않았 음을 확신한다.Oauth 코드를 교환 할 때 오류가 발생했습니다.

Google 드라이브 API에 문제가 있습니까?

오류는 여기 파이썬 코드에서 여기에서 발생

credentials = flow.step2_exchange(authorization_code) 

오류 메시지 :

FlowExchangeError: Invalid response 400. 

구글의 예에서 복사로 전체 exchange_code 방법 :

def exchange_code(authorization_code): 
    """Exchange an authorization code for OAuth 2.0 credentials. 

    Args: 
    authorization_code: Authorization code to exchange for OAuth 2.0 
        credentials. 
    Returns: 
    oauth2client.client.OAuth2Credentials instance. 
    Raises: 
    CodeExchangeException: an error occurred. 


    """ 

    logging.debug(authorization_code); 

    flow = flow_from_clientsecrets(CLIENTSECRETS_LOCATION, ' '.join(SCOPES)) 

    flow.redirect_uri = REDIRECT_URI 


    try: 
    credentials = flow.step2_exchange(authorization_code) 
    return credentials 
    except FlowExchangeError, error: 
    logging.error('An error occurred: %s', error) 
    raise CodeExchangeException(None) 

의 Oauth 운동장 사용 다음 오류 응답이 표시됩니다.

HTTP/1.1 400 Ok 
Status: 400 
Content-length: 37 
X-xss-protection: 1; mode=block 
X-content-type-options: nosniff 
X-google-cache-control: remote-fetch 
-content-encoding: gzip 
Server: GSE 
Via: HTTP/1.1 GWA 
Pragma: no-cache 
Cache-control: no-cache, no-store, max-age=0, must-revalidate 
Date: Fri, 10 Aug 2012 03:23:54 GMT 
X-frame-options: SAMEORIGIN 
Content-type: application/json 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
{ 
    "error" : "unauthorized_client" 
} 

지금 코드가 몇 주 동안 작동했을 때 왜 이런 일이 일어나기 시작하는지 아이디어가 있으십니까?

덕분에, 크리스

답변

0

가 마침내 얻을 수 있었다 코드가 다시 작동합니다. GAE 앱 버전을 이전 버전으로 되돌 렸습니다. Oauth exchange_code가 다시 작동했습니다. 그런 다음 코드를 전혀 변경하지 않고 GAE의 현재 버전으로 다시 가져 갔으며 계속 작동합니다.

그래서 코드를 변경하지 않고 최근에 GAE에서 새 버전을 만들었을 때 oauth 프로세스가 작동을 멈췄습니다. 가치가있는 것이 무엇인지 .....

1

HTTP 응답 코드 (400)는 요청이 어떻게 든 무효가되어, 무엇이 잘못되었는지를 알려주는 더 설명이 포함 된 오류 메시지가되어야한다는 것을 의미한다.

아마도 파이썬 라이브러리가 완료 메시지를 숨기고, 나는 당신과을의 OAuth 2.0 놀이터와 같은 요청을 시도하고 비교를 권하고 싶습니다 :

https://code.google.com/oauthplayground/

+0

감사합니다. Claudio 님, 응답을 표시하도록 질문을 수정했습니다. OAuth 2.0 놀이터 – user1501783

+0

요청을 추가 할 수 있습니까? 민감한 세부 사항을 자유롭게 삭제하십시오. –

+0

위의 첫 번째 열에있는 실패한 행 이외의 실제 요청을 표시하는 방법을 모르겠습니다. credentials = flow.step2_exchange (authorization_code). 나는 'flow'가 수입품 중 하나에 정의되어 있다고 가정한다 : oauth2client.client import FlowExchangeError. oauth2client.client의 은 AccessTokenRefreshError를 가져옵니다. oauth2client.client 가져 오기 자격 증명 ... 실제 요청을 보내는 방법을 알려주실 수 있습니까? – user1501783

관련 문제