GoogleAppsScript 소유자 변경 시 필요한 작업

한 엔지니어의 Google 계정 소유자로 움직이고 있던 GoogleAppsScript를 인수했지만 스크립트 소유권이 바뀌었기 때문에 그 스크립트를 이용하고 있던 배치 처리가 잇달아 움직이지 않게 되어 버렸다. 해결 방법을 기록해 둡니다. 기본적으로는 인증정보를 올바른 것으로 재작성해 주면 움직이기 시작하지만 토큰이 오래되어 버리기 때문에 재발행이 필요하다.



GoogleAppsScript 복제



먼저 제목없는 새 프로젝트를 만들고 기존 코드의 내용을 붙여넣고 저장합니다.
"GoogleDrive"→ "신규"→ "GoogleAppsScript"
기존 코드를 새 프로젝트에 붙여넣기 저장
또는 파일 복제
하나하나 수정해 나가는 수단도 있지만 재작성해 버리는 것이 빠르다고 판단

정보 수집



프로젝트(스크립트)의 고유한 자격 증명 등을 수집
  • "GoogleDrive"→ "프로젝트(스크립트)를 마우스 오른쪽 버튼으로 클릭"→ "앱에서 열기"→ "GoogleAppsScript"
  • "파일"→ "프로젝트 속성"
  • 프로젝트 키: MkBVBECXF_-hQi8ffeQsUZ5fOkIAXXXXX(예)
  • 스크립트 ID: 1tAkxOWU-XDcfkGAJe1G_HSW9hmLw7nkNt-3qWuwABoPYRm4cyuNXXXXX(예)

  • "자원"→ "Developers Console 프로젝트..."→ "API Manager"화면 열기
    "인증 정보"→"Apps Script"
  • 클라이언트 ID: 3930309XXXXX-h2jag0253e6q6d39bbn0vthq9pjXXXXX.apps.googleusercontent.com(예)
  • 클라이언트 비밀 : RHqmnHOSSbFdkLugSbhXXXXX (예) ※ "비밀 재설정"으로 변경 가능


  • API 활성화



    "API Manager"화면 → "라이브러리"→ "Google Apps Script Execution API"에서 검색 → "Google Apps Script Execution API"를 클릭 → "활성화"를 클릭

    라이브러리 활성화



    "자원"→"라이브러리"→"라이브러리 검색"
    예를 들어 ChatworkAPI를 사용하는 경우 프로젝트 키 "M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT"를 검색하여 최신 버전을 선택하고 "저장"을 클릭하십시오.

    인증 코드 취득



    client_id=이후를 다시 작성하여 다음과 같이 브라우저에서 액세스

    auto


    https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fscript.google.com%2Foauthcallback&client_id=39303096XXXXX-h2jag0253e6q6d39bbn0vthq9pjXXXXX.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.external_request&access_type=offline&approval_prompt=auto
    

    force


    https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fscript.google.com%2Foauthcallback&client_id=3930309XXXXX-h2jag0253e6q6d39bbn0vthq9pjXXXXX.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.external_request&access_type=offline&approval_prompt=force
    
  • "스크립트 이름"이 다음을 요청합니다. 화면에서 "허용"을 클릭하십시오
  • 요청한 파일이 존재하지 않습니다. 화면이 표시되지만 화면의 URL의 code = "~"#의 ~ 부분이 인증 코드가됩니다

  • 취득한 인증 코드



    4/FT9xgav9Y8Hc1ftNQ6rInYHmh-rXv0wHvPwU1BXXXXX

    액세스 토큰 및 새로 고침 토큰 획득


    $ curl -d client_id=3930309XXXXX-h2jag0253e6q6d39bbn0vthq9pjXXXXX.apps.googleusercontent.com \
    > -d client_secret=RHqmnHOSSbFdkLugSbhXXXXX \
    > -d redirect_uri=https%3A%2F%2Fscript.google.com%2Foauthcallback \
    > -d grant_type=authorization_code \
    > -d code=4/v3DBBc_cyBUQB0aIemwGWG3JBJeP2dhPG8nouIXXXXX https://accounts.google.com/o/oauth2/token
    {
      "access_token" : "ya29.Ci9qA_CaeZjBcfABtaULa0KLmR2Zxy5wz9vd4ZLkRRvFwRbMpj9X6W80fL6ifXXXXX",
      "token_type" : "Bearer",
      "expires_in" : 3600,
      "refresh_token" : "1/ROwYk8-yHnFJXWocZVDIlTbBEu5kJzvFCiTTRXXXXX"
    }
    

    새로 고침 토큰으로 액세스 토큰 얻기


    $ curl -X POST https://accounts.google.com/o/oauth2/token \
    >  -d "refresh_token=1/pBTVup7HFGyM27fmqe-fLGTQQE_LQwm7Iip-38XXXXX" \
    >  -d "client_id=3930309XXXXX-h2jag0253e6q6d39bbn0vthq9pjXXXXX.apps.googleusercontent.com" \
    >  -d "client_secret=RHqmnHOSSbFdkLugSbhXXXXX" \
    >  -d "grant_type=refresh_token"
    {
      "access_token" : "ya29.Ci9qAyAZs5wrgTLcP04SifCNBlzZa0S290EaV3n4TTu6t7VubJVmFrnh98SqXXXXX",
      "token_type" : "Bearer",
      "expires_in" : 3600
    }
    

    오류 출력 예



    이미 액세스 토큰이 발급된 경우


    {
      "error" : "invalid_grant",
      "error_description" : "Code was already redeemed."
    }
    

    액세스 토큰이 만료된 경우


    {
      "error" : "invalid_grant"
    }
    

    새로 고침 토큰만 발급되지 않는 경우



    원인은 잘 모르지만 이 경우 인증 코드를 다시 얻고 다시 액세스 토큰을 얻어 보면 개선하기도 한다.
    {
      "access_token" : "ya29.CjBqA4Vvj-HCOq791ZcZ7zrCXq4tE17u-ghBV8sdjWoKyFwFETws98QYO8cupDXXXXX",
      "token_type" : "Bearer",
      "expires_in" : 3490
    }
    

    좋은 웹페이지 즐겨찾기