3

Google 드라이브의 하드 코딩 된 스프레드 시트 하나에 액세스해야하는 appengine 앱이 있습니다. 다음과 같이 지금까지 나는이 달성 된 최대Appengine에서 Google 드라이브 스프레드 시트에 액세스

는 :

SpreadsheetService service = new SpreadsheetService("myapp"); 
service.setUserCredentials("[email protected]", "myhardcodedpassword"); 

나는 새로운 사용자와이 오늘 시도 할 때, 나는 사용자 이름과 암호가 확실히 정확했다하더라도 InvalidCredentialsException을 얻었다. 의심스러운 로그인이 방지되었다는 메일을받은 편지함에 받았는데 다시 사용할 수있는 방법이없는 것으로 보입니다.

소스 코드를 하드 코드하는 것이 좋지 않다는 것도 알고 있습니다.

그러나 나는 이것을 위해 OAuth/OAuth2를 사용하는 방법에 대해 매우 광범위하게 온라인을 읽었으며 블로그, stackoverflow 응답 등의 정보 조각을 아무 쓸모 없게 만드는 데 시간과 시간을 낭비하게되었습니다.

이상적으로 솔루션에는 앱에 하드 코딩 된 장기 액세스 토큰을 생성하는 초기 프로세스가 포함되는 것이 이상적입니다.

이 작업을 수행하는 방법에 대한 단계별 목록이 필요합니까?

+0

그러나 oauth 흐름의 몇 가지 완전한 예가 있습니다. 여러 소스에서 함께 조각 할 필요가 없습니다. oauth 프로세스, 서버 3legged oauth2 플로우를 이해해야합니다. –

+0

나는 그것을 이해한다. 그러나 특정 Google 스프레드 시트를 검색하기 위해 서버를 하드 코딩하는 방법은 분명하지 않지만 실제로 OAuth를 사용하는 것이 가능하지는 않습니다. 주위를 둘러봤을 때 난처한 devs가 많이 있습니다. – funkybro

+0

흠, 당신이 그 코멘트에서 그것을 이해하지 않는 것 같습니다. –

답변

10

편집 : API 콘솔 아래 변경된 단계의 세부 사항을 재 설계 한 구글로 - 참조 코멘트를 여기

OK가 간다 단계적으로

  1. 이동 Google 클라우드 콘솔 및
  2. 고객 ID 및 고객 기밀을 기록해야합니다.
  3. OAuth 운동장으로 이동하여 톱니 바퀴 아이콘을 클릭하고 자신의 자격 증명을 선택하고 입력합니다.
  4. Cloud COnsole로 돌아가서 유효한 콜백 URL로 Oauth 놀이터를 추가해야한다는 사실을 상기합니다. 그렇게해라.
  5. 스프레드 시트 범위를 선택, 1 단계를 수행하고 메시지가 나타나면
  6. Google 계정을 선택 권한을 부여 클릭하고
  7. 2 단계를 수행하라는 메시지가 표시되면 인증을 부여, 클릭 '에 대해 Exchange 인증 코드를 토큰'당신은을
  8. 볼 수 있습니다

새로 고침 토큰 토큰 새로 고침을 포함하는 입력 상자가 정든 사용자 이름/암호에 해당하는, 그래서 이것은 당신이 하드 코드 (또는 저장하는 곳을 검색 할 수있는 응용 프로그램을 보안) 것이다 것입니다.

당신이 Google 스프레드 시트에 접근 할 필요가있을 때, 당신은 당신에게 액세스 토큰

{ 
    "access_token": "ya29.yyyyyyyyyyyyyyyyyy", 
    "token_type": "Bearer", 
    "expires_in": 3600 
} 

를 반환합니다

POST https://accounts.google.com/o/oauth2/token 
content-type: application/x-www-form-urlencoded 
client_secret=************&grant_type=refresh_token&refresh_token=1%2xxxxxxxxxx&client_id=999999999999.apps.googleusercontent.com 

는 스프레드 시트에 액세스 할 때마다 HTTP 헤더에 액세스 토큰을 넣어 호출 API

Authorization: Bearer ya29.yyyyyyyyyyyyyyyyy 

그리고 끝났습니다

+0

절대적인 아름다움. 며칠 동안 계속했다면 500 포인트의 현상금을 얻었을 것입니다. – funkybro

+0

Credentails 탭의 Oauth 부분에서 클라이언트 ID와 Secret을 얻어야한다고 가정합니다. 그러나 고객 비밀은 주어지지 않는 것 같습니다. –

+0

"CREATE NEW CLIENT ID"-> "웹 응용 프로그램"을 선택해야합니다. – funkybro

0

Pinoyyid는 참으로 훌륭한 도움을주었습니다. Personal (웹에 액세스 할 수있는) Google 드라이브에 대한 액세스를 허용하는 Python 코드를 확인하고 싶습니다.

Google App Engine 내에서 (웹 앱의 일부로) 정상적으로 실행되며 데스크탑에서도 독립 실행 형입니다 (Google App Engine SDK가 컴퓨터에 설치되었다고 가정하면 [https://developers.google.com/appengine/downloads]] 가능).

나의 모든 Google 드라이브 파일에 대한 액세스를 원했기 때문에 내 경우에는 Pinyyid의 과정에서 https://www.googleapis.com/auth/drive 범위를 추가했습니다. 내가 제공 한 모든 사람에게 감사드립니다

import httplib2 
import datetime 
from oauth2client.client import OAuth2Credentials 
from apiclient.discovery import build 

API_KEY = 'AIz...'  # from "Key for Server Applications" from "Public API Access" section of Google Developers Console 
access_token = "ya29..." # from Piinoyyid's instructions 
refresh_token = "1/V..." # from Piinoyyid's instructions 
client_id = '654....apps.googleusercontent.com' # from "Client ID for web application" from "OAuth" section of Google Developers Console 
client_secret = '6Cl...' # from "Client ID for web application" from "OAuth" section of Google Developers Console 
token_expiry = datetime.datetime.utcnow() - datetime.timedelta(days=1) 
token_uri = 'https://accounts.google.com/o/oauth2/token' 
user_agent = 'python urllib (I reckon)' 

def main(): 
    service = createDrive() 
    dirlist = service.files().list(maxResults=30) 
    print 'dirlist', dirlist 
    result = dirlist.execute() 
    print 'result', result 

def createDrive(): 
    credentials = OAuth2Credentials(access_token, client_id, client_secret, refresh_token, token_expiry, token_uri, user_agent) 
    http = httplib2.Http() 
    http = credentials.authorize(http) 
    return build('drive', 'v2', http=http, developerKey=API_KEY) 

main() 

을 :

등 당신의 새로 고침 토큰을 얻을 수 Pinoyyid의 지침에 따라 후,이 작은 파이썬 스크립트를 구동하여 Google의 모든 파일의 목록을 얻을 것이다 이를 해결하기위한 단계를 거쳐야합니다.

관련 문제